天天看点

Linux 系统下双机HA的实现

                           ————基于heartbeat方式

实验环境为两台虚拟机作为HA主备节点,第三台虚拟机作为客户端。具体网络网卡参数配置见拓扑图。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871207dLEh.jpg"></a>

一、搭建实验环境

1、设置主节点服务器主机名为:node1.example.com eth0网卡地址为:192.168.0.43 eth1网卡地址地址为:192.168.10.43

设置备用节点服务器主机名为:node2.example.com eth0网卡地址为:192.168.0.45 eth1网卡地址为:192.168.10.45

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871209wdEF.jpg"></a>

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871212ykFf.jpg"></a>

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871217iXjR.jpg"></a>

客户端IP地址为192.168.0.42

2、在主节点服务器上开启web服务,并验证web服务是否可以成功访问。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871220lYX0.jpg"></a>

验证成功后,关闭web服务。为了试验的顺利进行,这里将web服务设置为开机不启动。

关闭httpd服务的目的是为了验证后面客户端访问服务器时,web服务的开启是受heartbeat控制的,而不是人为开启的web服务。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871221QHn2.jpg"></a>

在双机HA功能下,主备节点要通过heartbeat信息来保持联系,为了实现主备节点的heartbeat功能,需要安装额外的软件包。但是Redhat默认并没有安装这些软件包,这就需要到对应官方网站上去下载对应的软件包。需要安装的软件包有六个,分别是:

libnet-1.1.4-3.el5.i386.rpm

perl-MailTools-1.77-1.el5.noarch.rpm

heartbeat-pils-2.1.4-10.el5.i386.rpm

heartbeat-stonith-2.1.4-10.el5.i386.rpm

heartbeat-gui-2.1.4-10.el5.i386.rpm

heartbeat-ldirectord-2.1.4-10.el5.i386.rpm

heartbeat-devel-2.1.4-10.el5.i386.rpm

heartbeat-2.1.4-10.el5.i386.rpm

安装上面六个软件包,会出现依赖关系,提示依赖下面的软件包(这些包在Redhat光盘文件中),因此为了方便安装这些软件包,建议建立本地yum库,如此以来就可以解决软件安装时出现的很多包依赖关系。

perl-Compress-Zlib

perl-HTML-Parser

perl-HTML-Tagset

perl-URI

perl-libwww-perl

perl-MailTools

perl-TimeDate

perl-String-CRC32

net-snmp-libs

把要安装的软件包复制到根目录下。然后通过本地yum库进行上述软件包的安装。由于上述软件包都是以.rpm结尾的,所以这里就使用*通配所有软件包。命令为:

yum –nongpgcheck localinstall *.rpm

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871223eN3Q.jpg"></a>

安装完成后,再来确认一下安装了所有的软件包。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871225NsIW.jpg"></a>

二、 软件的配置 

Heartbeat软件的安装目录为/etc/ha.d,其中的README.config对配置文件进行了说明,共有三个主要的配置文件:ha.cf,haresources,authkeys。切换到/etc/ha.d目录下,却发现并没有这三个主要的配置文件。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871227pqfH.jpg"></a>

那么这三个主要的配置文件在那里呢?可以切换到/usr/share/doc/heartbeat-2.1.4/目录下查看一下是否有这三个主要的配置文件。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871229yiu7.jpg"></a>

将上述的三个主要的配置文件复制到/etc/ha.d/目录下。哈哈,三个主要配置的配置文件

出来了吧?

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871232iRno.jpg"></a>

下面依次对三个配置文件进行说明,此外还可以参考Linux-HA附带的安装文档以及配置文件自身的注释。

2.1配置authkeys文件 

authkeys文件用于heartbeat的鉴权设置,共有三种可用的鉴权方式:crc、md5和sha1。三种方式安全性依次提高,但同时占用的系统资源也依次扩大。crc安全性最低,适用于物理上比较安全的网络,sha1提供最为有效的鉴权方式,占用的系统资源也最多。

其配置语句格式如下: 

auth &lt;number&gt; 

&lt;number&gt; &lt;authmethod&gt; [&lt;authkey&gt;] 

举例说明: 

auth 1 

1 sha1 key-for-sha1 

其中键值key-for-sha1可以任意指定,number设置必须保证上下一致。 

auth 2 

2 crc 

crc方式不需要指定键值。

还是先来看一下authkeys文件的内容吧?文件前面的内容可以直接忽略过去,需要修改的行数并不是很多。主要在最后面。可以看到这四行都默认被注释掉了。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871233Cf9D.jpg"></a>

