LVS+Heartbeat 实施案例及经验分享

 IT运维专家网                                                        http://www.linuxtone.org
LVS+Heartbeat 实施案例及经验分享
作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性能调优)
欢迎转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明.
一. 基本介绍
„  背景描述
某大型商业网站由于业务量的发展非常迅速,目前的网站架构根本无法缓解用户访问
压力及单点故障。急需一套高可用的负载均衡集群解决方
案,http://www.linuxTone.org(IT 运维专家网)根据这家商业网站在的状况,部署了一套负
载均衡及高可用的集群方案及相关优化,项目实施以后该商业网站得 WEB 压力得到
了很好的解决,访问速度大幅度提升.以下是相关配置文档,拿出来与朋友们分享希望
对更多想了解 LVS/HA的朋友有帮助。
„  本文特色
      1.介绍 LVS+Heartbeat 两种案装方法
     2.   采用 heartbeat 2.x style 的配置(使用 cib.xml)
     3.   测试日志分析及相关技巧
     4.   两个在真实案例中的经验分享 
 
二.网络拓朴图及相关描述
 
1.主机名: (/etc/hosts)
192.168.1.102 primarylb.linuxtone.org
192.168.1.103 backuplb.linuxtone.org
2.VIP[eth0:0] 192.168.1.106  
  Realserver1 192.168.1.104
  Realserver2 192.168.1.105
3.Heartbeat心跳线
a)使用一根串口直连线缆(serial null modem cable)Heartbeat
  b) eth1:10.0.0.1 10.0.0.2    (交叉线直连 Heartbeat)
 
三.安装 Heartbeat[yum安装,编译安装]
1.通过 Yum安装 Heartbeat
#yum install heartbeat-*              //安装 HA
#yum install heartbeat-ldirectord       //安装 ldirectord 实现 LVS的高可用性
作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性能调优)     MSN: [email protected] IT运维专家网                                                        http://www.linuxtone.org
# rpm -qa|grep heartbeat        //查看安装相关的包
heartbeat-stonith-2.1.3-3.el5.centos
heartbeat-devel-2.1.3-3.el5.centos
heartbeat-pils-2.1.3-3.el5.centos
heartbeat-2.1.3-3.el5.centos
heartbeat-ldirectord-2.1.3-3.el5.centos
heartbeat-gui-2.1.3-3.el5.centos
 
#rpm -q heartbeat –d       //查看 Heartbeat 相关doc 目录
将相关配置文件拷贝到/etc/ha.d 目录下
# cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
# cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
# cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d
 
 
2.  编译安装Heartbeat
下载相关软件包:
http://linux-ha.org/DownloadSoftware
http://www.packetfactory.net/libnet/dist/libnet.tar.gz
编译安装
#tar -xvzf libnet.tar.gz
#cd libnet
#./configure
#make;make install
 
#groupadd -g 694 haclient
#useradd -u 694 -g haclient hacluster
 
# tar -xvzf heartbeat-2.1.3.tar.gz
# cd heartbeat-2.1.3
# ./ConfigureMe configure  
# make;make install  
 
#cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
#cp ldirectord/ldirectord.cf /etc/ha.d/
 
【注意】
heartbeat 软件包在 RHEL 或者 CentOS安装盘中都能找到。所需软件包: heartbeat、 libnet、
net-snmp、net-snmp-libs、perl-Compress-Zlib、perl- HTML-Parser、perl-HTML-Tagset、
perl-libwww-perl、perl-Mailinuxtoneools、perl- TimeDate、perl-URI、ipvsadm.以上软件包,
有的在 rhel5光盘中,有的要在网上搜索的。
 
 
四.  配置 Heartbeat实现服务高可用性.
作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性能调优)     MSN: [email protected] IT运维专家网                                                        http://www.linuxtone.org
1.分别配置两台 HA的主机名.
#vi /etc/hosts
192.168.1.102 primarylb.linuxtone.org
192.168.1.103 backuplb.linuxtone.org
 
2. /etc/ha.d/ha.cf  配置介绍
#cd /etc/ha.d
#cat ha.cf|grep -v ^#
logfile /var/log/ha-log
logfacility     local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
baud    19200
serial  /dev/ttyS0      # Linux
#ucast eth2 10.0.0.3
ucast eth0 192.168.1.103
auto_failback on
watchdog /dev/watchdog
crm on
node primarylb.linuxtone.org
node backuplb.linuxtone.org
ping 192.168.1.103
ping_group lbgroup 10.0.0.1 10.0.0.2
ping_group lbgroup 192.168.1.102 192.168.1.103
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
 
