关于RHEL5中pulse的故障转移实现的问题

章博士,你好,这几天详细的研究了下lvs,主要有2个问题,一个是arp问题,我已经解决。下面是我的方法,网上很多人说的比较含糊,实际上arp问题必须抓包验证。

Vi /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
Vi /etc/rc.local
ip addr add 192.168.168.100/32 dev lo
修改和VIP同子网的网络接口的arp配置,并使用ip命令添加虚拟服务器ip地址到lo网卡上,linux 2.6以上内核官方不推荐继续使用ifconfig添加网卡alias
凡是能收到对VIP ARP广播报文的网口,如果我们用arp_announce和arp_ignore,都需要设置。
Real server的虚拟ip必须加在lo网卡上,加到其他任何网卡上都会导致arp_announce和arp_ignore无效!!!内外子网最好vlan分割,隔离arp包,调度器上的内部网卡收到arp包应答后也会响应错误的VIP的ARP应答包,arp地址是内部网卡的地址。具体修改后一定要抓包查看。

另一个问题也依旧是arp方面的,在RHEL5中的PULSE 服务实际上是一个打包后的服务,服务监控,故障转移都做进去了,很方便,不过红帽也很烂:)help文件中的参数设置都错的离谱,而且pulse的web配置工具也有重大bug,配置http服务的send字符中的\r\n\r\n到配置文件中会变成rnrn。说远了, rhel5中的pulse在实现故障转移的时候 并没有对网关做一个arp更新,更新网关上的vip的mac地址,所以可想而知,故障转移不能实时的转移过去,受限网关的arp超时,不知道章博士平时做的项目中是如何解决这个问题的????

Forums:

另外,实际测试中红帽的pulse服务好像在针对调度器上的内外网卡网线中断的情况下 无法做到故障转移????
我的试验环境是双网卡,外部网卡接外网,内部网卡负责转发数据到调度的服务器上,这样一个负责进,一个负责出,效率比单网卡要好?

当然 这样就导致红帽的pulse服务心跳检查好像就犯傻了??

在配置文件中去掉了调度器的内部地址,外部网线中断后可以failover了,内部的不行,看来主调度器必须只能使用单网卡。
唯一的问题就是arp的更新问题了

我运行pulse -n -v 的输出中显示的执行/usr/sbin/send_arp 这里后面没有任何参数!!! 不知道 为何红帽的会如此?

感觉下来红帽的产品好烂,文档错的离谱,配置工具也有bug

如果默认就全正确,Redhat去哪里收服务费呢?
其实很多大厂,IBM HP Sun Oracle 等都如此,而且只有对内的文档,让你出了问题后只能找原厂解决。
------------------
把酒当歌,黎曼几何。

呵呵,我的问题基本都解决了,又抓包看了下,红帽的pulse服务failover时发出的arp包是广播地址包,因为是vmware前期测试,内部是华为的M800 ADSL MODEM,从外部连接内部的VIP端口,经验证,华为的M800 猫不接受ARP 广播包,LINUX和VISTA收到ARP广播包后都更新了mac地址条目,就不知道到时候真是环境情况下路由器能否更新相应的地址表项? 我替换了默认的vsend_arp命令 ,改为一个调用原来的send_arp命令后无法工作(我的想法是在shell脚本里面判断网关的ip和mac地址 发送一个单播arp应答。不知道pulse可否修改这个failover时发送的arp命令??????

Hot damn, looknig pretty useful buddy.

发现一个问题,我用redhat as 4up4的时候几台real server:
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
都没问题,装了两台(real server) redhat as 5竟然用上面的几行都不行,启动lvs的时候,调度器不能ping通装redhat 5的机器,只有把redhat 5上的lo:0的虚拟网卡关才能ping通。用了章博士一文章里的关闭arp的所有方法,都不行,不知道怎么办,想问楼主,你上面的设置我也设了,但也不行,是不是redhat 5的问题。
客户机的命令:
echo "lvsDR port starting"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

抓包 所有的问题抓包就知道了

randomness