attcat 2013-01-09
环境:
OS:
Director:CentOS6.2,运行在VMware虚拟机上
RS:windows 2003
Director:
RIP = 192.168.1.1
VIP = 192.168.1.88
RS1:
RIP = 192.168.1.2
VIP = 192.168.1.88
RS2:
RIP = 192.168.1.3
VIP = 192.168.1.88
以下在Director上配置
1)安装ipvsadmin
#yum install ipvsadm
2)设置允许转发
#vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
3)加载/etc/sysctl.conf中设置的系统参数
#sysctl -p
4)配置VIP以及调度表
#vi /etc/rc.d/rc.local
ifconfig eth0:0 192.168.1.88 broadcast 192.168.1.255 netmask 255.255.255.255 up
route add -host 192.168.1.88 dev eth0:0
ipvsadm -C
ipvsadm -A -t 192.168.1.88:9811 rr
ipvsadm -a -t 192.168.1.88:9811 192.168.1.2 -g
ipvsadm -ln
5)重启网络服务
#service network restart
以下在Real Server上配置
1)添加loopback网络适配器
控制面板/添加硬件/添加新的硬件设备/安装我手动从列表选择的硬件/网络适配器/Microsoft---Microsoft Loopback Adapter
2)设置loopback适配器的ip为VIP(192.168.1.88),子网掩码为:255.255.255.255(通过注册表修改)
rsmon遇到的问题
rsmon(Real Server Monitor)监控真实服务器,自动维护ipvs调度表,真是服务器连上rsmon后,通过输入ipvsadm,输出如下:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.88:9811 rr
-> 192.168.1.2:9811 Route 0 0 0
telnet 192.168.1.88 9811不成功(注意:Weight为0)。
通过在Director上tcpdump抓包分析,tcp握手包有收到,在Real Server(92.168.1.2)上通过MicroOLAP tcpdump抓包发现握手包没有转发到真实服务器上。
原因为Real Server(92.168.1.2)的weight为0。
相关代码如下:
IpvsManager::add_dest(port_,ip_,port_,0,proto_);
当weight设置为0后,ipvs将不会将连接分发到此服务器上。