关于session以及ipvsadm,ldirectord,heartbeat的关系的一些问题,请章老师指教

本人刚刚接触lvs,做了一个DR模式的集群,希望大家多多指点。
一 问题1
在使用heartbeat与ldirectord时,由于要在服务器端保存session,所以我将ldirectord.cf配置成persistent=240
启动heartbeat后
我访问http://192.168.169.2/(我设置的虚拟IP),显示正常

运行ipvsadm显示

IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.169.2:http rr persistent 240
-> 192.168.169.4:http Route 1 0 0
-> 192.168.169.3:http Route 1 1 0

说明服务别分配到3服务器上,当我将3的网线拔掉以后变为

IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.169.2:http rr persistent 240
-> 192.168.169.4:http Route 1 0 0
-> 192.168.169.3:http Route 0 0 0

此时我刷新刚才那个页面,无法正常显示
ipvsadm显示
IP Virtual Server version 1.2.0 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.169.2:http rr persistent 240
-> 192.168.169.4:http Route 1 0 0
-> 192.168.169.3:http Route 0 0 1

请求仍然被发送到192.168.169.3直到超时

有没有办法使realserver正常时 使用persistent连接,而当服务器down机后即使设置了 persistent参数 也可以即时将请求发送到别realserver上

二 问题2
请大家解释一下下面这句的含义:(haresources文件)
linuxha1 IPaddr::192.168.169.2/24/192.168.169.255 ipvsadm ldirectord::www

ldirectord::www这里的www是做什么用的,是ldirectord的配置文件么?(我已经把ldirectord.cf复制为www.cf)

这里的24规定掩码为255.255.255.0和转发规则定义的255.255.255.255冲突么,这里定义广播地址和转发规则定义的192.168.169.2冲突么

现在我有点搞不清楚ipvsadm,ldirectord,heartbeat之间的关系,在指定主节点上启动时是不是要把ipvs转发规则,ldirectord,heartbeat同时启动?在备份节点上呢,是三个都启动还是只启动heartbeat?heartbeat可以启动ldirectord和ipvs转发规则么?
各位高手请指点!!!

附:
(1)转发规则
ifconfig eth0:100 192.168.169.2 broadcast 192.168.169.2 netmask 255.255.255.255
route add -host 192.168.169.2 dev eth0:100
ipvsadm –C
ipvsadm -A -t 192.168.169.2:80 -s rr -p 240
ipvsadm -a -t 192.168.169.2:80 -r 192.168.169.4 -g -w 1
ipvsadm -a -t 192.168.169.2:80 -r 192.168.169.3 -g -w 1
ipvsadm

(2)ldirectord.cf
checktimeout=3
checkinterval=1
#autoreload=no
#callback=
fallback=127.0.0.1:80
logfile="/var/log/ldirectord.log"
#logfile="local0"
#execute="configuration"
quiescent=yes
# A sample virual with a fallback that will override the gobal setting
virtual=192.168.169.2:80
real=192.168.169.4:80 gate
real=192.168.169.3:80 gate
fallback=127.0.0.1:80 gate
checktype=negotiate
service=http
request="test"
receive="test"
scheduler=rr
persistent=240
#netmask=255.255.255.255
protocol=tcp

Forums:

第一个问题
当选用持久服务(-p选项)支持HTTP session时,来自同一IP地址的请求将被送到同一台服务器。所以在这种状况下,一个ab生成的请求都会被调度到一台服务器,达不到性能测试的目的。在真实系统使用中,持久服务时间一般设置好几个小时。

当ldirectord监测到并且在列表中删除一台应用服务器时,之前有建立连接的,继续转发到这台机上,确实是这样。因为IPVS并不立即淘汰刚删除的服务器,考虑到服务器太忙被删除,可能很快会被加回来。如果你需要马上淘汰已删除服务器的连接,可以用

echo 1 > /proc/sys/net/ipv4/vs/expire_nodest_conn

第二个问题
IPaddr::192.168.169.2/24/192.168.169.255 ipvsadm ldirectord::www

www应该是一个服务名

heartbeat可以启动,ld,ipvs,并且按上面的一行,从左到右的顺序

谢谢各位先,我去试试。

我又回来了,哈哈.

我在一次试验中发现一个现象: 在输入ldirecotrd start后在显示器上马上回显那些真实服务器的信息,不能退出,这是怎么回事?(我没有启动heartbeat,以前都是用ssh登录远程控制的,机房条件差,热得要死;没有发现这个现象,呵呵)

还有:) ipvsadm的转发规则我一直是放在rc.local里面自动加载的,heartbeat能够启动这些转发规则么?( 据说:heartbeat是能够启动ipvsadm的,但是我在能力范围内找ipvsadm的配置文件,还是没有发现 虚拟路有 以及 转发规则 被定义的地方。我可是没有对ipvsadm的配置文件做过任何的修改哦。)

期待各位的回复:-> .....

The forum is a brhtiger place thanks to your posts. Thanks!

haresource中,ipvsadm不需要。当选用了ldirectord组件后,ldirectord调用脚本,会启动调度器的。

在第一问题中,大概是在配置文件中写了"quiescent=yes",当服务器不可用时,服务器的权值会被设置为0。这时,已有的连接会继续发送到该服务器。

可以考虑设置"quiescent=no"和使用51099描述的方法。

分别测试了在/etc/ha.d/ldirectord.cf中设置"quiescent=no"的方法和51099所述方法,发现只有前者可以。

不过如果
设置成quiescent=yes
而且cat 1 > /proc/sys/net/ipv4/vs/expire_quiescent_template

也可以。

randomness