ipvsadm不能检测出real_server的好坏
ipvsadm虽然已经满足了load balancing但他不能自动检测出real_server的好坏,如果一台real坏掉了,ipvsadm仍然会给他分配连接,为了解决这个问题,我们使用heartbead自带ldirectord来解决这个问题,ldirectord是用perl开发的需要安装一些perl模块。
ldirectord的配置文件是ldirectord.cf,默认放在/etc下,我们只要配置好这个文件启动就可以了,而lvs只需要安装,不需要任何配置。
ldirectord 配置文件如下:
用于mysql的ldirectord.cf(port nat)
# Global Directives
checktimeout=2
checkinterval=1
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes
#Sample configuration for a MySQL virtual service.
virtual = 192.168.10.100:3306
real=192.168.200.90->192.168.200.99:3306?masq
real=172.16.200.90:3306?masq 2
fallback=127.0.0.1:3306
service=mysql
scheduler=wlc
netmask=255.255.255.0
protocol=tcp
checktype=negotiate
login="db_username"
passwd="db_password"
database="db"
request="select ... ...;"
?
用于apache的ldirectord.cf(mark dr)
# Global Directives
checktimeout=2
checkinterval=1
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes
#Sample configuration for a MySQL virtual service.
virtual=80
real=192.168.200.150->192.168.200.199:80 gate
service=http
scheduler=wlc
protocol=fwm
checktype=negotiate
checkport=80
virtualhost=web.xinyv.com
request="welcome.shtml"
receive="WELCOME"
iptables -t mangle -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j MARK --set-mark 0x50
我习惯用端口号做mark标记,这样好记。
做完这些以后再服务器上绑定要做load balancing的虚拟ip
启动ldirectord服务应该就可以看到负载被分到下面的real机器上了。