heartbeat Linux Hight Availibility 计划所开发的套件。Heartbeat包含了几个元件:ipfail,Stonith, Ldirectord

ipfail的功能是在探知服务IP失效了便立即将服务IP抓取来用的功能

stonith 确保当服务器停止时,确保剩下的server不会被影响。也可以选择性强制停止一些server.

ldirectord是一个负载均衡的服务器。

安装Heartbeat

安装依赖:

rpm -ivh perl-5*.rpm  telnet-0*.rpm PyXML*.rpm gnutls-1*.rpm

gnutls-devel*.rpm libgpg-error-devel*.rpm libgcrypt-devel*.rpm pkgconfig*.rpm zlib-dev*.rpm

rpm -ivh heartbeat-pils*.rpm heartbeat-stonith*.rpm

rpm -ivh heartbeat-2*.rpm

虚拟机串口通信配置

vmware虚拟机中,支持把串口映射到命名管道,把两个虚拟机的串口映射到同一个命名管道,从而可以模拟串口通讯试验过程,对于内核调试,模拟linuxHA试验都是非常好的手段。在两个虚拟机中都选定同一个命名管道 \\.\pipe\com_1,指定A机的COM口为服务端,并指B机的COM口为客户端,这样,可以无需附加任何硬件,利用vmware虚拟机就可以搭建串口通讯的测试环境。

A机器
[root@localhost ~]# stty ispeed 9600 ospeed 9600 -F /dev/ttyS0
B
机器
[root@localhost ~]# stty ispeed 9600 ospeed 9600 -F /dev/ttyS0
B
做接受准备
[root@localhost ~]# cat</dev/ttyS0

A机器
[root@localhost ~]# echo hello > /dev/ttyS0
[root@localhost ~]# echo hello1 > /dev/ttyS0
切换到B机器可以看到
[root@localhost ~]# cat</dev/ttyS0
hello
hello1
A
B的测试结束.
=======================================
A机做接受信息准备
[root@localhost ~]# cat < /dev/ttyS0
B
[root@localhost ~]# echo hello a >/dev/ttyS0
[root@localhost ~]# echo hello a1 >/dev/ttyS0
此时,A机看到
[root@localhost ~]# cat < /dev/ttyS0
hello a
hello a1
B
A的测试结束.

 heartbeat的原理

两个系统的串口之间的直连线缆用来在两个节点间传输 heartbeat

heartbeat的配置

样例:

    名称                            域名                         IP

