注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

LVS+Heartbeat实施案例分享(藏书)  

2013-05-18 16:39:09|  分类: 开源云系统 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

LVS+Heartbeat实施案例分享(藏书) - lzdzhy-itoedr - itoedr的it学苑
 


1.主机名: (/etc/hosts)

192.168.1.102primarylb.linuxtone.org

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 cable)Heartbeat
       b)eth1:10.0.0.110.0.0.2 (交叉线直连Heartbeat)

三.Heartbeat
        1.通过Yum安装Heartbeat

#yuminstall heartbeat-*

//安装HA

#yuminstall heartbeat-ldirectord

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

# 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

           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.以上软件包,有的在5光盘中,有的要在网上搜索的。
       在ubuntu下安装就是了。

四. 配置Heartbeat实现服务高可用性.
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

keepalive2

deadtime30

warntime10

initdead120

udpport694

baud

19200

serial

/dev/ttyS0

# Linux

#ucasteth2 10.0.0.3

ucasteth0 192.168.1.103

auto_failbackon

watchdog/dev/watchdog

crm on

nodeprimarylb.linuxtone.org

nodebackuplb.linuxtone.org

ping192.168.1.103

ping_grouplbgroup 10.0.0.1 10.0.0.2

ping_grouplbgroup 192.168.1.102 192.168.1.103

respawnhacluster /usr/lib/heartbeat/ipfail

apiauthipfail gid=haclient uid=hacluster

3./etc/ha.d/authkeys
#vi authkeys

auth 1
sha1Hey!

#chmod 600 authkeys


4./etc/ha.d/haresources
# cat haresources |grep -v"#"


primarylb.linuxtone.org lvsldirectord


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

6.采用Heartbeat2.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(ClusterResource 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 配置


# GlobalDirectives

checktimeout=3

checkinterval=1

fallback=127.0.0.1:80

autoreload=yes

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

#logfile="local0"

emailalert="cnseek@gmail.com"

emailalertfreq=3600

emailalertstatus=all

quiescent=no

# Samplefor 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:80gate

#service=http

#request="index.html"

#receive="Test Page"

#virtualhost=some.domain.com.au

scheduler=wrr

persistent=5

#netmask=255.255.255.255

protocol=tcpcheck
type=connect

checkport=80


#request="index.html"

#receive="TestPage"
#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. 停掉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.6192.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设备是一种能够自动关闭电源来响应软件命令的设备
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

#Writtenby :NetSeek [url]http://www.linuxtone.org[/url]

GW=192.168.1.1

# websitedirector 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 $0called with $1

case"$1" in

start)

# Clear all 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_VIPbroadcast $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP 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

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 isstoped"

exit 1

else

ipvsadm -ln


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


fi


;;


*)


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


exit 1


esac


exit 0

5. 关于ldirectord.cf文件详解:http://www.linuxtone.org/th-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

附:lvs的8种调度算法

LVS负载均衡的八种调度算法

LVS已实现了以下八种调度算法:

LVS负载均衡算法---1.轮叫调度(Round-RobinScheduling)

调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载?

LVS负载均衡算法---2.加权轮叫调度(WeightedRound-RobinScheduling)

调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求?这样可以保证处理能力强的服务器处理更多的访问流量?调度器可以自动问询真实服务器的负载情况,并动态地调整其权值?

LVS负载均衡算法---3.最小连接调度(Least-ConnectionScheduling)

调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上?如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载?

LVS负载均衡算法---4.加权最小连接调度(WeightedLeast-ConnectionScheduling)

在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载?调度器可以自动问询真实服务器的负载情况,并动态地调整其权值

LVS负载均衡算法---5.基于局部性的最少链接(Locality-BasedLeastConnectionsScheduling)

基于局部性的最少链接"调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统?该算法根据请求的目标IP地址找出该目标IP地址 最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链 接"的原则选出一个可用的服务器,将请求发送到该服务器?

LVS负载均衡算法---6.带复制的基于局部性最少链接(Locality-BasedLeastConnectionswithReplicationScheduling)

带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统?它与LBLC算法的不同之处是它要维护从 一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射?该算法根据请求的目标IP地址找出该目标IP地址对应的 服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选 出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器?同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复 制的程度

LVS负载均衡算法---7.目标地址散列调度(DestinationHashingScheduling)

目标地址散列"调度算法根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空

LVS负载均衡算法---8.源地址散列调度(SourceHashingScheduling)

源地址散列"调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空?

  评论这张
 
阅读(242)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017