设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 39248|回复: 80

[Heartbeat] LVS+Heartbeat实施案例及经验分享   [复制链接]

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

签到
68
注册时间
2008-5-19
最后登录
2012-2-3
在线时间
1757 小时
阅读权限
200
积分
12741
帖子
2521
主题
1198
精华
24
UID
1

LT总司令

发表于 2008-12-29 11:04:13 |显示全部楼层

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)
  1. 192.168.1.102primarylb.linuxtone.org
  2. 192.168.1.103backuplb.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 cableHeartbeat
b)eth1:10.0.0.110.0.0.2 (交叉线直连Heartbeat)

三.安装Heartbeat[yum安装,编译安装]
1.通过Yum安装Heartbeat
  1. #yuminstall heartbeat-*
  2. //安装HA
  3. #yuminstall heartbeat-ldirectord
  4. //安装ldirectord实现LVS的高可用性
  5. # rpm-qa|grep heartbeat
复制代码
//查看安装相关的包
  1. heartbeat-stonith-2.1.3-3.el5.centos
  2. heartbeat-devel-2.1.3-3.el5.centos
  3. heartbeat-pils-2.1.3-3.el5.centos
  4. heartbeat-2.1.3-3.el5.centos
  5. heartbeat-ldirectord-2.1.3-3.el5.centos
  6. heartbeat-gui-2.1.3-3.el5.centos
复制代码
#rpm -q heartbeat ?d
//查看Heartbeat相关doc目录
将相关配置文件拷贝到/etc/ha.d目录下
  1. # cp /usr/share/doc/heartbeat-2.1.3/ha.cf/etc/ha.d/
  2. # cp /usr/share/doc/heartbeat-2.1.3/authkeys/etc/ha.d/
  3. # 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
编译安装
  1. #tar-xvzf libnet.tar.gz
  2. #cdlibnet
  3. #./configure
  4. #make;makeinstall

  5. #groupadd-g 694 haclient
  6. #useradd-u 694 -g haclient hacluster

  7. # tar-xvzf heartbeat-2.1.3.tar.gz
  8. # cdheartbeat-2.1.3
  9. #./ConfigureMe configure
  10. #make;make install

  11. #cpdoc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
  12. #cpldirectord/ldirectord.cf /etc/ha.d/
复制代码
【注意】
heartbeat软件包在RHEL或者CentOS安装盘中都能找到。所需软件包:heartbeatlibnetnet-snmpnet-snmp-libsperl-Compress-Zlibperl- HTML-Parserperl-HTML-Tagsetperl-libwww-perlperl-Mailinuxtoneoolsperl- TimeDateperl-URIipvsadm.以上软件包,有的在rhel5光盘中,有的要在网上搜索的。


. 配置Heartbeat实现服务高可用性.
1.分别配置两台HA的主机名.
#vi /etc/hosts
  1. 192.168.1.102primarylb.linuxtone.org
  2. 192.168.1.103backuplb.linuxtone.org
复制代码
2.
/etc/ha.d/ha.cf 配置介绍
#cd /etc/ha.d
#cat ha.cf|grep -v ^#
  1. logfile/var/log/ha-log
  2. logfacility
  3. local0
  4. keepalive2
  5. deadtime30
  6. warntime10
  7. initdead120
  8. udpport694
  9. baud
  10. 19200
  11. serial
  12. /dev/ttyS0
  13. # Linux
  14. #ucasteth2 10.0.0.3
  15. ucasteth0 192.168.1.103
  16. auto_failbackon
  17. watchdog/dev/watchdog
  18. crm on
  19. nodeprimarylb.linuxtone.org
  20. nodebackuplb.linuxtone.org
  21. ping192.168.1.103
  22. ping_grouplbgroup 10.0.0.1 10.0.0.2
  23. ping_grouplbgroup 192.168.1.102 192.168.1.103
  24. respawnhacluster /usr/lib/heartbeat/ipfail
  25. apiauthipfail gid=haclient uid=hacluster
复制代码
3./etc/ha.d/authkeys
#vi authkeys
  1. auth 1
  2. 1 sha1Hey!
复制代码
#chmod 600 authkeys

4./etc/ha.d/haresources
# cat haresources |grep -v"#"
  1. primarylb.linuxtone.org lvsldirectord
复制代码

5.建立软连接让HA自动接管lvs-dr.sh,ldirectord等资源.
  1. #ln -s /etc/init.d/lvs  /etc/ha.d/resource.d/  //etc/init.d/lvs 存放LVS启动相关脚本
  2. #ln -s /usr/sbin/ldirectord  /etc/ha.d/resource.d
复制代码


6.采用Heartbeat2.x style,利用crm 来管理资源.
  1. #/usr/lib/heartbeat/haresources2cib.py  -stout -c /etc/ha.d/ha.cf/etc/ha.d/haresources
