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虚拟机中,支持把串口映射到命名管道,把两个虚拟机的串口映射到同一个命名管道,从而可以模拟串口通讯试验过程,对于内核调试,模拟linux的HA试验都是非常好的手段。在两个虚拟机中都选定同一个命名管道 \\.\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个配置文件(在两个节点241和242上的操作完全相同)。可以
从/usr/share/doc/heartbeat- 1.2.3 复制。
第一个/etc/ha.d/authkeys,用于认证
两个节点上的密钥必须相同。有三种认证模式可以选择:crc、md5 或 sha1。如果您的 heartbeat 运行在一个安全的网络上,比如例子中的交叉线缆,那么应该使用 crc。从资源的角度看,该方法的花费最低。如果您的网络不够安全,但您不是特别多疑,或者不是很关心最小化 CPU 资源的使用,那么应该使用 md5。最后,如果您想要得到最好的认证,而不考虑 CPU 资源的使用,那么请使用 sha1,因为它最难破解
文件的格式如下:
auth <number>
<number> <authmethod> [<authkey>]
--------------------------------
auth 2
2 crc
-----------------------------------
auth 3
3 md5 A46fsdgCH
----------------------------------------
其中A46fsdgCH是heartbeat用于在节点间认证的密码,设置为自己的字符串
为了安全,我们要设置该文件的权限,使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服务终止时,242的heartbeat会把服务叫起来,当 241服务回复时,242会自动终止服务跳至standby的状态。要注意到节点名称最好是要能够由DNS查询到,而接下来的ping_group就 不用打IP而只要名称就好
以下的设定是配合ipfail
ping 192.168.1.1
这个是自动测试网络有没有通,最好将他设为core router的IP
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-lb1和mysql-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,node2的ucast eth0 node1IP)
--------------------------------------------------------------------------------------
225.0.0.1 ,231.231.231.231都是多播地址。
���watchdog
watchdog是一��在系�y完全停住�r,�kernel��制重�_系�y的服�铡�
#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 自带的
�@���O定的格式如下
[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、在服务器A、B上分别执行service heartbeat start 启动集群软件,
及执行service httpd start启动apache。
2、在服务器A、B上分别执行:
#echo "WebSite A">/var/www/html/index.html
#echo "WebSite B">/var/www/html/index.html
3、在服务器A、B上httpd启动的情况,不断刷新http://211.155.225.171
正常的话, 交替出现 WebSite A及WebSite B
在服务器A上执行service httpd stop,结果是:
只出现WebSite B
在服务器A上执行service httpd start, B上执行stop操作,结果是:
只出现WebSite A
全部启动httpd,将恢复正常情况。