前言
- 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(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关闭。正常。