复制代码
将生成的cib.xml文件在/var/lib/heartbeat/crm目录
【注意】
关于crmClusterResource 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 配置
  1. # GlobalDirectives
  2. checktimeout=3
  3. checkinterval=1
  4. fallback=127.0.0.1:80
  5. autoreload=yes
  6. logfile="/var/log/ldirectord.log"
  7. #logfile="local0"
  8. emailalert="cnseek@gmail.com"
  9. emailalertfreq=3600
  10. emailalertstatus=all
  11. quiescent=no

  12. # Samplefor an http virtual service
  13. virtual=192.168.1.106:80

  14. real=192.168.1.104:80 gate

  15. real=192.168.1.105:80 gate


  16. #fallback=127.0.0.1:80gate

  17. #service=http

  18. #request="index.html"

  19. #receive="Test Page"

  20. #virtualhost=some.domain.com.au

  21. scheduler=wrr

  22. persistent=5

  23. #netmask=255.255.255.255

  24. protocol=tcp


  25. checktype=connect


  26. checkport=80


  27. #request="index.html"


  28. #receive="TestPage"


  29. #virtualhost=www.x.y.z
复制代码
【注意】
Ldirectord的作用是监测Real Server,当RealServer失效时,把它从Load Balancer列表中删除,恢复时重新添加,在安装heartbeat时已经安装了Ldirectord.配置中quiescent=no设置
实现如果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. 停掉primaryheartbeat(/etc/init.d/heartbeat stop) 查看backup是否能正常接管资源
5. shutdown primary主机,测试是否能够正常切换,基本上和上面测试2差不多。
【注意】

# tail -f /var/log/messages
//在两台负载均衡服务器上注意查看日志变化来排错。

. 相关注意事项及参考


1.项目实施过程遇到的问题及总结.经验分享
以下是项目中遇到的两个问题,提出方便对你有帮助

a)
假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里无法及时刷新MAC.关于vip这个地址的MAC地址还是替换的VSMAC,有两种解决方法,一种是修改新VSMAC地址,另一种是使用send_arp /arpiing命令.
arping命令为例.
  1. /sbin/arping -I eth0 -c 3 -s ${vip}${gateway_ip} > /dev/null 2>&1
  2. 例如:
复制代码
  1. /sbin/arping -I eth0 -c 3 -s 192.168.1.6192.168.1.1
复制代码
b)某台Realserver服务down掉以后如何从IPVS列表自动中删除恢复时如何自动添加?配置ldirectord.conf
quiescent=no echo 1 >/proc/sys/net/ipv4/vs/expire_nodest_conn

2ha.cf相关注释
auto_failback设置为on时,一旦主节点重新恢复联机,将从从节点取回所有资源。
Stonith设备是一种能够自动关闭电源来响应软件命令的设备
Watchdog在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重新启动系统。

3lvs状态查看
操作步骤详细到命令行级别
查看LVS的连接情况:ipvsadm -L -n
查看LVS的吞吐量情况: ipvsadm -L -n --rate
查看LVS的统计信息:ipvsadm -L -n --stats
实时查看LVS连接状态变化: watch ipvsadm ?ln


4. 附上LVSDR)脚本
  1. #!/bin/bash
  2. #description: start LVS of DirectorServer
  3. #Writtenby :NetSeek http://www.linuxtone.org
  4. GW=192.168.1.1


  5. # websitedirector vip.
  6. WEB_VIP=192.168.1.106

  7. WEB_RIP1=192.168.1.104
  8. WEB_RIP2=192.168.1.105



  9. ./etc/rc.d/init.d/functions


  10. logger $0called with $1


  11. case"$1" in


  12. start)

  13. # Clear all iptables rules.


  14. /sbin/iptables-F

  15. # Reset iptables counters.



  16. /sbin/iptables -Z


  17. #Clear all ipvsadm rules/services.


  18. /sbin/ipvsadm-C



  19. #set lvs vip for dr

  20. /sbin/ipvsadm --set 30 5 60

  21. /sbin/ifconfig eth0:0 $WEB_VIP broadcast $WEB_VIP netmask 255.255.255.255 up


  22. /sbin/route add -host $WEB_VIP dev eth0:0

  23. /sbin/ipvsadm -A -t $WEB_VIP:80 -s wrr-p 3

  24. /sbin/ipvsadm -a -t $WEB_VIP:80 -r$WEB_RIP1:80 -g -w 1

  25. /sbin/ipvsadm -a -t $WEB_VIP:80 -r$WEB_RIP2:80 -g -w 1

  26. touch /var/lock/subsys/ipvsadm>/dev/null 2>&1



  27. # set Arp

  28. /sbin/arping -I eth0 -c 5 -s $WEB_VIP$GW >/dev/null 2>&1

  29. ;;
  30. stop)

  31. /sbin/ipvsadm -C

  32. /sbin/ipvsadm -Z

  33. ifconfig eth0:0 down

  34. route del $WEB_VIP
  35. >/dev/null 2>&1

  36. rm -rf /var/lock/subsys/ipvsadm>/dev/null 2>&1

  37. /sbin/arping -I eth0 -c 5 -s $WEB_VIP$GW

  38. echo "ipvsadm stoped"

  39. ;;


  40. status)



  41. if [ ! -e /var/lock/subsys/ipvsadm];then

  42. echo "ipvsadm isstoped"


  43. exit 1

  44. else

  45. ipvsadm -ln

  46. echo "..........ipvsadm isOK."

  47. fi

  48. ;;


  49. *)

  50. echo "Usage: $0{start|stop|status}"

  51. exit 1
  52. esac


  53. exit 0
