CentOS下ipvsadm+ldirectord实现高可用集群

分类:CentOS运维 阅读:99444 次

有192.168.0.34,192.168.0.35,192.168.0.36,192.168.0.37四台服务器
192.168.0.37是nas 34,35,36 运行得email 服务。
在37上做了一个调度器来分配服务 80,25,110 端口的服务到34,35,36 上。

具体配置:
在37 服务器上,首先装了一个ipvsadm的rpm 包
yum install ipvsadm #获得ipvsadm软件,负责负载均衡,轮循请求到后台服务
然后些这个教本
参考别人写的。采用的是直接路由的模式。
#!/bin/bash
VIP=192.168.0.38
RIP1=192.168.0.34
RIP2=192.168.0.35
RIP3=192.168.0.36
GW=192.168.0.33
#Clear IPVS table
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g
/sbin/ipvsadm -A -t $VIP:25 -s rr
/sbin/ipvsadm -a -t $VIP:25 -r $RIP1:25 -g
/sbin/ipvsadm -a -t $VIP:25 -r $RIP2:25 -g
/sbin/ipvsadm -a -t $VIP:25 -r $RIP3:25 -g
/sbin/ipvsadm -A -t $VIP:110 -s rr
/sbin/ipvsadm -a -t $VIP:110 -r $RIP1:110 -g
/sbin/ipvsadm -a -t $VIP:110 -r $RIP2:110 -g
/sbin/ipvsadm -a -t $VIP:110 -r $RIP3:110 -g
#Run LVS
/sbin/ipvsadm
#end
内容是192.168.0.38 是虚拟地址 192.168.0.34,35,36 为真正服务器。做80,25,110 端口的负载。
34,35,36 分别了/home/test.sh 教本
#!/bin/bash
VIP=192.168.0.38
/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/all/arp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_filter
sysctl -p
#end
这个脚本的作用是过滤arp 包的,或者编辑/etc/sysctl.conf修改系统变量
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.ip_forward = 1
sysctl ?p #配置生效

http://www.vergenet.net/linux/ldirectord/
下载lddirectord 这个软件是个监控软件。

07年前,可以使用以下方式下载,目前已经失效
{cvs -d:pserver:guest@cvs.linux-ha.org:/home/cvs/linux-ha login
cvs -z3 -d:pserver:guest@cvs.linux-ha.org:/home/cvs/linux-ha co linux-ha/}

当前(20090906)可用链接
http://hg.linux-ha.org/lha-2.1/archive/STABLE-2.1.4.tar.bz2


然后写了一个配置文件
ldirectord.cf
checktimeout=3
checkinterval=1
#fck=127.0.0.1:80allback=127.0.0.1:80
autoreload=yes
#logfile="/var/log/ldirectord.log"
#logfile="local0"
quiescent=yes
# A sample virual with a fallback that will override the gobal setting
virtual=192.168.0.38:80
real=192.168.0.34:80 gate
real=192.168.0.35:80 gate
real=192.168.0.36:80 gate
fallback=127.0.0.1:80
service=http
request="test.html"
receive="Test Page"
virtualhost=www.shiming.gov.cn
scheduler=rr
persistent=600
netmask=255.255.255.255
protocol=tcp
virtual=192.168.0.38:25
real=192.168.0.34:25 gate
real=192.168.0.35:25 gate
real=192.168.0.36:25 gate
fallback=127.0.0.1:25
service=smtp
scheduler=rr
persistent=600
protocol=tcp
virtual=192.168.0.38:110
real=192.168.0.34:110 gate
real=192.168.0.35:110 gate
real=192.168.0.36:110 gate
fallback=127.0.0.1:110
service=pop
scheduler=rr
login="testemail"
passwd="emailtest"
persistent=600
protocol=tcp

这就是监控得东西。
ldirectord /etc/ldirectord.cf start
ldirectord /etc/ldirectord.cf stop
tail -f /var/log/ldirectord.log 这个是log

查看lvs服务是否正常
watch ipvsadm -l -n

Every 2.0s: ipvsadm -l -n Sun Sep 6 19:39:51 2009

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.105:80 rr
-> 192.168.0.104:80 Route 1 0 0
-> 192.168.0.103:80 Route 1 0 0
TCP 192.168.0.105:3306 rr
-> 192.168.0.104:3306 Route 1 0 0
-> 192.168.0.103:3306 Route 1 0 0

参考:
http://bbs.chinaunix.net/viewthread.php?tid=1148139
http://www.linuxvirtualserver.org/