LVS负载均衡+高可用集群解决方案 ipvsadm+heartbeat+ldirector


前言

  • LVS的介绍可以查看本博客的日志: > LVS 搭建集群的一些介绍(方案,优化)
  • 首先按照本博客中的前两篇日志:

    LVS VS-TUN ipvsadm+heartbeat-ldirectord搭建linux集群
    LVS VS-DR ipvsadm+heartbeat-ldirectord搭建linux集群

  • 配置好无高可用的LVS集群。

    整体方案需要的工具

  • heartbeat:用于搭建双机热备环境,可以通过专门的心跳线来连接双机,也可以通过普通的网线来连接。(需安装)

  • ipvsadm:负载均衡软件(前期已安装)
  • heartbeat-ldirector:heartbeat的组件,有两个主要功能,一是调用ipvsadm命令生成lvs的策略,二是对realserver进行健康检测(前期已安装)

    测试环境

  • 主调度机IP:eth0:192.168.11.10

  • 备调度机IP:eth0:192.168.11.11
  • 调度机VIP:eth0:0:192.168.11.20
  • 真实机1IP:eth0:192.168.11.12
  • 真实机2IP:eth0:192.168.11.13

    安装与配置(主调度机)

1
yum install heartbeat    //安装heartbeat 
2
把ha.cf,haresources,authkeys,ldirectord.cf 都复制到/etc/ha.d/
cp  -rf /usr/share/doc/heartbeat-2.1.3/ha.cf  /etc/ha.d        //高可用主备配置文件
cp  -rf  /usr/share/doc/heartbeat-2.1.3/authkeys  /etc/ha.d  //认证配置文件
cp  -rf /usr/share/doc/heartbeat-2.1.3/haresources  /etc/ha.d   //资源配置文件
cp  -rf  /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf  /etc/ha.d   //ldirector配置文件(前期已配置好ldirector.不用再次复制此文件.)
3
修改host
用uname -n 查看主,被调度机的主机名,并且增加到host文件中.
vi /etc/hosts
lvs1    192.168.11.10
lvs2    192.168.11.11
4
修改/etc/ha.d/ha.cf,完整内容如下:
logfile /var/log/ha-log               //记录日志
logfacility     local0
keepalive 2                      //主备调度机心跳检查的间隔  秒
deadtime 6                      //多久没有检测到心跳时宣布死亡,进行切换
warntime 4                      //警告时间,记录日志,不切换
initdead 120                  //heartbeat第一次启动时启动其所控资源的时间。在一些配置中,节点重启后需要花一些时间启动网络。这个时间与"deadtime"不同,要单独对待。 至少是标准死亡时间的两倍。
udpport 694                  //心跳检查的默认端口
ucast eth0 192.168.11.11    //采用网卡eth0的udp单播来通知心跳,ip应为另外一台调度机的IP
auto_failback on             //主节点重启成功后,on即为再重新切换为使用主节点工作。off则是等到副节点down调后拿回资源。
#watchdog /dev/watchdog         //启动内核看门狗功能,能让系统在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。如果使用该特性,则在内核中装入softdog内核模块,用来生成实际的设备文件,输入insmod softdog加载模块。
node    svn.ivg.com        主节点名称  uname -n查看
node    sylar-db              备节点名称  uname -n查看
5
修改/etc/ha.d/authkeys  认证文件:
auth 3
3 md5 Hello!
保留这两行即可。
1,2,3表示认证算法选择,这里选择了md5算法
Authkeys的权限必须是0600。
chmod 0600 /etc/ha.d/authkeys
6
资源文件/etc/ha.d/haresources 说明:
该文件的格式为:
主调度机名称   脚本1  脚本x ...    VIP   脚本2   脚本y ...
该文件作用:当启动heartbeat时,heartbeat会根据这个文件执行操作:先执行脚本1,然后执行脚本x,再创建虚拟接口eth0:0并配置VIP,再执行脚本2,最后执行脚本y。而停止的时候则安装相反顺序执行。说明:这些脚本必须放在/etc/init.d/或/etc/ha.d/resource.d下,且不能开机启动,必须支持 “脚本名 start  ” 这样的启动方式和“脚本名 stop  ”这样的停止方式。
7
修改资源文件/etc/ha.d/haresources
lvs1    192.168.11.20   ldirectord
解释:先创建虚拟接口eth0:0配置VIP,再启动ldirectord(调用ipvsadm命令生成已经在ldirectord.cf中配置好的lvs的策略,对realserver进行健康检测)。
8
ldirectord配置文件 /etc/ha.d/ldirectord.cf 
前期已经配置好,不做修改。