复制代码
5. 关于ldirectord.cf文件详解:http://bbs.linuxtone.org/thread-1388-1-1.html

LVS高可用性方案汇总: http://bbs.linuxtone.org/thread-1402-1-1.html[推荐]

LVS负载均衡资料汇总: http://bbs.linuxtone.org/thread-1191-1-1.html[推荐]

更多的资料请参考: http://bbs.linuxtone.org/forum-26-1.html

6. 联系我们[如果你遇到问题欢迎联系我们]

IT运维专家网 http://www.linuxtone.orgMail: cnseek@gmail.com


本文PDF下载:
本文相关脚本下载:  
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
感谢大家对linuxtone的支持!

LT管理团队

向Linuxsir的哈密瓜大哥看齐 ...

Rank: 9Rank: 9Rank: 9

注册时间
2008-6-5
最后登录
2012-2-3
在线时间
1557 小时
阅读权限
200
积分
26737
帖子
701
主题
203
精华
4
UID
46

LT同学

发表于 2008-12-29 11:16:04 |显示全部楼层
顶^.^^.^
哈密瓜!一个热爱linux的水果!
gtalk/msn:hamgua@gmail.com
sina微博:http://t.sina.com.cn/hamgua
LTmail:hamgua@linuxtone.org
是雄鹰就有展翅飞翔的时候,不是雄鹰要制造展翅飞翔的时候!

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2008-8-26
最后登录
2011-9-23
在线时间
207 小时
阅读权限
200
积分
583
帖子
166
主题
31
精华
2
UID
227

LT粉丝

发表于 2008-12-29 11:23:21 |显示全部楼层
本帖最后由 tomlinux 于 2008-12-29 11:29 编辑

顶呱呱^.^ ^.^~~~
问下。heartbeat和keepalive在两都区别在哪?优缺点在哪?

使用道具 举报

LT管理团队

守住每一天

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-30
最后登录
2012-2-3
在线时间
619 小时
阅读权限
200
积分
9973
帖子
1252
主题
174
精华
11
UID
31
发表于 2008-12-29 11:37:44 |显示全部楼层
好文章先顶下。学习了。
<-sina_sign,1054764633,7->

使用道具 举报

Rank: 4

注册时间
2008-12-11
最后登录
2011-12-19
在线时间
29 小时
阅读权限
50
积分
707
帖子
58
主题
1
精华
0
UID
696
发表于 2008-12-29 12:11:23 |显示全部楼层
留下我的脚印吧

使用道具 举报

Rank: 1

注册时间
2008-12-30
最后登录
2011-10-18
在线时间
8 小时
阅读权限
10
积分
11
帖子
22
主题
5
精华
0
UID
809
发表于 2008-12-30 23:35:16 |显示全部楼层
very good !

使用道具 举报

Rank: 1

注册时间
2009-1-6
最后登录
2010-4-28
在线时间
4 小时
阅读权限
10
积分
2
帖子
4
主题
1
精华
0
UID
836
发表于 2009-1-6 10:01:35 |显示全部楼层
顶一下,现在的heartbeat比1X的时候安装上方便多啦

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-1-18
最后登录
2011-4-29
在线时间
306 小时
阅读权限
70
积分
1399
帖子
505
主题
42
精华
4
UID
1049

LT同学

发表于 2009-1-21 22:46:50 |显示全部楼层
192.168.1.102primarylb.linuxtone.org
192.168.1.103backuplb.linuxtone.org
我比较郁闷,为什么是给公网IP写hosts文件而不是给那两个直连的IP写hosts文件哪?

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-1-18
最后登录
2011-4-29
在线时间
306 小时
阅读权限
70
积分
1399
帖子
505
主题
42
精华
4
UID
1049

LT同学

