在CentOS上安装配置heartbeat
Sunday, August 15th, 2010 Posted in Linux, 安装配置 | No Comments »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都没有大问题,都不在话下,都有明确的提示。 第一个不好解决的错误就是[crayon-5df714c7a7a99770247359/]这个差不多能看出来是uuid方面的包的故障,所以我一开始就想去安装一个libuuid-devel的包,在这个上面消耗了不少时间。但最后通过google与linux-ha的maillist得到了提示,总算是把这个问题给解决了。解决方法其实很简单,只要在configure时在后面加上:[crayon-5df714c7a7aa1653126204/] 这个问题在对三个包进行make的时候都会出现类似的错误,所以这个解决方法在make三个包时都要用到。还要提到的是,在对Heartbeat进行configure的时候,最好用他推荐的ConfigureMe而不要用configure。 第二个比较麻烦的问题也是在make时碰到的,不过只是在make Cluster Glue才有:[crayon-5df714c7a7aa3551855255/] 这个问题我都估计是Cluster Glue的一个bug,产生的原因与解决的方法实在是太鬼异了。从错误信息上来看,这是main.c文件里面的函数定义错误,解决办法就是将其version函数从stonith子目录下面的main.c文件里面删除(我对编程不懂,不过改名是没用的)。 打开stonith子目录下面的main.c。 1、找到其64行,将其注释掉。 2、找到其76到81行全部注释掉。 3、找到其390行,将其注释,或者换成[crayon-5df714c7a7aa6389451559/] 这之后来说应该都会是一帆风顺的了,当然你也有可能在make install Heartbeat碰到这个问题:[crayon-5df714c7a7aa8373059235/] 这个就是因为你没有安装前面我说的那个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文件,然后简单的解释一下:[crayon-5df714c7a7aab479575055/] 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,只反注释了下面这两行:[crayon-5df714c7a7aae570956513/] 最后就是/etc/ha.d/haresources 这个文件里面最有文章,大家可以去参考相关文章,我这里只解释我的(最简单的)[crayon-5df714c7a7ab0903140619/] 其中的node1定义是主机(active host),172.16.217.200是VIP(虚拟IP,也就是真正对外提供服务的IP),httpd也就是httpd服务。 之后,大家就尽情测试吧。呵呵