安装与配置(备调度机)

1
备调度机原来未做过任何配置需要重新安装:
yum install ipvsadm
yum install heartbeat
yum install heartbeat-ldirectord
2
默认启动不了ldirectord,需要修改/etc/rc.d/init.d/ldirectord 注释掉该行: . /etc/ha.d/shellfuncs
3
修改网络参数:
echo "1" >/proc/sys/net/ipv4/ip_forward     //DR模式需要开启转发,tun模式可关闭,改为0
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
4
从主调度机上复制需要的4个配置文件到备调度机相应目录
cd /etc/ha.d/
scp ha.cf authkeys haresources ldirectord.cf 192.168.1.11:/etc/ha.d/
5
修改一项配置/etc/ha.d/ha.cf
找到该行 ucast eth0 192.168.11.11 修改为主节点的IP  ucast eth0 192.168.11.10
其它文件均不需要修改。

启动

  • ldirectord会调用ipvsadm命令生成lvs的策略启动ipvsadm,而heartbeat会调用资源文件加载eth0:0 VIP和启动ldirectord。所以只需要启动主调度机的heartbeat和备调度机的heartbeat即可。
  • 分别再主备两台调度机上运行service heartbeat start 即可启动heartbeat。(正常情况为主调度机能用ifconfig看到虚拟接口eth0:0,用ipvsadm能查看到IP负载列表,而备调度机均看不到这些。如果出现主备调度机均能看到这些信息,可以重启下主调度机的heartbeat)
  • 可查看日志:tail -100f /var/log/ha-log
  • 在出现“Local status now set to: 'up'”时候需要等待一段时间检测另一台调度机状况。如果未启动另一台调度机则需要等待最长initdead设置的时间。之后才能正常启动完成。
  • ==(正常情况为主调度机能用ifconfig看到虚拟接口eth0:0,用ipvsadm能查看到IP负载列表,而备调度机均看不到这些。如果出现主备调度机均能看到这些信息,可以重启下主调度机的heartbeat)==
