Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235988
  • 博文数量: 57
  • 博客积分: 1149
  • 博客等级: 少尉
  • 技术积分: 584
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-29 11:35
文章分类

全部博文(57)

文章存档

2016年(1)

2014年(1)

2013年(2)

2012年(27)

2011年(26)

分类: 系统运维

2011-11-04 16:41:02

作者:NetSeek linuxtone.org(IT运维专家网|集群架构|性能调优)
欢迎转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明.


一.基本介绍

背景描述
某大型商业网站由于业务量的发展非常迅速,目前的网站架构根本无法缓解用户访问压力及单点故障。急需一套高可用的负载均衡集群解决方案,(IT运维专家网)根据这家商业网站在的状况,部署了一套负载均衡及高可用的集群方案及相关优化,项目实施以后该商业网站得WEB压力得到了很好的解决,访问速度大幅度提升.以下是相关配置文档,拿出来与朋友们分享希望对更多想了解LVS/HA的朋友有帮助。

本文特色
1.介绍LVS+Heartbeat两种案装方法
2.采用heartbeat 2.x style的配置(使用cib.xml)
3.测试日志分析及相关技巧
4.两个在真实案例中的经验分享 

二.网络拓朴图及相关描述


1.主机名/etc/hosts)
192.168.1.102primarylb.linuxtone.org

•192.168.1.103backuplb.linuxtone.org
复制代码2.
  1. VIP[eth0:0] 192.168.1.106 
  2.    Realserver1 192.168.1.104
  3.    Realserver2 192.168.1.105
复制代码
3.Heartbeat心跳线
a)使用一根串口直连线缆(serial null modem cable)Heartbeat
b)eth1:10.0.0.110.0.0.2 (交叉线直连Heartbeat)

三.安装Heartbeat[yum安装,编译安装]
  1. 1.通过Yum安装Heartbeat
  2. #yuminstall heartbeat-*

  3. •//安装HA

  4. •#yuminstall heartbeat-ldirectord

  5. •//安装ldirectord实现LVS的高可用性

  6. •# 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
复制代码
复制代码
  1. #rpm -q heartbeat ?d
  2. //查看Heartbeat相关doc目录
  3. 将相关配置文件拷贝到/etc/ha.d目录下
  4. # cp /usr/share/doc/heartbeat-2.1.3/ha.cf/etc/ha.d/

  5. •# cp /usr/share/doc/heartbeat-2.1.3/authkeys/etc/ha.d/

  6. •# cp /usr/share/doc/heartbeat-2.1.3/haresources/etc/ha.d
复制代码
复制代码2. 编译安装Heartbeat
下载相关软件包:


编译安装
  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安装盘中都能找到。所需软件包: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实现服务高可用性.
1.分别配置两台HA的主机名.
  1. #vi /etc/hosts
  2. 192.168.1.102primarylb.linuxtone.org

  3. •192.168.1.103backuplb.linuxtone.org
复制代码
复制代码2.
  1. /etc/ha.d/ha.cf 配置介绍
  2. #cd /etc/ha.d
  3. #cat ha.cf|grep -v ^#
  4. logfile/var/log/ha-log

  5. •logfacility

  6. •local0

  7. •keepalive2

  8. •deadtime30

  9. •warntime10

  10. •initdead120

  11. •udpport694

  12. •baud

  13. •19200

  14. •serial

  15. •/dev/ttyS0

  16. •# Linux

  17. •#ucasteth2 10.0.0.3

  18. •ucasteth0 192.168.1.103

  19. •auto_failbackon

  20. •watchdog/dev/watchdog

  21. •crm on

  22. •nodeprimarylb.linuxtone.org

  23. •nodebackuplb.linuxtone.org

  24. •ping192.168.1.103

  25. •ping_grouplbgroup 10.0.0.1 10.0.0.2

  26. •ping_grouplbgroup 192.168.1.102 192.168.1.103

  27. •respawnhacluster /usr/lib/heartbeat/ipfail

  28. •apiauthipfail gid=haclient uid=hacluster
复制代码
复制代码3
  1. ./etc/ha.d/authkeys
  2. #vi authkeys
  3. auth 1

  4. •1 sha1Hey!
复制代码
复制代码
  1. #chmod 600 authkeys
