红联Linux门户
Linux帮助

Ubuntu下基于HeartBeat的双机热备

发布时间:2014-12-11 11:40:11来源:linux网站作者:linux人

1.步骤

1.1 准备实验环境

在VMware WorkStation 上安装两个操作系统为Ubuntu 10.10的双网卡主机

其中需要注意的是其中Network Adapter为“桥接”模式(Bridged),Network Adapter 2为自定义模式(Custom),接在VMNET2 上

逻辑拓朴:

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

可以看到集群IP 自动配置到主节点Ubuntu1上了,而ubuntu2则没有,并且集群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》。