Heartbeat提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理机制、监控工具和失效切换功能等。但是Heartbeat仅仅是个HA软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序。要监控资源和应用程序是否运行正常,必须使用第三方的插件,例如ipfail、Mon和Ldirector等。Heartbeat自身包含了几个插件,分别是ipfail、Stonith和 Ldirectord。
在家闲着无事,就简单的测试了一下heartbeat,没怎么深入测试,所以本文只会告诉你怎么让heartbeat跑起来,不涉及服务。
安装heartbeat不是个简单的事情,很多文章说可以直接用yum来安装,但我从碟上的安装源以及rpmforge的源中都没有找到heartbeata的包(如果你知道可以告诉我哪个源里面可以直接安装heartbeat),所以我还是从官方网站下载了三个包来进行编译。
编译的顺序是:先Cluster Glue, 再Resource Agents,然后才是Heartbeat。
这个编译可不是个简单的事,它可耗费了我不少时间。首先要安装autoconf, automake,pkgconfig,libxslt-devel等包。configure都没有大问题,都不在话下,都有明确的提示。
第一个不好解决的错误就是
./.libs/libplumb.so: undefined reference to `uuid_generate'
./.libs/libplumb.so: undefined reference to `uuid_copy'
./.libs/libplumb.so: undefined reference to `uuid_is_null'
./.libs/libplumb.so: undefined reference to `uuid_unparse'
./.libs/libplumb.so: undefined reference to `uuid_clear'
./.libs/libplumb.so: undefined reference to `uuid_compare'
collect2: ld returned 1 exit status
gmake[2]: *** [ipctest] Error 1
gmake[2]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib/clplumbing'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib'
make: *** [all-recursive] Error 1
这个差不多能看出来是uuid方面的包的故障,所以我一开始就想去安装一个libuuid-devel的包,在这个上面消耗了不少时间。但最后通过google与linux-ha的maillist得到了提示,总算是把这个问题给解决了。解决方法其实很简单,只要在configure时在后面加上:
这个问题在对三个包进行make的时候都会出现类似的错误,所以这个解决方法在make三个包时都要用到。还要提到的是,在对Heartbeat进行configure的时候,最好用他推荐的ConfigureMe而不要用configure。
第二个比较麻烦的问题也是在make时碰到的,不过只是在make Cluster Glue才有:
main.c:64: warning: function declaration isn't a prototype
main.c:78: warning: function declaration isn't a prototype
gmake[2]: *** [main.o] Error 1
gmake[2]: Leaving directory
`/root/Reusable-Cluster-Components-glue-1.0.6/lib/stonith'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib'
make: *** [all-recursive] Error 1
error: Bad exit status from /var/tmp/rpm-tmp.55884 (%build)
这个问题我都估计是Cluster Glue的一个bug,产生的原因与解决的方法实在是太鬼异了。从错误信息上来看,这是main.c文件里面的函数定义错误,解决办法就是将其version函数从stonith子目录下面的main.c文件里面删除(我对编程不懂,不过改名是没用的)。
打开stonith子目录下面的main.c。
1、找到其64行,将其注释掉。
2、找到其76到81行全部注释掉。
3、找到其390行,将其注释,或者换成
这之后来说应该都会是一帆风顺的了,当然你也有可能在make install Heartbeat碰到这个问题:
/
--xinclude /
http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl heartbeat.xml
gmake[1]: --xinclude: Command not found
gmake[1]: *** [heartbeat.8] Error 127
gmake[1]: Leaving directory `/root/Heartbeat-3-0-STABLE-3.0.3/doc'
make: *** [all-recursive] Error 1
这个就是因为你没有安装前面我说的那个libxslt-devel包了。安装好之后就可以。
顺便说一句,在make install Heartbeat的时候,这个–xinclude这些xml文件时可能要耗大量的时间,有时候可能由于网络原因还会报错,这个时候只要再来几次基本上也就没有问题了。
接下来就是重头戏,配置heartbeat了。
heartbeat的配置文件有两个位置/etc/ha.d与/usr/etc/ha.d,由于没有仔细去读/etc/init.d/heartbeat,导致一会儿报这里找不到一个文件一会儿那里找不到一个文件,我干脆就所/usr/etc/ha.d下面的内容全部copy到/etc/ha.d里面,再删掉/usr/etc/ha.d,然后做一个软链接指向/etc/ha.d。整个世界终于清醒了。
然后就是/etc/ha.d/ha.cf文件了,这里我就提供我的ha.cf文件,然后简单的解释一下:
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
bcast eth0
#mcast eth1 225.0.0.1 694 1 0
#ucast eth0 192.168.0.1
auto_failback on
watchdog /dev/watchdog
node node1
node node2
ping 172.16.217.1
respawn hacluster /usr/lib/heartbeat/ipfail
compression zlib
debugfile与logfile是定义日志文件的位置,如果两个都没有定义,默认会写入/var/log/message。
keepalive指定心跳间隔时间即每隔多少秒钟在eth0上发送一次广播。
deadtime指定若备用节点在多少秒内没有收到主节点的心跳信号,则立即接管主节点的服务资源。
warntime指定心跳延迟的时间为N秒。当N秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务
initdead在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍
bcast、mcast与ucast都是定义心跳的,三个任选一个即可。bcast是直接定义使用设备,mcast使用多播,ucast是单播。
auto_failback指定主机恢复后是否自动切换回主机服务。
node后面一定要接uname -n的结果。
ping与respawn hacluster /usr/lib/heartbeat/ipfail用来测试网络连接,ping后面接外网网关或者其他可靠的设备的IP,如果这个IP一旦ping不通了(意味该机的外网down了),则利用respawn调用/usr/lib/heartbeat/ipfail来主动进行切换。
其他的各项定义,大家自己man ha.cf看吧,我也没时间去管那么多了。
接下来就是/etc/ha.d/authkeys。
authkeys文件用于设定Heartbeat的认证方式,共有3种可用的认证方式,即crc、 md5和sha1。3种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果Heartbeat集群运行在安全的网络上,可以使用crc方式;如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高;如果是处于网络安全和系统资源之间,可以使用md5认证方式。
我这里直接用crc,只反注释了下面这两行:
# 1 crc
最后就是/etc/ha.d/haresources
这个文件里面最有文章,大家可以去参考相关文章,我这里只解释我的(最简单的)
其中的node1定义是主机(active host),172.16.217.200是VIP(虚拟IP,也就是真正对外提供服务的IP),httpd也就是httpd服务。
之后,大家就尽情测试吧。呵呵
转载于:https://blog.51cto.com/lucifer119/1336575