转自:http://tech.fuwuqi.com.cn/Servertn/Cluster/2009-11-27/5929972515824.shtml
在这种情况下,主节点 node1 将重新绑定集群 IP 地址,从节点 node2 释放该 IP 地址,并由主节点对外提供服务。在主节点启动 heartbeat 之后,集群 IP 地址的释放和绑定有一定的延迟。虽然有一定的延迟,但是集群 IP 地址的释放和绑定是同步进行的,使用 ping 命令可以发现集群 IP 地址一直处于可通状态,该过程并不影响双机系统的可用性。所以该过程仍然是一个无缝切换。
Linux的HA又称“双机热备”,是两台机器装上同样的系统,配好后通过“心跳线”互相监测,数据存放在共享阵列库中,当主服务器出现问题时,从服务器会接管主服务器上的所有服务,而当主服务器恢复正常后,从服务器再交出所有服务。这主要通过Linux系统下双机HA的配置来实现的。<?XML:NAMESPACE PREFIX = O />
下面我们介绍Heartbeat双机的做法
一、
软件及安装说明
我们使用的是Heartbeat <?XML:NAMESPACE PREFIX = ST1 />2.0.2版本,软件以及参考的文档都是来自网站:http://www.linux-ha.org/。通过安装该Linux-HA软件,可以实现Linux双机系统的高可用性解决方案,实现双机系统的热备份,并能够做到双机之间的无缝切换,从而对外提供稳定可靠的服务,最终实现系统高性能RAS(reliability, availability, and serviceability)。实现双机系统的两台主机不要求完全一致,但应该尽量做到硬件匹配。双机的连接可以使用串口线,也可以通过以太网Enthernet进行连接,还可以采用并存的多种连接方式实现两台主机的多重互连。两台主机应该安装相同的操作系统,推荐使用RHAS4 Linux。进行网络配置,为每一台主机分配一个固定IP地址,另外需要选择一个虚拟的IP地址作为集群IP(cluster IP),该IP是集群系统对外提供服务的接口。
注意:主机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 (用于心跳通讯) 。
其网络拓扑如下图所示:
![](http://news.fuwuqi.com.cn/uploadfile/2009/1127/20091127042053939.jpg)
二、软件的安装
1.对共享磁盘进行分区
先关闭节点2(node2.clusting.com)主机的电源,打开节点1(node1.clusting.com)主机的电源,在节点一上安装系统,并对共享磁盘分区。
2.
下载软件
首先下载heartbeat软件:到http://linux-ha.org/download 下载最新的heartbeat软件。本文写作时下载的软件是:heartbeat-2.0.2.tar.gz
3.下载和安装其它所需的软件
安装heartbeat除必要的编译器之外,需要下面两个软件的开发包支持:e2fsprogs和libnet。
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
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.cf,haresources,authkeys。使用命令 rpm -q heartbeat -d 或者 find / -name ha.cf 均可以找到上述三个配置文件,所在目录为:
/usr/share/doc/heartbeat-2.0.2。
/usr/share/doc/heartbeat-2.0.2。
下面依次对三个配置文件进行说明,此外用户还可以参考Linux-HA附带的安装文档以及配置文件自身的注释。
3.1 配置ha.cf文件
ha.cf是heartbeat的主要配置文件,可以对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:设置广播通信所使用的网络接口卡。
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的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
意思是:多播方式发送心跳信息,格式为mcast [设备] [多播组] [端口] [ttl] [loop]
auto_failback on:heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取资源并取代从节点,否则不取代从节点。
#stonith baytech /etc/ha.d/conf/stonith.baytech
用于共享资源的集群环境中,是否采用stonith防御技术来保证数据的一致性,格式为 stonith <设备类型> <配置文件>
ping ping-node1 ping-node2:指定ping node,ping node并不构成双机节点,它们仅仅用来测试网络连接。
respawn hacluster /usr/lib/heartbeat/ipfail:指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。
用于共享资源的集群环境中,是否采用stonith防御技术来保证数据的一致性,格式为 stonith <设备类型> <配置文件>
ping ping-node1 ping-node2:指定ping node,ping 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对外提供。
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
# node1.clusting.com 172.20.23.99 httpd
ha.cf文件中node选项设置的两个主机名分别为node1.clusting.com和node2.clusting.com,则根据上述配置,双机系统的主节点为node1.clusting.com,从节点为node2.clusting.com启动时获取集群IP(cluster 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的鉴权设置,共有三种可用的鉴权方式:crc、md5和sha1。三种方式安全性依次提高,但同时占用的系统资源也依次扩大。crc安全性最低,适用于物理上比较安全的网络,sha1提供最为有效的鉴权方式,占用的系统资源也最多。其配置语句格式如下:
auth <number>
<number> <authmethod> [<authkey>]
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目录下。
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.com和node2.clusting.com,修改方法:
#hostname node1.clusting.com
然后修改文件 /etc/sysconfig/network 中localhost.localdomain为node1.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此外还可以使用stop、restart、reload、status等控制参数。
注:在启动之前要停止httpd等依附于heartbeat软件的服务,也不要将他们设为开机自动启动;对挂载的共享存储也不要在/etc/fstab中添加使之开机自动挂载,heertbeat启动后会将这些都启动的。另为对依附于此软件的服务(如 httpd服务)的配置文件也要两个节点一模一样。
4.2
测试方案
下面描述一个简单的测试方案。我使用系统环境和软件配置如下:
两台主机的主机名和IP地址分别为:
node1.clusting.com(192.168.1.211)
node2.clusting.com(192.168.1.212)
下面描述一个简单的测试方案。我使用系统环境和软件配置如下:
两台主机的主机名和IP地址分别为:
node1.clusting.com(192.168.1.211)
node2.clusting.com(192.168.1.212)
则ha.cf文件中的node语句定义如下:
node node1.clusting.com
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 192.168.1.247 httpd Filesystem::/dev/sda1::/mnt/sda::ext3
该语句指定双机系统的主节点为node1.clusting.com,从节点为node2.clusting.com,集群IP(cluster 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-debug、ha-log。如果运行过程中产生了任何异常或错误消息,则应该根据上述信息进行检查和调试。
测试步骤如下:
1.
主节点启动heartbeat
在主节点node1.clusting.com上调用命令 /etc/init.d/heartbeat start 启动heartbeat。该主机将会自动绑定集群IP地址,在双机系统之外的第三台主机上使用ping命令检测集群IP地址192.168.1.247,直至该地址变为可用(根据硬件和网络性能的差异,主机绑定集群IP地址需要等待不同的时间)。
在主节点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.com的heartbeat。由于在两台主机同时启动heartbeat的情况下,应该由主节点来获取IP地址并对外提供服务,因而从节点heartbeat的启动并不对主节点产生影响。最终仍然由主节点绑定集群IP地址,http登陆的也是node1
使用相同的命令启动从节点node2.clusting.com的heartbeat。由于在两台主机同时启动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(可将node1和node2的index.html内容改一下以区别现在是那台机子在提供服务)。在这个过程中,使用ping命令进行不间断监测,可以发现集群IP地址192.168.1.247一直处于可通状态,并没有产生任何阻塞或延迟,所以,在关闭处于激活状态的heartbeat的情况下,双机系统可以实现无缝切换。但是在另外一些情况下,比如网络故障、主机关机或重启等,如果该主机的heartbeat处于激活状态,则不能实现双机的无缝切换,切换过程需要有一定的延迟,使用ping命令可以发现集群IP地址暂时无法使用。
4.
主节点再次启动
heartbeat在主节点上调用命令 /etc/init.d/heartbeat stop 关闭heartbeat。使用ifconfig命令可以发现,主节点node1已经释放了集群IP地址192.168.1.211,并由从节点node2绑定该IP地址。使用http网页浏览的也是node2(可将node1和node2的index.html内容改一下以区别现在是那台机子在提供服务)。在这个过程中,使用ping命令进行不间断监测,可以发现集群IP地址192.168.1.247一直处于可通状态,并没有产生任何阻塞或延迟,所以,在关闭处于激活状态的heartbeat的情况下,双机系统可以实现无缝切换。但是在另外一些情况下,比如网络故障、主机关机或重启等,如果该主机的heartbeat处于激活状态,则不能实现双机的无缝切换,切换过程需要有一定的延迟,使用ping命令可以发现集群IP地址暂时无法使用。
在这种情况下,主节点 node1 将重新绑定集群 IP 地址,从节点 node2 释放该 IP 地址,并由主节点对外提供服务。在主节点启动 heartbeat 之后,集群 IP 地址的释放和绑定有一定的延迟。虽然有一定的延迟,但是集群 IP 地址的释放和绑定是同步进行的,使用 ping 命令可以发现集群 IP 地址一直处于可通状态,该过程并不影响双机系统的可用性。所以该过程仍然是一个无缝切换。
0
收藏
转载于:https://blog.51cto.com/ddsc11/284277