摘要:Linux的HA又称“双机热备”,是两台机器装上同样的系统,配好后通过“心跳线”互相监测,数据存放在共享阵列库中,当主服务器出现问题时,从服务器会接管主服务器上的所有服务,
转自:http://tech.fuwuqi.com.cn/Servertn/Cluster/2009-11-27/5929972515824.shtml
LinuxHA又称双机热备,是两台机器装上同样的系统,配好后通过心跳线互相监测,数据存放在共享阵列库中,当主服务器出现问题时,从服务器会接管主服务器上的所有服务,而当主服务器恢复正常后,从服务器再交出所有服务。这主要通过Linux系统下双机HA的配置来实现的。<?XML:NAMESPACE PREFIX = O />

下面我们介绍Heartbeat双机的做法

一、             软件及安装说明

我们使用的是Heartbeat <?XML:NAMESPACE PREFIX = ST1 />2.0.2版本,软件以及参考的文档都是来自网站:http://www.linux-ha.org/。通过安装该Linux-HA软件,可以实现Linux双机系统的高可用性解决方案,实现双机系统的热备份,并能够做到双机之间的无缝切换,从而对外提供稳定可靠的服务,最终实现系统高性能RASreliability, availability, and serviceability)。实现双机系统的两台主机不要求完全一致,但应该尽量做到硬件匹配。双机的连接可以使用串口线,也可以通过以太网Enthernet进行连接,还可以采用并存的多种连接方式实现两台主机的多重互连。两台主机应该安装相同的操作系统,推荐使用RHAS4 Linux。进行网络配置,为每一台主机分配一个固定IP地址,另外需要选择一个虚拟的IP地址作为集群IPcluster IP),该IP是集群系统对外提供服务的接口。
注意:主机IP地址与集群IP地址一定不能重复。

硬件条件和环境:

两台计算机(两个节点),一个共享SCSI硬盘盒(用于存储共享)。每个节点都安装支持共享总线的SCSI卡;每个节点有自己的系统磁盘;每个分别带有两块以太网卡,(其中一块用于网络通讯,另一块用于心跳功能。)。两个节点的网络设置如下:

节点1: 主机名为:node1.clusting.com,第一块网卡(eth0)IP地址:192.168.100.7 (用于网络通讯) 。第二块网卡(eth1)IP地址:10.0.0.1 (用于心跳通讯)

节点2: 主机名为:node2.clusting.com,第一块网卡(eth0)IP地址:192.168.100.8 (用于网络通讯) 。第二块网卡(eth1)IP地址:10.0.0.2 (用于心跳通讯)

其网络拓扑如下图所示:
二、软件的安装

1.对共享磁盘进行分区

先关闭节点2node2.clusting.com)主机的电源,打开节点1node1.clusting.com)主机的电源,在节点一上安装系统,并对共享磁盘分区。

2.  下载软件

首先下载heartbeat软件:到http://linux-ha.org/download 下载最新的heartbeat软件。本文写作时下载的软件是:heartbeat-2.0.2.tar.gz

3.下载和安装其它所需的软件

安装heartbeat除必要的编译器之外,需要下面两个软件的开发包支持:e2fsprogslibnet

e2fsprogs可以从系统的安装光盘使用rpm来安装: rpm -ivh /mnt/cdrom/RedHat/RPMS/e2fsprogs-devel-1.32-6.i386.rpm

libnet只能下载源代码进行安装。下载地址:http://www.packetfactory.net/libnet/。我下载的稳定版本是:1.1.2.1

接下来就是安装libnet:
tar -zxvf libnet.tar.gz
cd libnet
./configure
make
make install

4.安装heartbeat

tar -zxvf heartbeat-2.0.2.tar.gz

cd heartbeat-2.0.2

./ConfigureMe configure

make

make install

三、软件的配置

Heartbeat 软件的安装目录为/etc/ha.d,其中的README.config对配置文件进行了说明,共有三个主要的配置文件:ha.cfharesourcesauthkeys。使用命令 rpm -q heartbeat -d  或者  find / -name ha.cf  均可以找到上述三个配置文件,所在目录为:
/usr/share/doc/heartbeat-2.0.2

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

