1. 步骤
1.1 准备实验环境
在VMware WorkStation 上安装两个操作系统为Ubuntu 10.10的双网卡主机,主机硬件配置如下图1.1:
图1.1 主机配置
其中需要注意的是其中Network Adapter为“桥接”模式(Bridged),Network Adapter 2为自定义模式(Custom),接在VMNET2 上,如图1.2:
图1.2 Network Adapter 2设置
逻辑拓朴:
ubuntu1
eth0网卡对应外网ip 192.168.0.128 255.255.255.0 192.168.0.1
eth1网卡对应内网ip 192.168.1.2 255.255.255.0 192.168.1.1
ubuntu2
eth0网卡对应外网ip 192.168.0.130 255.255.255.0 192.168.0.1
eth1网卡对应内网ip 192.168.1.3 255.255.255.0 192.168.1.1
cluster
虚拟集群ip 192.168.0.129
其中集群 IP 不能和LAN(包括本机)的IP 冲突,并且不能在除/etc/ha.d/haresources文件以外的任何地方配置
1.2 HeartBeat 的配置
HeartBeat的安装命令为
# apt-get install heartbeat
安装后在/usr/share/doc/heartbeat目录里找到ha.cf、haresources、authkeys三个文件并放到/etc/ha.d 目录下。
另外建议安装apache2
# apt-get install apache2
1.2.1 Authkeys 文件配置
修改配置文件如下:
auth 3
3 md5 Hello! #其中Hello!为密钥
这个配置文件非常简单,就是在 auth 选择一个值。每个值对应一种算法,这个算法用于主节点和从节点间数据校验
这个配置文件权限必须是0600。
# chmod 0600 authkeys
1.2.2 ha.cf 文件配置
修改配置文件如下:
#日志文件位置
logfile /var/log/ha-log
#采用eth1 的udp 广播用来发送心跳信息
bcast eth1
#主节点重启成功后,等到副节点down掉后拿回资源
auto_failback off
# 多长时间判定节点死亡,默认30秒
deadtime 10
#节点名称,先后顺序不重要,但是名称必须与uname –n 保持一致
node ubuntu1
node ubuntu2
想修改主机名的话要修改/etc/hostname文件并重启
1.2.3 haresources 文件配置
此文件用于配置集群的 IP 和使用集群的服务
#配置方式一 (HA 服务启动时将集群IP 自动配置到主节点上)
ubuntu1 192.168.0.129/24/eth0
#配置方式二 (让apache 服务和集群ip地址绑定)
ubuntu1 192.168.0.129/24/eth0 apache2
其中ubuntu1为主机名,可以通过uname –n查看;192.168.0.129为集群ip,24为掩码
本实验采取配置方式二,即把apache2 服务与集群绑定。
1.2.4 其他可选配置
heartbeat 的三个配置文件中还有一些其它可配置项,请自行参考官方文档。
2.截图
启动heartbeat服务
#service heartbeat start
如图2.1可以看到集群IP 自动配置到主节点Ubuntu1上了,而ubuntu2则没有(图2.2),并且集群ip已经可以访问(图2.3)
图2.1 ubuntu1的eth0网卡信息
图2.2 ubuntu2的eth0网卡信息
图2.3 访问集群ip效果
模拟ubuntu1宕机,我们可以停止heartbeat服务
#service heartbeat stop
查看日志文件(/var/log/ha.log)
Nov 24 23:19:52 ubuntu2 heartbeat: [1620]: WARN: node ubuntu1: is dead
mach_down[2020]: 2010/11/24_23:19:52 info: Taking over resource group 192.168.0.129/24/eth0
ResourceManager[2045]: 2010/11/24_23:19:52 info: Acquiring resource group: ubuntu1 192.168.0.129/24/eth0 apache2
IPaddr[2072]: 2010/11/24_23:19:53 INFO: Resource is stopped
ResourceManager[2045]: 2010/11/24_23:19:53 info: Running /etc/ha.d/resource.d/IPaddr 192.168.0.129/24/eth0 start
IPaddr[2154]: 2010/11/24_23:19:53 INFO: Using calculated netmask for 192.168.0.129: 255.255.255.0
IPaddr[2154]: 2010/11/24_23:19:53 INFO: eval ifconfig eth0:0 192.168.0.129 netmask 255.255.255.0 broadcast 192.168.0.255
IPaddr[2130]: 2010/11/24_23:19:53 INFO: Success
mach_down[2020]: 2010/11/24_23:19:53 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired
可以看到,节点2发现节点1异常,然后自动将集群IP配置给自己,并向全网发送广播,于是集群ip依然能够访问
3.体会
一开始的时候按照参考资料《利用VMware 实验基于heartbeat 的Debian Linux 高可用性集群服务v1.0》把haresources文件
配置成 ubuntu1 192.168.0.129 apache2
结果两个节点ifconfig eth0:0输出中都没有看到集群虚拟IP地址192.168.0.129,也打不开网页http://192.168.0.129
通过查看日志文件可以发现执行IPaddr 192.168.0.129 start的时候出错了
ResourceManager[2799]: 2010/11/24_05:05:59 info: Running /etc/ha.d/resource.d/IPaddr 192.168.0.129 start
IPaddr[2884]: 2010/11/24_05:05:59 ERROR: /usr/lib/heartbeat/findif failed [rc=1].
IPaddr[2872]: 2010/11/24_05:05:59 ERROR: Generic error
ResourceManager[2799]: 2010/11/24_05:05:59 ERROR: Return code 1 from /etc/ha.d/resource.d/IPaddr
ResourceManager[2799]: 2010/11/24_05:05:59 CRIT: Giving up resources due to failure of 192.168.0.129
ResourceManager[2799]: 2010/11/24_05:05:59 info: Releasing resource group: ubuntu1 192.168.0.129
ResourceManager[2799]: 2010/11/24_05:05:59 info: Running /etc/ha.d/resource.d/IPaddr 192.168.0.129 stop
IPaddr[2957]: 2010/11/24_05:05:59 INFO: Success
通过网上搜索该错误,终于发现是ipaddr去绑定IP地址时,用/usr/lib/heartbeat/findif找网络接口时失败了,解决方法如下:
haresources文件配置成ubuntu1 192.168.0.129/24/eth0 apache2
4.参考资料
PDF文件 《利用VMware 实验基于heartbeat 的Debian Linux 高可用性集群服务v1.0》 见 http://www.linuxidc.com/Linux/2011-09/43743.htm