复制代码
  1. 4./etc/ha.d/haresources
  2. # cat haresources |grep -v"#"
  3. 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目录
【注意】
关于crm(ClusterResource Manager):crm资源配置方法是在新的版本中引入的,如果想使用该格式来配置资源(ip,服务,共享磁盘等),可以参看配置示例
  1. :[url]linux-ha.org/v2/Examples/Simple[/url] 。
  2. /var/lib/heartbeat/crm/cib.xml 文件的作用与/etc/ha.d/haresources相同,是二者择一的关系。
  3. # cat/dev/null > haresources
  4. //把haresources清空,采用crm来管理资源

  5. 7. /etc/ha.d/ldirectord.cf 配置
  6. # GlobalDirectives

  7. •checktimeout=3

  8. •checkinterval=1

  9. •fallback=127.0.0.1:80

  10. •autoreload=yes

  11. •logfile="/var/log/ldirectord.log"

  12. •#logfile="local0"

  13. •emailalert="cnseek@gmail.com"

  14. •emailalertfreq=3600

  15. •emailalertstatus=all

  16. •quiescent=no



  17. •# Samplefor an http virtual service

  18. •virtual=192.168.1.106:80



  19. •real=192.168.1.104:80 gate



  20. •real=192.168.1.105:80 gate





  21. •#fallback=127.0.0.1:80gate



  22. •#service=http



  23. •#request="index.html"



  24. •#receive="Test Page"



  25. •#virtualhost=some.domain.com.au



  26. •scheduler=wrr



  27. •persistent=5



  28. •#netmask=255.255.255.255



  29. •protocol=tcp





  30. •checktype=connect





  31. •checkport=80





  32. •#request="index.html"





  33. •#receive="TestPage"





  34. •#virtualhost=
复制代码
复制代码【注意】
Ldirectord的作用是监测Real Server,当RealServer失效时,把它从Load Balancer列表中删除,恢复时重新添加,在安装heartbeat时已经安装了Ldirectord.配置中quiescent=no设置
实现如果Realserver机器down掉以后,立即从IPVS列表中删除,恢复时重新添加.

8.启动Heartbeat服务
  1. # /etc/init.d/heartbeat start
复制代码
五.测试Heartbeat及日志分析
1.
测试串口线配置是否正常
串行连接通过两个节点的串口,使用一根直连线缆将它们连接起来。现在测试串行连接,如下所示:在 primarylb(接收者)上输入以下内容:
  1. cat < /dev/ttyS0 
  2. 在backuplb(发送者)上输入以下内容:
  3. echo "Serial Connection test!Welcome [url]linuxtone.org[/url] !"> /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差不多。
【注意】
  1. # tail -f /var/log/messages
复制代码
//在两台负载均衡服务器上注意查看日志变化来排错。

六. 相关注意事项及参考


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

a)
假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里无法及时刷新MAC.关于vip这个地址的MAC地址还是替换的VS的MAC,有两种解决方法,一种是修改新VS的MAC地址,另一种是使用send_arp /arpiing命令.
以arping命令为例.
  1. /sbin/arping -I eth0 -c 3 -s ${vip}${gateway_ip} > /dev/null 2>&1
复制代码
•例如:
  1. 复制代码/sbin/arping -I eth0 -c 3 -s 192.168.1.6192.168.1.1
  2. 复制代码b)某台Realserver服务down掉以后如何从IPVS列表自动中删除恢复时如何自动添加?配置ldirectord.conf
  3. quiescent=no或 echo 1 >/proc/sys/net/ipv4/vs/expire_nodest_conn
复制代码
2.ha.cf相关注释
auto_failback设置为on时,一旦主节点重新恢复联机,将从从节点取回所有资源。
Stonith设备是一种能够自动关闭电源来响应软件命令的设备
Watchdog在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重新启动系统。

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


4. 附上LVS(DR)脚本
  1. #!/bin/bash

  2. •#description: start LVS of DirectorServer

  3. •#Writtenby :NetSeek [url]linuxtone.org[/url]

  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文件详解:

LVS高可用性方案汇总: [推荐]

LVS负载均衡资料汇总: [推荐]

更多的资料请参考: 

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

IT运维专家网  
阅读(1883) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~