修改的方法有很多的,最简单直接打开注释就行了,然后保存退出;也可以使用echo命令将要设定的值导入到该文件中;或者使用ssl加密并导入到该文件之中。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871234F68J.jpg"></a>

这里使用后两种来验证一下,打开文件,可以看到两种方式都将数据导入到文件中了。在试验过程中,为了节省时间,可以选用非加密传输方式。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871236S35J.jpg"></a>

为了文件的安全性,我们要设定该文件的权限为600,修改完成后,要记得查看是否修改成功。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871238d8rm.jpg"></a>

2、2配置ha.cf文件 

ha.cf是heartbeat的主要配置文件,可以对heartbeat的多数性能和状态进行配置。大部分选项的取值可以采用默认值,其中的主要选项及配置方法说明如下: 

debugfile /var/log/ha-debug:该文件保存heartbeat的调试信息 

logfile /var/log/ha-log:heartbeat的日志文件 

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871241tarm.jpg"></a>

keepalive 2:心跳的时间间隔,默认时间单位为秒

deadtime 30:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。 

warntime 10:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871244zEd5.jpg"></a>

initdead 120:在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。 

udpport 694:设置广播通信使用的端口,694为默认使用的端口号。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871247f7Py.jpg"></a>

bcast eth1:设置广播通信所使用的网络接口卡。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871249YNjJ.jpg"></a>

auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712512A0t.jpg"></a>

node 定义集群主机的节点号名称

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871253nlvE.jpg"></a>

另外还有一些设置,由于对实验作用不是很大,这里就不进行配置了。

baud 19200:设置串行通信的波特率。 

serial /dev/ttyS0:选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。 

ping ping-node1 ping-node2:指定ping node,ping node并不构成双机节点,它们仅仅用来测试网络连接。 

respawn hacluster /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。

2、3 配置haresources文件 

haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等。其配置语句格式如下: 

node-name network-config &lt;resource-group&gt; 

其中node-name指定双机系统的主节点,取值必须匹配ha.cf文件中node选项设置的主机名中的一个,node选项设置的另一个主机名成为从节点。 

network-config用于网络设置,包括指定集群IP、子网掩码、广播地址等。resource-group用于设置heartbeat启动的服务,该服务最终由双机系统通过集群IP对外提供。

指定主节点服务器为node1.example.com 对外宣称的IP地址为192.168.0.140的服务器提供web服务。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871255HbFu.jpg"></a>

最后,别忘记修改/etc/hosts文件,保证主备节点服务器之间知道对方的IP地址,保证彼此可以正常通信。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871258mWkp.jpg"></a>

由于备用节点服务器的配置和主节点服务器的配置基本相同,只有主机名和IP地址不同,这里就省略配置备节点服务器的配置步骤了。

三、实验的验证

当主备节点都配置完成后,要启动主备节点的heartbeat服务,然后就可以到客户端来验证测试实验成功与否了。有点激动啊!呵呵^_^,如图所示,实验配置是成功的。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871260JQSV.jpg"></a>

再来到主节点服务器上,查看一下主节点服务器IP地址的变化吧!可以发现,对外宣称的VIP地址绑定在了主节点服务器上的eth0网卡上。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871265FhIP.jpg"></a>

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712680Ff5.jpg"></a>

此时,假设由于某些意外原因(手动停止主节点服务器的heartbeat服务),主节点服务器突然宕机了。再来刷新客户端的浏览器,会发现主页内容变成了备节点服务器(这里为了区分客户端访问的是不同的服务器,主备节点服务器的网页内容不同)。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712701PXp.jpg"></a>

切换来到备节点服务器上,查看一下备节点服务器IP地址的变化可以发现,对外宣称的VIP地址绑定在了备节点服务器上的eth0网卡上。

由此就可以说明双机系统可以实现无缝切换。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712740O8T.jpg"></a>

主节点再次启动heartbeat 

在这种情况下,主节点将重新绑定VIP地址,备节点web释放该IP地址,并由主节点对外提供服务。在主节点启动heartbeat之后,集群IP地址的释放和绑定有一定的延迟。虽然有一定的延迟,但是集群IP地址的释放和绑定是同步进行的,使用ping命令可以发现集群IP地址一直处于可通状态,该过程并不影响双机系统的可用性。所以该过程仍然是一个无缝切换。

为了验证主备节点服务器之间的连通性,可以使用tcpump –i eth1 udp port 694

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712780lTK.jpg"></a>

本文转自 linuxtro 51CTO博客,原文链接:http://blog.51cto.com/linuxtro/284869,如需转载请自行联系原作者

继续阅读