共享(虚拟IP       ha.haw2.ibm.com            192.168.1.240

 Node1(主)       ha1.haw2.ibm.com             192.168.1.241
Node2
(备份)    ha2.haw2.ibm.com             192.168.1.242

在两个节点上安装heartbeat.

首先,需要调整两个负载均衡节点上的/etc/hosts文件,将主机名写进去

192.168.1.241       241.localhost.localdomain       241

192.168.1.242       242.localhost.localdomain       242

我们需要为heartbeat创建3个配置文件(在两个节点241242上的操作完全相同)。可以

/usr/share/doc/heartbeat-1.2.3复制。

第一个/etc/ha.d/authkeys,用于认证

两个节点上的密钥必须相同。有三种认证模式可以选择:crcmd5 sha1。如果您的 heartbeat 运行在一个安全的网络上,比如例子中的交叉线缆,那么应该使用 crc。从资源的角度看,该方法的花费最低。如果您的网络不够安全,但您不是特别多疑,或者不是很关心最小化 CPU 资源的使用,那么应该使用 md5。最后,如果您想要得到最好的认证,而不考虑 CPU 资源的使用,那么请使用 sha1,因为它最难破解

文件的格式如下:
    auth <number>
    <number> <authmethod> [<authkey>]

--------------------------------

auth 2
2 crc

-----------------------------------

auth 3

3 md5 A46fsdgCH

----------------------------------------

其中A46fsdgCHheartbeat用于在节点间认证的密码,设置为自己的字符串

为了安全,我们要设置该文件的权限,使root以外的用户无法访问

#chmod 600 /etc/ha.d/authkeys


第二个/etc/ha.d/ha.cf

它告诉 heartbeat 使用哪些类型的媒体路径以及如何配置它们。该文件还定义了群集中的节点,以及 heartbeat 用来确认系统是否在运行的接口。

只列出必要的设定(用串口连接)
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
两秒侦测一遍应该是足够了,如果你的网管会将特定速度的ping视做是病毒,你可能会需要调整时间。
deadtime 30
视你的服务需要,一般来说heartbeat从探知对方服务终止到取代服务约要个10秒,尽量不要小于这个数字。
warntime 10
initdead 180
对于大部分的OS,可能heartbeat服务启动之后,需要一些时间网络才能正常运作,在此可以设定让heartbeat启动时不要去侦测是否存活的时间。
baud 19200
serial /dev/ttyS0
以上两个设定是有连接序列线才有。
auto_failback on
这决定是否主要节点回复后,次要节点会回到standby的状态。
watchdog /dev/watchdog
node 241.localhost.localdomain
node 242.localhost.localdomain

如此一来241就是主要节点,配合前面auto-failback的设定,当241服务终止时,242heartbeat会把服务叫起来,当 241服务回复时,242会自动终止服务跳至standby的状态。要注意到节点名称最好是要能够由DNS查询到,而接下来的ping_group 不用打IP而只要名称就好
以下的设定是配合ipfail
ping 192.168.1.1
这个是自动测试网络有没有通,最好将他设为core routerIP
ping_group group1 192.168.0.241 192.168.0.242
如果这两个IP活着,表示group1是活着,依此类推
respawn hacluster /usr/lib/heartbeat/ipfail
你必须先建立一个名为hacluster的账号,否则就使用respawn nobody /usr/lib/heartbeat/ipfail这样的设定

apiauth ipfail gid=haclient uid=hacluster

-----------------------------------------------------------------------------------

node名称(这里的mysql-lb1mysql-lb2)必须和uname -n命令的输出结果一致

eth0口连接

bcast        eth0
mcast eth0 225.0.0.1 694 1 0

------------------------------------------------------------------------------

 如果是双网卡

 mcast eth0 231.231.231.231 694 1 0
##
有双网卡最好做个两台机器最好做交叉线连接,eth0 eth1
#ucast eth0 211.155.225.175 
#(node1
直接指向node2IP,node2ucast eth0 node1IP)

--------------------------------------------------------------------------------------

225.0.0.1 231.231.231.231都是多播地址。

啟動watchdog

watchdog是一個在系統完全停住時,讓kernel強制重開系統的服務。

    #modprobe softdog

編輯/etc/modules.conf加入
alias watchdog softdog

第三个文件是/etc/ha.d/haresources,用来设置虚拟IP地址

该文件描述的是 heartbeat 管理的资源。这些资源本质上只是一些 start/stop 脚本,非常类似于在 /etc/rc.d/init.d 中用来启动和停止资源的那些脚本。注意,heartbeat 会在 /etc/rc.d/init.d /etc/ha.d/resource.d 中去寻找脚本。脚本文件 httpd heartbeat 自带的

這個設定的格式如下
[full hostname] [
虚拟ip] [service1] [service2]

意思:是主节点使用虚拟ip 提供service1服务

service.your.domain 192.168.0.1 httpd proftpd

--------------------------------------------------------------------------------

mysql-lb1        \
ldirectord::ldirectord.cf \
LVSSyncDaemonSwap::master \
IPaddr2::192.168.1.15/24/eth0/192.168.1.255

--------------------------------------------------------------------------------

node1   \

ldirectord::ldirectord.cf \

LVSSyncDaemonSwap::master \

vip.sh::eth0::211.155.225.171::255.255.255.224

-----------------------------------------------------------------------------------------------------

上述配置中的node名称,可以任意设置;但是两台服务器的设置要相同。

测试
1、在服务器AB上分别执行service heartbeat start 启动集群软件,
及执行service httpd start启动apache

2、在服务器AB上分别执行:
#echo "WebSite A">/var/www/html/index.html
#echo "WebSite B">/var/www/html/index.html

3、在服务器ABhttpd启动的情况,不断刷新http://211.155.225.171
正常的话, 交替出现 WebSite AWebSite B
在服务器A上执行service httpd stop,结果是:
只出现WebSite B
在服务器A上执行service httpd start B上执行stop操作,结果是:
只出现WebSite A
全部启动httpd,将恢复正常情况。