linux redhat 安装heartbeat的配置

一、准备工作
1、环境
两台redhat,各一个网卡,IP地址分别为192.168.0.1和192.168.0.2
uname -n
分别显示node1和node2
cat /etc/hosts
均显示
127.0.0.1       localhost.localdomain   localhost
192.168.0.1 node1
192.168.0.2 node2

 

2、两个node分别安装libnet
hearbeat默认编译选项需要e2fsprogs/libnet库,CentOS4.6默认安装了e2fsprogs,所以这里先安装libnet
cd /usr/local/src
wget http://www.packetfactory.net/libnet/dist/libnet.tar.gz
tar zxvf libnet.tar.gz
cd libnet
./configure
make && make install


3、两个node分别创建heartbeat相关的用户和组
groupadd haclient
useradd -g haclient hacluster


4、关闭两个node上的防火墙(如SELINUX),或者设置为信任eth0,使得能相互听见对方心跳。

否则两个node都认为对方的状态为dead。(我在这个问题上折腾了一会。其他如采用双绞线通过串口进行心跳监控之类的方案也必须检查双绞线是否正常,保证线路通畅。)
 
二、两个node分别下载、编译、安装heartbeat
cd /usr/local/src
wget http://linux-ha.org/download/heartbeat-2.1.3.tar.gz
tar zxvf heartbeat-2.1.3.tar.gz
cd heartbeat-2.1.3
./ConfigureMe configure
大致看看编译统计信息后安装
make && make install
 
三、在node1上的简易配置
将配置文件模板拷贝到默认配置目录(可选,也可手工创建。模板文件中的注释可帮助你理解各配置选项的含义)
cp doc/authkeys /etc/ha.d/
cp doc/ha.cf /etc/ha.d/

 

cd /etc/ha.d/
开始编辑配置文件(两台机器上都需要安装和配置)
1、编辑/etc/ha.d/authkeys

使用的是第1种认证方式(crc),接着把文件的权限改为600:
cat /etc/ha.d/authkeys
显示
auth 1
1 crc
更改文件权限
chmod 600 /etc/ha.d/authkeys
关于Configuring authkeys


2、编辑/etc/ha.d/ha.cf:
cat /etc/ha.d/ha.cf | grep -v '#'
文件显示如下
keepalive 10
deadtime 60
warntime 20
initdead 60
udpport 694
mcast eth0 225.0.0.1 694 1 0
watchdog /dev/watchdog
node node1 node2
ping 192.168.0.254
use_logd yes
compression     zlib
traditional_compression false
crm on
autojoin any


关于ha.cf的指令说明
注意:
ping 192.168.0.254
ping网关,使得每个节点得知自己是否已经离线。我尝试去掉该选项的结果是:当node1拔掉网线之后,node2接管了资源。再插上node1的网线,node2的日志中会不停的出现“WARN: crmd_ha_msg_callback”信息(不信可以试试)。
Additional Options 应该是V2中用来监控Heartbeat运行时对cib.xml的修改。除调试外感觉没啥用,日志中新增了一堆diff信息。
# apiauth cibmon   uid=hacluster
# respawn hacluster /usr/lib/heartbeat/cibmon -d

 

3、资源文件配置。

这里以Two Apache Web Servers in an Active/Active Configuration 的更改版(Two Nginx Web Servers in an Active/Active Configuration)来举例。编辑/etc/ha.d/haresources(V1)或者/var/lib/heartbeat/crm/cib.xml(V2)
cib.xml对于初学者来说很难编写,官方的例子中不能简单的拷贝过来,贸然运行heartbeat会导致node重启,我猜测的原因是官方的示例并未遵循其DTD 。


简单的方法是采用hearbeat提供的工具将V1方式的资源配置文件转换为V2 style的。

比如:
cat /tmp/haresources
文件内容显示为:
node1 192.168.0.3 nginx
node2 192.168.0.4 nginx
意思是,优先在node1上绑定192.168.0.3这个虚拟IP,并管理(start/stop/status)本机上的nginx。优先在node2上绑定192.168.0.4这个虚拟IP,并管理本机上的nginx。
这里nginx是一个LSB style脚本,位于/etc/init.d/nginx,示例可见这里 。先保证nginx已经安装到两个node上了。
转换命令
/usr/lib/heartbeat/haresources2cib.py --stout -c /etc/ha.d/ha.cf /tmp/haresources
运行转换命令之后,/var/lib/heartbeat/crm/cib.xml自动产生。(请在熟悉了hearbeat之后再去尝试修改该文件。)
 
四、将node1上的heartbeat相关的配置文件拷贝到node2
scp /etc/ha.d/ha.cf root@node2:/etc/ha.d/ha.cf
scp /etc/ha.d/authkeys root@node2:/etc/ha.d/authkeys
scp /var/lib/heartbeat/crm/cib.xml root@node2:/var/lib/heartbeat/crm/cib.xml
请确保两个node上的配置文件内容和权限相同。
 
五、在两个node上启动heartbeat并观察结果
1、修改两个node上nginx的index.html
在node1上:
echo 'node1 welcome!' > /usr/local/nginx/html/index.html
在node1上:
echo 'node2 welcome!' > /usr/local/nginx/html/index.html


2、启动两个node上的heartbeat

然后稍等片刻(时间长短取决于ha.cf中的相关参数)。
/etc/init.d/heartbeat start

 

按照我这里的ha.cf配置,日志信息应该可以通过http://www.loveqiutian.cn/
tail /var/log/messages -f
进行查看


3、在两个node上分别运行ifconfig 和ps -ef 来查看虚拟IP和ngnix是否已经启动。


4、在浏览器中分别访问http://192.168.0.3/和http://192.168.0.4/,观察。


5、将node1从局域网中断开,稍等片刻。再重复上面的步骤3、4,观察。


6、将node1重新接入局域网,稍等片刻。再重复上面的步骤3、4,观察。

作者: chen_note   发布时间: 2010-10-28