3. /etc/ha.d/authkeys
#vi authkeys
auth 1
1 sha1 Hey!
#chmod 600 authkeys
 
4./etc/ha.d/haresources
# cat haresources |grep -v "#"
primarylb.linuxtone.org lvs ldirectord
 
5.  建立软连接让 HA自动接管 lvs-dr.sh,ldirectord等资源.
#ln -s /etc/init.d/lvs /etc/ha.d/resource.d/       //etc/init.d/lvs 存放LVS启动相关脚本世纪
#ln -s /usr/sbin/ldirectord /etc/ha.d/resource.d
 
作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性能调优)     MSN: [email protected] IT运维专家网                                                        http://www.linuxtone.org
6.采用 Heartbeat 2.x style,利用 crm 来管理资源.
#/usr/lib/heartbeat/haresources2cib.py  -stout -c /etc/ha.d/ha.cf /etc/ha.d/haresources
将生成的 cib.xml 文件在/var/lib/heartbeat/crm  目录
【注意】
关于 crm(Cluster Resource Manager):crm资源配置方法是在新的版本中引入的,如果
想使用该格式来配置资源(ip,服务,共享磁盘等) ,可以参看配置示例:
http://www.linux-ha.org/v2/Examples/Simple 。 /var/lib/heartbeat/crm/cib.xml 文件的作用与
/etc/ha.d/haresources相同,是二者择一的关系。
# cat /dev/null > haresources          //把 haresources 清空,采用 crm来管理资源
 
7. /etc/ha.d/ldirectord.cf 配置
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
#logfile="local0"
emailalert=" [email protected]"
emailalertfreq=3600
emailalertstatus=all
quiescent=no
 
# Sample for an http virtual service
virtual=192.168.1.106:80
 real=192.168.1.104:80 gate
 real=192.168.1.105:80 gate
   #fallback=127.0.0.1:80 gate
 #service=http
 #request="index.html"
 #receive="Test Page"
 #virtualhost=some.domain.com.au
 scheduler=wrr
 persistent=5
 #netmask=255.255.255.255
 protocol=tcp
    checktype=connect
    checkport=80
   #request="index.html"
   #receive="Test Page"
   #virtualhost=www.x.y.z
【注意】
Ldirectord 的作用是监测 Real Server,当 Real Server失效时,把它从 Load Balancer列表
中删除,恢复时重新添加,在安装 heartbeat 时已经安装了 Ldirectord.配置中 quiescent=no
作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性能调优)     MSN: [email protected] IT运维专家网                                                        http://www.linuxtone.org
设置
实现如果 Realserver机器down 掉以后,立即从 IPVS 列表中删除,恢复时重新添加.
 
8.启动 Heartbeat 服务
# /etc/init.d/heartbeat start
 
五.测试 Heartbeat 及日志分析
1.  测试串口线配置是否正常
串行连接通过两个节点的串口,使用一根直连线缆将它们连接起来。现在测试串行连接,
如下所示:在 primarylb(接收者)上输入以下内容:
cat < /dev/ttyS0  
在 backuplb(发送者)上输入以下内容:
echo "Serial Connection test! Welcome http://www.linuxtone.org !" > /dev/ttyS0
 
2.  如果主节点需要维护时,可先将其转移到备份服务器上
/usr/lib/heartbeat/hb_standby (hb_standby命令把资源强迫到迁移到备份服务器)
如果主节点要切回来掌管服务:
/usr/lib/heartbeat/hb_takeover
 
3.  拔掉网线,测试在 primary节点的网络断开后的切换情况
4.  停掉 primary的 heartbeat(/etc/init.d/heartbeat stop) 查看 backup是否能正常接管资源
5. shutdown primary主机,测试是否能够正常切换,基本上和上面测试 2 差不多。
【注意】
  # tail -f /var/log/messages    //在两台负载均衡服务器上注意查看日志变化来排错。
 
六.  相关注意事项及参考
    
