Linux下高可用集群方案很多,本文介绍的是性价比比较高的一种: 使用Heartbeat 2.0配置Linux高可用性集群。
    一、 准备工作
    你首先需要两台电脑,这两台电脑并不需要有相同的硬件(或者内存大小等),但如果相同的话,当某个部件出现故障时会容易处理得多。接下来您需要决定如何部署。你的集群是通过Heartbeat 软件产生在两台电脑之间心跳信号来建立的。为了传输心跳信号,需要在节点之间存在一条或多条介质通路(串口线通过modem电线,以太网通过交叉线,等等)。现在可以开始配置硬件了。既然想要获得高可用性(HA),那么您很可能希望避免单点失效。在本例中,可能是您的null modem线/串口,或者网卡(NIC)/ 交叉线。因此便需要决定是否希望为每个节点添加第二条串口null modem连线或者第二条NIC/交叉线连接。我使用一个串口和一块额外的网卡来作为heartbeat的通路,这是因为我只有一条null modem线和一块多余的网卡,并且认为有两种介质类型传输heartbeat信号比较好。硬件配置完成之后,便需要安装操作系统以及配置网络(我在本文中使用的是RedHat)。假设您有两块网卡,那么有一块应该配置用于常规网络用途,另一块作为集群节点之间的专用网络连接(通过交叉线)。例如,假设集群节点有如表-1下的IP地址:
表-1
群集节点的IP地址
主服务器mxl.com
192.168.0.10
心跳IP地址
10.1.1.2
备份服务器bakup.mxl.com
192.168.0.5
心跳IP地址
10.1.1.3
 
检查配置是否正确
使用用netstat -nr 和ping 命令
 
简单网络拓朴图
 

 
安装软件包
heartbeat-2.1.3-3.el5.centos.i386.rpm             perl-Digest-SHA1-2.11-1.2.1.i386.rpm
heartbeat-devel-2.1.3-3.el5.centos.i386.rpm       perl-IO-Socket-SSL-1.01-1.fc6.noarch.rpm
heartbeat-gui-2.1.3-3.el5.centos.i386.rpm         perl-LDAP-0.33-3.fc6.noarch.rpm
heartbeat-ldirectord-2.1.3-3.el5.centos.i386.rpm perl-Mail-POP3Client-2.17-1.el5.centos.noarch.rpm
heartbeat-pils-2.1.3-3.el5.centos.i386.rpm        perl-MailTools-1.77-1.el5.centos.noarch.rpm
heartbeat-stonith-2.1.3-3.el5.centos.i386.rpm     perl-Net-IMAP-Simple-1.17-1.el5.centos.noarch.rpm
libnet-1.1.2.1-2.rf.i386.rpm                      perl-Net-IMAP-Simple-SSL-1.3-1.el5.centos.noarch.rpm
perl-Authen-Radius-0.13-1.el5.centos.noarch.rpm   perl-Net-SSLeay-1.30-4.fc6.i386.rpm
perl-Convert-ASN1-0.20-1.1.noarch.rpm             perl-XML-NamespaceSupport-1.09-1.2.1.noarch.rpm
perl-Digest-HMAC-1.01-15.noarch.rpm
perl-5.8.8-10.el5_0.2.i386.rpm
或使用源码进行安装,
下面以源码安装进行配置
[root@mxl] tar -zxvf libnet.tar.gz
   cd libnet
./configure
Make
Make install
 
[root@mxl]tar -zxvf heartbeat-2.1.3.tar.gz
./ConfigureMe configure --enable-mgmt --with-ccmuser-name=hacluster
Make
Make install
#--enable-mgmt 表示支持图形管理工具
配置HA需要三个文件:ha.cf      haresources       authkeys     
默认/etc/ha.d 下没有这三个文件,我们需要找到这三个文件然后,拷贝到其目录下
[root@mxl heartbeat-2.1.3]# pwd
/usr/share/doc/heartbeat-2.1.3
[root@mxl heartbeat-2.1.3]# ls
apphbd.cf         faqntips.html        haresources         Requirements.html
authkeys          faqntips.txt         hb_report.html      Requirements.txt
AUTHORS           GettingStarted.html hb_report.txt       rsync.html
ChangeLog         GettingStarted.txt   heartbeat_api.html rsync.txt
COPYING           ha.cf                heartbeat_api.txt   startstop
COPYING.LGPL      HardwareGuide.html   logd.cf
DirectoryMap.txt HardwareGuide.txt    README
[root@mxl heartbeat-2.1.3]# cp ha.cf    authkeys    haresources   /etc/ha.d
 
以上的工作完成之后我们就需要对文件进行配置以实现双机的效果
 
 
  1. 配置hearbeat主文件ha.cf