3.1 配置ha.cf文件

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

debugfile /var/log/ha-debug :该文件保存heartbeat的调试信息
logfile /var/log/ha-log
heartbeat的日志文件
keepalive 2
:心跳的时间间隔,默认时间单位为秒
deadtime 30
:超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 10
:超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead 120
:在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。
udpport 694
:设置广播通信使用的端口,694为默认使用的端口号。
baud 19200
:设置串行通信的波特率。
serial /dev/ttyS0
:选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。
bcast eth0
:设置广播通信所使用的网络接口卡。

注意:ucast eth0 x.x.x.2      #指定通信设备与目标地址,此处也可以使用ucast,也可以使用mcast eth0 225.0.0.1 694 1 0
意思是:多播方式发送心跳信息,格式为mcast [设备] [多播组] [端口]
[ttl] [loop]
auto_failback on
heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。

#stonith baytech /etc/ha.d/conf/stonith.baytech
用于共享资源的集群环境中,是否采用stonith防御技术来保证数据的一致性,格式为 stonith <设备类型> <配置文件>
ping ping-node1 ping-node2
:指定ping nodeping node并不构成双机节点,它们仅仅用来测试网络连接。

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

    下面是本次测试中ha.cf的配置文件内容:

debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility     local0

keepalive 2

deadtime 30

warntime 10

initdead 120

udpport 694

baud    19200

serial  /dev/ttyS0  # Linux

keepalive 2

auto_failback on

node node1.clusting.com

node node2.clusting.com

respawn hacluster /usr/lib/heartbeat/ccm

respawn hacluster /usr/lib/heartbeat/ipfail

apiauth ipfail uid=hacluster

apiauth ccm uid=hacluster

apiauth cms uid=hacluster

apiauth ping gid=haclient uid=hacluster

apiauth default gid=haclient

3.2 配置haresources文件

haresources 文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务、挂载的功相存储等。其配置语句格式如下:
node-name  network-config  <resource-group>
其中node-name指定双机系统的主节点,取值必须匹配ha.cf文件中node选项设置的主机名中的一个,node选项设置的另一个主机名成为从节点。network-config用于网络设置,包括指定集群IP、子网掩码、广播地址等。resource-group
于设置heartbeat启动的服务,该服务最终由双机系统通过集群IP对外提供。

下面举例对配置方法进行说明
# node1.clusting.com 172.20.23.99 httpd

 ha.cf文件中node选项设置的两个主机名分别为node1.clusting.comnode2.clusting.com,则根据上述配置,双机系统的主节点为node1.clusting.com,从节点为node2.clusting.com启动时获取集群IPcluster IP)为192.168.1.247为该IP成为heartbeat对外提供服务的网络地址。

注意:两台主机的haresources文件设置必须完全一致。

下面是本次测试中的haresources配置文件内容:

node1.clusting.com 192.168.1.247 httpd Filesystem::/dev/sda1::/mnt/sda::ext3

注: /dev/sda5 是在之前对共享存储所做的分区,/mnt/sda是服务启动是要挂载的目录

3.3 配置authkeys文件

authkeys 文件用于heartbeat的鉴权设置,共有三种可用的鉴权方式:crcmd5sha1。三种方式安全性依次提高,但同时占用的系统资源也依次扩大。crc安全性最低,适用于物理上比较安全的网络,sha1提供最为有效的鉴权方式,占用的系统资源也最多。其配置语句格式如下:
auth <number>
<number> <authmethod> [<authkey>]

举例说明:
auth 1
1 sha1 key-for-sha1
其中键值key-for-sha1可以任意指定,number设置必须保证上下一致。
auth 2
2 crc
crc
方式不需要指定键值。
最后,该authkeys文件的文件许可权应该设为600(即-rw-------),命令为:
     chmod 600 authkeys
注意:上述三个配置文件设置完毕后,应该复制到/etc/ha.d目录下。

下面是本次测试中authkeys配置文件中的内容

auth 1

1 crc

最后,将每台主机的主机名称改过来,改成与ha.cf配置文件中指定的那个主机名,如本测试中两台主机名分别是:node1.clusting.comnode2.clusting.com,修改方法:

#hostname node1.clusting.com

然后修改文件 /etc/sysconfig/network localhost.localdomainnode1.clusting.com

创建ha.cf中用到的用户及所在用户组,如本次测试中的用户hacluster,组:haclient。方法是:

#groupadd haclient

#useradd hacluster –g haclient

四、运行与测试

4.1 启动heartbeat

heartbeat安装完成后,自动在/etc/init.d/目录下生成启动脚本heartbeat,启动heartbeat可以使用命令 # /etc/init.d/heartbeat start此外还可以使用stoprestartreloadstatus等控制参数。

注:在启动之前要停止httpd等依附于heartbeat软件的服务,也不要将他们设为开机自动启动;对挂载的共享存储也不要在/etc/fstab中添加使之开机自动挂载,heertbeat启动后会将这些都启动的。另为对依附于此软件的服务(如 httpd服务)的配置文件也要两个节点一模一样。

4.2 测试方案
下面描述一个简单的测试方案。我使用系统环境和软件配置如下:
两台主机的主机名和IP地址分别为:  
node1.clusting.com(192.168.1.211)   
node2.clusting.com(192.168.1.212)

ha.cf文件中的node语句定义如下:
node node1.clusting.com

node node2.clusting.com

haresources 文件定义如下:
node1.clusting.com 192.168.1.247 httpd Filesystem::/dev/sda1::/mnt/sda::ext3

该语句指定双机系统的主节点为node1.clusting.com,从节点为node2.clusting.com,集群IPcluster IP)为192.168.1.247,本测试方案指定heartbeat启动的服务是httpd,并指定挂载共享存储:/dev/sda1,仅通过RS232串口线来检测双机系统的可用性。任何一台主机在启动heartbeat后,可以使用命令 ps -ef | grep heartbeat 来查看heartbeat的进程状态,可以使用ifconfig eth0:0命令确认当前主机是否已经绑定了cluster IP,此外还可以在/var/log/目录下查看heartbeat的日志文件 ha-debugha-log。如果运行过程中产生了任何异常或错误消息,则应该根据上述信息进行检查和调试。

测试步骤如下:

1.  主节点启动heartbeat
在主节点node1.clusting.com上调用命令 /etc/init.d/heartbeat start 启动heartbeat。该主机将会自动绑定集群IP地址,在双机系统之外的第三台主机上使用ping命令检测集群IP地址192.168.1.247,直至该地址变为可用(根据硬件和网络性能的差异,主机绑定集群IP地址需要等待不同的时间)。

在主节点上使用ifconfig eth0:0命令查看该主机的网络配置,显示主节点已经绑定了集群IP地址192.168.1.247。说明启动已经成功。在第三方主机上打开浏览器,输入http://192.168.1.211后会看到测试网页。

2.  从节点启动heartbeat
使用相同的命令启动从节点node2.clusting.comheartbeat。由于在两台主机同时启动heartbeat的情况下,应该由主节点来获取IP地址并对外提供服务,因而从节点heartbeat的启动并不对主节点产生影响。最终仍然由主节点绑定集群IP地址,http登陆的也是node1

3.  主节点关闭heartbeat
在主节点上调用命令 /etc/init.d/heartbeat stop 关闭heartbeat。使用ifconfig命令可以发现,主节点node1已经释放了集群IP地址192.168.1.211,并由从节点node2绑定该IP地址。使用http网页浏览的也是node2(可将node1node2index.html内容改一下以区别现在是那台机子在提供服务)。在这个过程中,使用ping命令进行不间断监测,可以发现集群IP地址192.168.1.247一直处于可通状态,并没有产生任何阻塞或延迟,所以,在关闭处于激活状态的heartbeat的情况下,双机系统可以实现无缝切换。但是在另外一些情况下,比如网络故障、主机关机或重启等,如果该主机的heartbeat处于激活状态,则不能实现双机的无缝切换,切换过程需要有一定的延迟,使用ping命令可以发现集群IP地址暂时无法使用。

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

0

收藏

ddsc11

6篇文章,1W+人气,0粉丝