正常启动信息如下(只启动主,备未启动):
heartbeat[19417]:  2011/12/20_17:04:30 info: Version 2 support: false
heartbeat[19417]:  2011/12/20_17:04:30 WARN: Logging daemon is disabled --enabling logging daemon is recommended
heartbeat[19417]:  2011/12/20_17:04:30 info: **************************
heartbeat[19417]:  2011/12/20_17:04:30 info: Configuration validated. Starting heartbeat 2.1.3
heartbeat[19418]:  2011/12/20_17:04:30 info: heartbeat: version 2.1.3
heartbeat[19418]:  2011/12/20_17:04:30 info: Heartbeat generation: 1324289702
heartbeat[19418]:  2011/12/20_17:04:30 info: glib: ucast: write socket priority set to IPTOS_LOWDELAY on eth0
heartbeat[19418]:  2011/12/20_17:04:30 info: glib: ucast: bound send socket to device: eth0
heartbeat[19418]:  2011/12/20_17:04:30 info: glib: ucast: bound receive socket to device: eth0
heartbeat[19418]:  2011/12/20_17:04:30 info: glib: ucast: started on port 694 interface eth0 to 192.168.11.11
heartbeat[19418]:  2011/12/20_17:04:30 info: G_main_add_TriggerHandler: Added signal manual handler
heartbeat[19418]:  2011/12/20_17:04:30 info: G_main_add_TriggerHandler: Added signal manual handler
heartbeat[19418]:  2011/12/20_17:04:30 info: G_main_add_SignalHandler: Added signal handler for signal 17
heartbeat[19418]:  2011/12/20_17:04:30 info: Local status now set to: 'up'       //启动到该位置等待了2分钟,未检测到备机,继续。
heartbeat[19418]:  2011/12/20_17:06:31 WARN: node LVS2: is dead
heartbeat[19418]:  2011/12/20_17:06:31 info: Comm_now_up(): updating status to active
heartbeat[19418]:  2011/12/20_17:06:31 info: Local status now set to: 'active'
heartbeat[19418]:  2011/12/20_17:06:31 WARN: No STONITH device configured.
heartbeat[19418]:  2011/12/20_17:06:31 WARN: Shared disks are not protected.
heartbeat[19418]:  2011/12/20_17:06:31 info: Resources being acquired from sylar-db.
harc[20118]:   2011/12/20_17:06:31 info: Running /etc/ha.d/rc.d/status status
mach_down[20148]:  2011/12/20_17:06:31 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired
mach_down[20148]:  2011/12/20_17:06:31 info: mach_down takeover complete for node sylar-db.
heartbeat[19418]:  2011/12/20_17:06:31 info: mach_down takeover complete.
heartbeat[19418]:  2011/12/20_17:06:31 info: Initial resource acquisition complete (mach_down)
IPaddr[20204]:   2011/12/20_17:06:31 INFO:  Resource is stopped
heartbeat[20119]:  2011/12/20_17:06:31 info: Local Resource acquisition completed.
harc[20243]:   2011/12/20_17:06:31 info: Running /etc/ha.d/rc.d/ip-request-resp ip-request-resp
ip-request-resp[20243]: 2011/12/20_17:06:31 received ip-request-resp 192.168.11.20 OK yes
ResourceManager[20264]: 2011/12/20_17:06:31 info: Acquiring resource group: svn.ivg.com 192.168.11.20 ldirectord
IPaddr[20291]:   2011/12/20_17:06:31 INFO:  Resource is stopped
ResourceManager[20264]: 2011/12/20_17:06:31 info: Running /etc/ha.d/resource.d/IPaddr 192.168.11.20 start
IPaddr[20367]:   2011/12/20_17:06:31 INFO: Using calculated nic for 192.168.11.20: eth0
IPaddr[20367]:   2011/12/20_17:06:31 INFO: Using calculated netmask for 192.168.11.20: 255.255.255.0
IPaddr[20367]:   2011/12/20_17:06:31 INFO: eval ifconfig eth0:0 192.168.11.20 netmask 255.255.255.0 broadcast 192.168.11.255
IPaddr[20350]:   2011/12/20_17:06:31 INFO:  Success
ResourceManager[20264]: 2011/12/20_17:06:31 info: Running /etc/ha.d/resource.d/ldirectord  start
heartbeat[19418]:  2011/12/20_17:06:41 info: Local Resource acquisition completed. (none)
heartbeat[19418]:  2011/12/20_17:06:41 info: local resource transition completed.

真实机配置

与前期配置好的LVS集群真实机配置一样,不需要修改。

测试

  • 主备启动完成后
  • 使用VIP加端口进行访问:正常。
  • 查看主调度机ipvsadm,看到请求。
  • 停止主调度机heartbeat再次访问:正常。
  • 查看备调度机ipvsadm,看到请求。
  • 启动主调度机heartbeat再次访问:正常。
  • 查看主调度机ipvsadm,看到请求。
  • 检查备调度机ipvsadm无IP规则,虚拟接口eth0:0关闭。正常。