请问章老师,我下面的安装方法,为什么在ip addr sh里在master和backup里都有VIP呢

系统:Centos4.2
软件:heartbeat heartbeat-ldirectord heartbeat-pils heartbeat-stonith ipvsadm arptables_jf

机器:3台,IP分布:
A(主调度器):192.168.3.2
B(辅调度器):192.168.3.3
VIP(虚拟IP):192.168.3.5
C(真实服务器):192.168.3.4
D(测试机器):192.168.3.6

注意以下是:LVS/DR模式

一、在C(真实服务器)上安装配置
1、安装:
因为是真实服务器,所以安装很简单,只要安装arptables_jf即可:
yum -y install arptables_jf

2、配置:
其实只要执行下面的lvs文件即可:
/etc/ha.d/resource.d/lvs stop

二、调度器上的配置
1、安装:
yum -y install heartbeat-ldirectord heartbeat-pils heartbeat-stonith heartbeat ipvsadm arptables_jf
2、配置
(1)authkeys(注意这个文件需要600的权限,否则heartbeat启动不了)
cat authkeys
auth 2
2 sha1 bixuan

(2)ha.cf
cat ha.cf
#debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
bcast eth0 eth1 # Linux
mcast eth0 225.0.0.1 694 1 0
auto_failback off
node ld1
node ld2
ping 192.168.3.1
respawn hacluster /usr/lib/heartbeat/ipfail

apiauth ipfail gid=haclient uid=hacluster

(3)haresources
cat haresources
ld1 \
IPaddr2::192.168.3.5/24/eth0/192.168.3.255 \
ldirectord::ldirectord.cf \
LVSSyncDaemonSwap::master \
lvs

(4)ldirectord.cf
cat ldirectord.cf
checktimeout=10
checkinterval=2
autoreload=no
logfile="/var/log/ld.log"
quiescent=yes

virtual=192.168.3.5:80
#fallback=127.0.0.1:80
real=192.168.3.2:80 gate 6
real=192.168.3.3:80 gate 6
real=192.168.3.4:80 gate 6
service=http
request="test.html"
receive="test.html"
scheduler=wlc
persistent=30
protocol=tcp
checktype=negotiate

(5)lvs
这个文件在ha.d/resource.d/
cat ha.d/resource.d/lvs
#!/bin/sh
# chkconfig: 2345 90 10
# description: Preparing for Load Balancer and Real Server switching

VIP=192.168.3.5 # 虚拟IP
LOCAL_IP=192.168.3.2 # 调度器的IP
BROADCAST=192.168.3.125 # 虚拟IP的broadcast

echo "1" > /proc/sys/net/ipv4/ip_forward

. /etc/rc.d/init.d/functions

case "$1" in
start)
echo "Preparing for Load Balancer"
ifconfig lo:0 down
/sbin/arptables -F
;;
stop)
echo "Preparing for Real Server"
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $BROADCAST up
/sbin/arptables -F
/sbin/arptables -A IN -j DROP -d ${VIP}
/sbin/arptables -A OUT -j mangle -o eth0 -s ${VIP} --mangle-ip-s ${LOCAL_IP}
;;
*)
echo "Usage: lvs {start|stop}"
exit 1
esac

这里如果采用tunl模式,请把:lo:0改成tunl0,还有把BROADCAST的值改成VIP的值。

(5)/etc/hosts

在主和辅的调度器里都加上:
192.168.3.2 ld1
192.168.3.2 ld2

然后我在master和backup上运行ip addr sh都有下面的内容:
master:
eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:04:23:c1:7e:38 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.2/24 brd 192.168.3.255 scope global eth0
inet 192.168.3.5/24 brd 192.168.3.255 scope global eth0

backup:
eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:04:23:c1:7e:38 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.3/24 brd 192.168.3.255 scope global eth0
inet 192.168.3.5/24 brd 192.168.3.255 scope global eth0

请问这个同时都存在192.168.3.5这个VIP,是如何引起的呢?是不是我的配置有问题?但是现在不影响使用,我担心会引起后患,麻烦章老师了,谢谢!

Forums:

我好久没有玩heartbeat了。我想"inet 192.168.3.5/24 brd 192.168.3.255 scope global eth0"是heartbeat程序加进来的,不知道为什么当状态为backup时,它没有把这个192.168.3.5/24删除掉?好在运行"lvs stop"时,会加入arptables过滤规则,所以在backup上的192.168.3.5/24不会影响了主调度器。

stop)
echo "Preparing for Real Server"
/sbin/ip addr del ${VIP}/24 dev eth0

加了黑体这句就OK了,呵呵,我想会不会是heartbeat的bug:)

谢谢章老师的回复!

1.为什么我的realserver的weight=0以后,还会分配连接呢?我的persistent=30
我是过了30秒后,再测试还是有分配连接,为什么呢?
而且我也执行了:echo 1 > /proc/sys/net/ipv4/vs/expire_nodest_conn

2.如果来计算一台2G内存,XEON2.8的调度器可以支持多少并发呢?如果要控制HASH表的话,该如何来控制呢?

麻烦章老师帮忙,THX

关于第一点,按道理新的连接不应该被调度到weight=0的服务器上。在新的连接发出前,可以通过"ipvsadm -Lcn"来查查state为NONE的持久性模板,确保它们已经被超时淘汰掉了。

关于第二点,调度器一般不需要太快的CPU,有512M可用内存可支持到近4百万连接调度。Hash表的大小在编译时可以设置。

我在调度器上执行:ipvsadm -Lnc|grep NONE|wc -l
82115

请问章老师,这么多的NONE连接,是不是已经抛弃还是未分配的?

NONE状态的连接就是记录持续性连接的模版。若有持久性连接的模版存在,来自同一IP的连接会根据这个模版调度到模版中指定的服务器。

randomness