网络通信 频道

大型网站集群构建之:负载均衡篇

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机器上了。

0
相关文章