1.项目实施过程遇到的问题及总结.【经验分享】
【以下是项目中遇到的两个问题,提出方便对你有帮助】
 a)  假如两台 VS 之间使用的互备关系,那么当一台 VS 接管 LVS 服务时,可能会网络
不通,这时因为路由器的 MAC 缓存表里无法及时刷新 MAC.关于 vip 这个地址的 MAC
地址还是替换的 VS 的 MAC,有两种解决方法,一种是修改新 VS 的 MAC 地址,另一
种是使用 send_arp /arpiing 命令.   以arping 命令为例.
      /sbin/arping -I eth0 -c 3 -s ${vip} ${gateway_ip} > /dev/null 2>&1
例如:
      /sbin/arping -I eth0 -c 3 -s 192.168.1.6 192.168.1.1
 
 b)某台Realserver服务down掉以后如何从IPVS列表自动中删除恢复时如何自动添加?
配置 ldirectord.conf
  quiescent=no  或  echo 1 > /proc/sys/net/ipv4/vs/expire_nodest_conn
 
2.ha.cf相关注释
auto_failback设置为 on 时,一旦主节点重新恢复联机,将从从节点取回所有资源。
Stonith 设备是一种能够自动关闭电源来响应软件命令的设备
作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性能调优)     MSN: [email protected] IT运维专家网                                                        http://www.linuxtone.org
Watchdog 在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重
新启动系统。
 
3.lvs  状态查看
操作步骤详细到命令行级别
查看 LVS的连接情况: ipvsadm -L -n
查看 LVS的吞吐量情况: ipvsadm -L -n -rate
查看 LVS的统计信息: ipvsadm -L -n –stat
实时查看 LVS连接状态变化: watch ipvsadm –ln
 
 4.  附上 LVS(DR)脚本
#!/bin/bash
# description: start LVS of DirectorServer
#Written by :NetSeek http://www.linuxtone.org
GW=192.168.1.1
 
# website director vip.
WEB_VIP=192.168.1.106  
WEB_RIP1=192.168.1.104
WEB_RIP2=192.168.1.105
 
 
. /etc/rc.d/init.d/functions
 
logger $0 called with $1
 
case "$1" in
 
start)
        # Clear all iptables rules.
         /sbin/iptables -F
        # Reset iptables counters.
         /sbin/iptables -Z
         # Clear all ipvsadm rules/services.
         /sbin/ipvsadm -C
 
 #set lvs vip for dr
        /sbin/ipvsadm --set 30 5 60
        /sbin/ifconfig eth0:0 $WEB_VIP broadcast $WEB_VIP netmask 255.255.255.255
up
        /sbin/route add -host $WEB_VIP dev eth0:0
                /sbin/ipvsadm -A -t $WEB_VIP:80 -s wrr -p 3
                /sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP1:80 -g -w 1
                /sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP2:80 -g -w 1
作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性能调优)     MSN: [email protected] IT运维专家网                                                        http://www.linuxtone.org
        touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
        
        # set Arp
                /sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW >/dev/null 2>&1  
       ;;
stop)
        /sbin/ipvsadm -C
        /sbin/ipvsadm -Z
        ifconfig eth0:0 down
        route del $WEB_VIP  >/dev/null 2>&1
        rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
                /sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW
        echo "ipvsadm stoped"
       ;;
 
status)
 
        if [ ! -e /var/lock/subsys/ipvsadm ];then
                echo "ipvsadm is stoped"
                exit 1
        else
                ipvsadm -ln
                echo "..........ipvsadm is OK."
        fi
      ;;
 
*)
        echo "Usage: $0 {start|stop|status}"
        exit 1
esac
 
exit 0
 
5.  关于ldirectord.cf文件详解: http://www.linuxtone.org/thread-1388-1-1.html 
   LVS高可用性方案汇总: http://www.linuxtone.org/thread-1402-1-1.html [推荐]
   LVS负载均衡资料汇总: http://www.linuxtone.org/thread-1191-1-1.html [推荐]
    更多的资料请参考: http://www.linuxtone.org/forum-26-1.html 
 
6.  联系我们[如果你遇到问题欢迎联系我们]:
   IT运维专家网  http://www.linuxtone.org Mail: [email protected]
 
作者:NetSeek http://www.linuxtone.org(IT运维专家网|集群架构|性能调优)     MSN: [email protected]

你可能感兴趣的:(LVS+Heartbeat 实施案例及经验分享)