#logfile         /var/log/ha-log      日志存放位置
#keepalive 2        指明心跳时间为秒
#deadtime 30       指定在30秒内没有心跳信号,会立即切换服务
#warntime 10         指明心跳延迟时间为10秒
#initdead 120     在某些配置下,重启后网络需要一些时间才能正常工作。这个单独的”deadtime”选项可以处理这种情况。它的取值至少应该为通常deadtime的两倍
#udpport         694     
使用端口694进行bcast和ucast通信。这是默认的,并且在IANA官方注册的端口号。
 
#baud   19200
波特率,串口通信的速度。
#bcast eth1            # Linux            表示在eth1接口上使用广播heartbeat(将eth1替换为eth0,eth2,或者您使用的任何接口)。
#auto_failback on        该选项是必须配置的。对于那些熟悉Tru64 Unix的人来说,heartbeat的工作方式类似于“favored member“模式。在failover之前,haresources文件中列出的主节点掌握所有的资源,之后从节点接管这些资源。当auto_failback设置为on时,一旦主节点重新恢复联机,将从从节点取回所有资源。若该选项设置为off,主节点便不能重新获得资源。该选项与废弃的nice_failback选项类似。如果要从一个nice_failback设置为off的集群升级到这个或更新的版本,需要特别注意一些事项以防止flash cut。
#node    ken3         该选项是必须配置的。集群中机器的主机名,与“uname –n”的输出相同。
#node   kathy
 
#ping 10.10.10.254
Ping 192.168.0.1 
    ping 可以使用 ipfail插件的用途是检测网络故障
a.选择好的候选ping节点
    这步很重要。你的选择越好,则得到的HA集群便越强壮。选择固定的交换机路由器等是一个好主意。不要选择HA集群中的任一个成员,也不要选择其他人的工作站。选择能反映您HA节点的连接状况的ping节点也很重要。如果您要监视两个接口的连接情况,明智的做法是为每个接口选择一个只对该接口可用的ping节点。
    b.设置auto_failback为on或者off
    只有当Heartbeat被配置为非legacy时ipfail才会起作用。在ha.cf文件中,如下将auto_failback设置为on或者off:
    auto_failback on
    或者
    auto_failback off
    c.配置ha.cf使之启动ipfail。
    向ha.cf中增加如下一行(假设您在编译时的PREFIX为/usr):
    respawn hacluster /usr/lib/heartbeat/ipfail
    d.向ha.cf中加入ping节点:
    ping pnode1 pnode2 pnodeN
    将pnode1,pnode2,…pnodeN等替换为您ping节点的IP地址。
    确保向集群中各个成员的ha.cf中加入以上相同的配置指令。
     e. 修改Heartbeat配置文件
 
    如果修改了配置文件etc/ha.d/ authkeys或者 /etc/ha.d/ha.cf后要使用下面的命令重新加载服务。
    #/etc/init.d/heartbeat reload
    或者
    #service heartbeat reload
#respawn userid /path/name/to/run
#respawn hacluster /usr/lib/heartbeat/ipfail
 
该选项是可选配置的:列出将要执行和监控的命令。例如:要执行ccm守护进程,则要添加如下的内容:
respawn hacluster /usr/lib/heartbeat/ccm
使得Heartbeat以userid(在本例中为hacluster)的身份来执行该进程并监视该进程的执行情况,如果其死亡便重启之。
对于ipfail,则应该是:respawn hacluster /usr/lib/heartbeat/ipfail
注意:如果结束进程的退出代码为100,则不会重启该进程。
 
  1. 配置[root@mxl ha.d]# vi authkeys 文件
#auth 1
#1 crc
#2 sha1 HI!
#3 md5 Hello!
 
需要配置的第三个文件authkeys决定了您的认证密钥。共有三种认证方式:crc,md5,和sha1。您可能会问:“我应该用哪个方法呢?”简而言之:如果您的Heartbeat运行于安全网络之上,如本例中的交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但您也希望降低CPU使用,则使用md5。最后,如果您想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。
    文件格式如下:
    auth <number>
    <number> <authmethod> [<authkey>]
    因此,对于sha1,示例的/etc/ha.d/authkeys可能是
    auth 1
1 sha1 key-for-sha1-any-text-you-want
1 md5 key-for-sha1-any-text-you-want
    对于md5,只要将上面内容中的sha1换成md5就可以了。 对于crc,可作如下配置:
    auth 2
    2 crc
    不论您在关键字auth后面指定的是什么索引值,在后面必须要作为键值再次出现。如果您指定“auth 4”,则在后面一定要有一行的内容为
配置完成后文件的权限设置(600)
[root@mxl ha.d]# chmod 600 authkeys
  1. 配置[root@mxl ha.d]# vi haresources 文件
#node-name resource1 resource2 ... resourceN
node mxl.com
#just.linux-ha.org      135.9.216.110 135.9.215.111 135.9.216.112 httpd
mxl.com                10.1.1.1 10.1.1.2 httpd smb
重启服务
把配置好的文件拷贝到其它的节点上即可