发表于 2009-1-21 23:47:43 |显示全部楼层
/etc/ha.d/ha.cf 配置介绍
#cd /etc/ha.d
站长帮忙重新编辑一下那一段吧,好多该有空格的位置都没有。
而且从“#ucasteth2 10.0.0.3
ucasteth0 192.168.1.103
”开始,我在ha.cf里根本找不到“ucaste”或任何相关注释啊。

使用道具 举报

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-19
最后登录
2012-2-3
在线时间
1757 小时
阅读权限
200
积分
12741
帖子
2521
主题
1198
精华
24
UID
1

LT总司令

发表于 2009-1-22 09:12:01 |显示全部楼层
9# 可爱的卧底


请注意!已经提供了脚本,请参照脚配配置,或者默认的配置文件做修改!
感谢大家对linuxtone的支持!

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-1-18
最后登录
2011-4-29
在线时间
306 小时
阅读权限
70
积分
1399
帖子
505
主题
42
精华
4
UID
1049

LT同学

发表于 2009-1-22 11:41:51 |显示全部楼层
本帖最后由 可爱的卧底 于 2009-1-22 11:44 编辑

不好意思,我还看不太懂脚本。想请教您关于ha.cf文件的问题。
在您的另一个《用heartbeat配置linux高可用性集群》里面,有很多关于ha.cf的参数介绍,我看了这些参数介绍对您的配置文件有些不理解的地方。
1。 ttyS0
“serial /dev/ttyS0
    使用串口heartbeat-如果不使用串口heartbeat,则必须使用其他的介质,如bcast(以太网)heartbeat。用适当的设备文件代替/dev/ttyS0。”
但在您的配置文件里仍然用的“serial /dev/ttyS0”,这个帖子里不涉及到串口通讯吧,您有时间解释下ttyS0吗?


2。ucasteth0 192.168.1.103
这个应该是ucast eth0 192.168.1.103吧?在您的那个帖子里我看到的配置文件是 “bcast eth1
    表示在eth1接口上使用广播heartbeat(将eth1替换为eth0,eth2,或者您使用的任何接口)。”
ucast/bcast等方式分别是什么意思哪?bcast eth1后面要不要+IP哪?

使用道具 举报

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-19
最后登录
2012-2-3
在线时间
1757 小时
阅读权限
200
积分
12741
帖子
2521
主题
1198
精华
24
UID
1

LT总司令

发表于 2009-1-22 12:20:24 |显示全部楼层
已经说的很清楚,配置文件下载附件里已经提供下载,上面排版问题正常!请下载附件和PDF文件查看。
相关参数解释<<用heartbeat配置linux高可用性集群>>已经讲的很清楚,请仔细多看文章吧。
感谢大家对linuxtone的支持!

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-1-18
最后登录
2011-4-29
在线时间
306 小时
阅读权限
70
积分
1399
帖子
505
主题
42
精华
4
UID
1049

LT同学

发表于 2009-1-23 12:48:54 |显示全部楼层
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 目录

我不知道这个提示是否会对安装过程产生不利的影响:

[root@localhost resource.d]# /usr/lib/heartbeat/haresources2cib.py
lvs is an unknown Resource Agent. Please refer to http://www.linux-ha.org/ResourceAgent
cib.xml or cib.xml.sig exist in /var/lib/heartbeat/crm/

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-1-18
最后登录
2011-4-29
在线时间
306 小时
阅读权限
70
积分
1399
帖子
505
主题
42
精华
4
UID
1049

LT同学

发表于 2009-1-23 15:31:11 |显示全部楼层
启动服务五分钟内必然重启服务器:
[root@backuplb ~]# /opt/nginx/sbin/nginx
[root@backuplb ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddressort Scheduler Flags
  -> RemoteAddressort           Forward Weight ActiveConn InActConn
[root@backuplb ~]#
Message from syslogd@ at Fri Jan 23 14:38:24 2009 ...
backuplb heartbeat: [2595]: EMERG: Rebooting system.  Reason: /usr/lib/heartbeat/crmd
Last login: Fri Jan 23 14:34:59 2009 from mylenovo.wenhe.cn

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-1-18
最后登录
2011-4-29
在线时间
306 小时
阅读权限
70
积分
1399
帖子
505
主题
42
精华
4
UID
1049

LT同学

发表于 2009-1-28 22:37:25 |显示全部楼层
logfacility        local0
auto_failback on
翻来覆去发现我的配置文件的后面有两行没加#号,也就是说比正常的配置文件多这两行。但我将楼主提供的配置文件添加上这两行参数后又没有发现出现自动重启的情况,郁闷至极了……

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢红之盟网络提供带宽支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2012-2-4 19:33 , Processed in 0.117562 second(s), 12 queries , Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部