利centos 4.6+heartbeat+ldirectord+ipvsadm构建lvs-dr负载均衡服务器

利centos 4.6+heartbeat+ldirectord+ipvsadm构建lvs-dr负载均衡服务器

Centos 4.6中利用heartbeat+ldirectord+ipvsadm设置lvs-dr高可用负载均衡服务器
一。我实验室中服务ip地址规划如下:
lvs director(及lvs服务器): IP-192.168.5.238  vip-192.168.5.236
网关:192.168.5.1
两台lvs real server ip分别为:192.168.5.45,192.168.5.216
网关:192.168.5.1
二。所需软件列表如下:
heartbeat-2.1.3-1.fc7.i386.rpm        (requires pils and stonith RPMs)
heartbeat-debuginfo-2.1.3-1.fc7.i386.rpm        
heartbeat-devel-2.1.3-1.fc7.i386.rpm        
heartbeat-gui-2.1.3-1.fc7.i386.rpm        
heartbeat-ldirectord-2.1.3-1.fc7.i386.rpm        (needed for integration with LVS)
pils-2.1.3-1.fc7.i386.rpm        
stonith-2.1.3-1.fc7.i386.rpm
软件官方下载地址:http://linux-ha.org/download/index.html#2.1.3
三。检查内核是否支持ipvs功能
modprobe -l|grep ipvs,下面是我本机输出的列表,你的有可能与不同,但只要有下列类似ip_vs输出,证明你的内核巳支持ipvs,否则你还必须下载内核原代码重新译内核。
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_sed.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_dh.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_nq.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_lc.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.9-67.0.22.EL/kernel/net/ipv4/ipvs/ip_vs.ko
四。安装第二步下载的heartbeat软件及配置heartbeat与ldirectord
a)录找配置实例文件
rpm -qd heartbeat|grep ha.cf
rpm -qd heartbeat|grep haresources
rpm -qd heartbeat-ldirectord|grep ldirectord.cf
如我本机中ha.cf 与 haresources安装好后在/usr/share/doc/heartbeat-2.1.3/目录下,而ldirector.cf配置文件是在 /usr/share/doc/heartbeat-ldirectord-2.1.3/下。找到后将ha.cf与haresources挎至 /etc/ha.d与/etc/ha.d/conf目录下,而ldirectord.cf挎至/etc/ha.d/conf目录下。
b)修改配置文件.
1.以下是我/etc/ha.d/ha.cf中我注释掉的内容:
debugfile /var/log/ha-debug---heartbeat debbug日志文件路径
logfile    /var/log/ha-log----heartbeat 日志文件路径
keepalive 2 心跳检测时间间隔
deadtime 30 多久没有检测到心跳时宣布死亡
warntime 10
initdead 120 heartbeat第一次启动时启动其所控资源的时间
udpport    694 heartbeat监听端口
bcast    eth0        # Linux心跳路径,最好不要与正常生产网络中的设备混在一起
watchdog /dev/watchdog 启动内核看门狗功能
node    zhanghy    主节点主机名称(必须同uname -n返回的主机名相同)
node    host188        备份主机名称(同上)
ping    192.168.5.1   ping我内部网关地址,主要是利用ipfail功能检测主服务器网络是否正常
ping     192.168.5.2  同上
respawn hacluster /usr/lib/heartbeat/ipfail heartbeat的一插件
apiauth ipfail gid=haclient uid=hacluster
2.下面是我在haresources中修改的项
zhanghy 192.168.5.236/24/eth0/192.168.5.255 ldirectord::ldirectord.cf LVSSyncDaemonSwap::master
haresources中语法格式如下:
lvs director主机服务器名称 vip地址/掩码/监听网卡/广播地址 资源脚本(注:资料脚本必须位于/etc/init.d/或/etc/ha.d/resource.d下,且不能随机一启动)
3.ldirectord.cf的配置文件如下
# Global Directives
checktimeout=3 超时时间
checkinterval=1 检测真实服务器的间隔
#fallback=127.0.0.1:80
autoreload=yes 表示修改ldirectord.cf配置文件ldirectord自动加载
logfile="/var/log/ldirectord.log"
#logfile="local0"
#emailalert="zhanghuiyun0978@gmail.com"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=yes 如果真实服务器失败,ldirectord所采取的动作,注意如果主里设为yes,则必须在内核中修改下列文件:
echo "1" >/proc/sys/net/ipv4/vs/expire_quiescent_template
# Sample for an http virtual service
virtual=192.168.5.236:80 增加一台ip地址为192.168.5.236虚拟服务器
    real=192.168.5.45:80 gate  对虚拟服务器80端口的访问重定向ip地址为192.168.5.45的真实服务器的80端上
    real=192.168.5.216:80 gate  意义同上
#    real=192.168.5.238:80 gate
     fallback=127.0.0.1:80 gate 如果两台真实服务器都无效,则定向本机的lo地址
    service=http 指定服务类型
    request="testpage" ldirectord检查真实服务器时用到的页面
    receive="test page" ldirectord所请求页面内的内容
#    virtualhost=some.domain.com.au
    scheduler=rr lvs-dr调度方法,rr表示循环调用
    persistent=600 tcp连接时间
    netmask=255.255.255.255 掩码
    protocol=tcp 协议类型
      checktype=negotiate ldirectord检测真实服务器的方式
#      checkport=80
     request="testpage" 同上可不用
     receive="test page"同上可不用
#     virtualhost=www.x.y.z
ldirectord工作原理:
ldirectord 需要你在真实服务器内启用apache服务器,并在每台真实服务器web服务器的根目录下建立你在配置文件所指定的文件与内容,然后ldirectord 通过循环检查此文件来确定真实服务器是否存活,如果不存活,则自动将其权重设为0,以确保后面客户的连接不会再导向失效的真实服务器,如果真实服务修复上线后,则其又将它的权重设为以使它能够继续为客端连接提供服务。
ldirectord主要是通过调用ipvsadm来创建ipvs虚拟服务器表

五。在真实服务器上打开arp广播忽略及在真实服务器上回环设备上增加vip地址,直接将下面脚本放在你的真实服务器上运行并确定能随机启动。
#!/bin/bash
#ignore arp script
VIP1=192.168.5.236
#*************************************************************
case $1 in
start)
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
#Add ip alias for lo
/sbin/ifconfig lo:0 $VIP1 netmask 255.255.255.255 up
/sbin/route add -host $VIP1 dev lo:0
;;
stop)
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
/sbin/ifconfig lo:0 $VIP1 netmask 255.255.255.255 down
/sbin/route del -host $VIP1
;;
status)
iothere=`/sbin/ifconfig lo:0|grep $VIP1`
iorthere=`/bin/netstat -rn|grep $VIP1`
if [ ! "$iothere" -o ! "$iorthere" ];then
    echo "LVS Real Server is STOP"
    else
    echo "LVS Real Server is ALIVE"
fi
;;
*)
echo "Usage:   $0 start|stop|status"
;;
esac
六。在lvs director服务器输入watch ipvsadm -L -n检查你的ipvs表,并在其它电脑上输入http://192.168.5.236检查lvs服务器是否会自动循环真实服务器ip地址。
后面我将陆续增加一些关于集群服务性能监控方面的文章,也希望朋友能提供集群方面的相关知识,共同时进步。      
watch ipvsadm -L -n检查你的ipvs表,用检查lvs服务器是否会自动循环真实服务器ip地址,