1.2 高可用性集群的类型
从上面的工作方式出发,我们可以把集群分为下面几种(特别是两节点的集群):
主/主 (Active/active)
这是最常用的集群模型,它提供了高可用性,并且在只有一个节点在线时提供
可以接受的性能,该模型允许最大程度的利用硬件资源。每个节点都通过网络对客
户机提供资源,每个节点的容量被定义好,使得性能达到最优,并且每个节点都可
以在故障转移时临时接管另一个节点的工作。所有的服务在故障转移后仍保持可用,
但是性能通常都会下降。
主/从(Active/passive)
为了提供最大的可用性,以及对性能最小的影响,Active/passive 模型需要一个
在正常工作时处于备用状态,主节点处理客户机的请求,而备用节点处于空闲状态,
当主节点出现故障时,备用节点会接管主节点的工作,继续为客户机提供服务,并
且不会有任何性能上影响。

混合型(Hybrid)
混合是上面两种模型的结合,只针对关键应用进行故障转移,这样可以对这些
应用实现可用性的同时让非关键的应用在正常运作时也可以在服务器上运行。当出
现故障时,出现故障的服务器上的不太关键的应用就不可用了,但是那些关键应用
会转移到另一个可用的节点上,从而达到性能和容错两方面的平衡。
2. Heartbeat 配置实例
2.1 Linux Heartbeat 项目简介

Linux-HA(即heartbeat)项目在很多高可用性解决方案中广泛地使用。heartbeat
目前已经是SUSE Linux, Mandriva Linux, MSC Linux,Debian GNU/Linux, Ubuntu
Linux, Red Flag Linux 等发行版本的重要软件之一。虽然叫Linux-HA,但是该软
件在FreeBSD 和Solaris 系统也广泛使用。
heartbeat 的组件
对于一个高可用集群系统来说,它要提供一个完整的解决方案,需要下面这些
组件,heartbeat 也不例外:
? 成员管理服务
? 通讯服务

? 集群管理
? 资源(I/O)管理
? 资源监视
2.2 heartbeat 的体系结构
2.3 heartbeat 的配置实例
硬件条件和环境
两台计算机(两个节点),一个NFS共享(用于存储共享)。每个分别带有两块以太
网卡,(其中一块用于网络通讯,另一块用于心跳功能。)。两个节点的网络设置如下:
节 点 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 (用于心跳通
讯) 。
其网络拓扑如图5-1 所示:

注:此图使用的是ISCSI共享与本例只有存储共享的区别

 

 

目的
用 上面的硬件搭建一台高可用的web 服务器, 服务器的虚拟IP 地址为
192.168.100.10,netmask 为255.255.255.240。 web 服务器的页面数据存储到NFS挂载到本地的/mnt目录下

具体的配置步骤如下:
(1)挂载NFS共享(NFS具体安装配置此处略过)

  mount  NFS服务器ip:/share   /mnt

之后用df -Th查看是否已经挂上

注意:两台服务器都要挂载NFS,然后将两台服务器的apache网页目录调整到/mnt下


(2)下载软件并安装所需软件
首先下载heartbeat 软件:到http://linux-ha.org/download 下载最新的heartbeat
软件。本案例下载的软件是:heartbeat-2.1.2.tar.gz
安装heartbeat 除必要的编译器之外, 需要下面两几个软件的开发包支持:
pkgconfig、 glib2-devel、e2fsprogs 和libnet。
这些软件都可以通过yum安装

yum -y  install  pkgconfig glib2-devel  e2fsprogs libnet


如果需要使用图形配置工具,需要添加一个用户,用来登录到集群中:
groupadd -g 2000 haclient
useradd –u 2000 –g haclient hacluster

安装 heartbeat
tar -zxvf heartbeat-2.1.2.tar.gz
cd heartbeat-2.1.2

./ConfigureMe configure --prefix=/usr/local/heartbeat/ --enable-mgmt --with-ccmuser-name=hacluster


make
make install
注:其中“ --enable-mgmt”表示支持图形管理工具。
(3)配置heartbeat 的主要文件/etc/ha.d/ha.cf
需要的配置文件有三个:ha.cf、haresources、authkeys。这三个配置文件需要在
/etc/ha.d 目录下面,但是默认是没有这三个文件的,所以你要:
copy 存放路径/heartbeat-2.1.2/doc/ha.cf /etc/ha.d/
copy 存放路径/ heartbeat-2.1.2/doc/ haresources /etc/ha.d/
copy 存放路径/ heartbeat-2.1.2/doc/ authkeys /etc/ha.d/

然后对这些配置文件进行修改。
注意:如果使用的是2.0 的模式则资源配置文件为/var/lib/heartbeat/crm/cib.xml。
heartbeat 的主配置文件为:/etc/ha.d/ha.cf。我们需要配置该文件,针对我们前
面的规划,/etc/ha.d/ha.cf 文件的主要内容如下:

logfile /var/log/ha-log #指名heartbeat 的日志存放位置。
#crm yes #支持ClusterResourceManager(集群资源管理)功能。
如果启用该功能,则资源配置文件为/var/lib/heartbeat/crm/cib.xml
bcast eth1 #指明心跳方式使用以太广播方式,并且是在eth1 接口(10.0.0.1)
上进行广播。
keepalive 2 #指明心跳时间为2 秒(即每两秒钟在eth1 上发送一次
广播)。
warntime 10 #指明心跳延迟的时间为10 秒。当10 秒钟内备份机不
能联系上主机(当前活动的服务器,即无心跳信号),就会往日志中写入一个警告日
志,但此时不会切换服务。
deadtime 30 #指定在30 秒内没有心跳信号,则立即切换服务。
initdead 60 #在某些配置下,重启后网络需要一些时间才能正常工
作。这个单独的“deadtime” 选项可以处理这种情况。它的取值至少应该为通常
deadtime 的两倍。
udpport 694 #指定集群节点间的通讯端口
auto_failback on #当主节点恢复后,是否自动切回
node node1.clusting.com #集群中机器的主机名,与“uname –n”的输出相同。
node node2.clusting.com #
respawn hacluster /usr/lib/heartbeat/ccm #列出将要执行和监控的命令。
respawn hacluster /usr/lib/heartbeat/ipfail
ping ping1.clusting.com ping2.clusting.com #列出ping 节点。这些节点不是集群
节点。他们是用来为ipfail 等模块检查网络连接情况的。

(4)配置HA 资源 /etc/ha.d/haresources
当切换资源时应该切换哪些资源,例如IP、磁盘……等。在heartbeat 中,通过
/etc/ha.d/haresources 文件来配置共享的资源,在我们的案例中,/etc/ha.d/haresources
文件的主要内容如下:
#node1.clusting.com 192.168.100.10/28  Filesystem::/dev/sdb1::/ha::ext3 httpd

node1.clusting.com 192.168.100.10/28  httpd (本人设置时候没有加文件系统切换,因为我使用的是NFS挂载,共享的一个目录,所以不需要)


#设置node1.clusting.com 为主节点,集群服务器的ip 地址为192.168.100.10,
netmask 为255.255.255.240,集群的服务有httpd,还有共享磁盘/dev/sdb1。
该文件只有一行,其含义就是,当主节点node1.clusting.com 宕机时,自动启用
备用节点node2.clusting.com 来提供服务,在切换到node2.clusting.com 上时,自动
启动httpd 服务,同时,将/dev/sdb1 挂接到/ha。

(5)配置Authkeys
需要配置的第三个文件authkeys 决定了您的认证密钥。共有三种认证方式:crc,
md5,和sha1。您可能会问:“我应该用哪个方法呢?”简而言之:
如果您的Heartbeat 运行于安全网络之上,如本例中的交叉线,可以使用crc,
从资源的角度来看,这是代价最低的方法。如果网络并不安全,但您也希望降低CPU
使用,则使用md5。最后,如果您想得到最好的认证,而不考虑CPU 使用情况,则
使用sha1,它在三者之中最难破解。
/etc/ha.d/authkeys 文件的内容如下:
auth 1
1 sha1 HI
“auth 1”代表使用的索引。不论您在关键字auth 后面指定的是什么索引值,
在后面必须要作为键值再次出现。如果您指定“auth 4”,则在后面一定要有一行的
内容为“4 <signaturetype> <authstring>”。
“HI”是要用来生成sha1 密码的明文字符。但是各个节点指定的相同索引的字符要相同。
更改文件的权限:
chmod 600 /etc/ha.d/authkeys

(6)使用同样的方法配置节点2
在节点2(node2.clusting.com)上执行步骤3-6(当然同样必须先安装heartbeat所需要的软件),节点2 上的heartbeat 和apache 的配置与节点1 要完全相同。

此时已经配置完成,接下来进行测试:

(7)测试
在主节点(node1.clusting.com)上启动heartbeat 服务:/etc/init.d/heartbeat start。
如果不出现错误,web 服务应该被heartbeat 启动,同时heartbeat 为主节点设置IP
地址192.168.100.10。使用ifconfig eth0:0 可以看到如下信息:
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D8:FD:EB
inet addr:192.168.100.10 Bcast:192.168.100.15 Mask:255.255.255.240
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14970 errors:0 dropped:0 overruns:0 frame:0
TX packets:14977 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:3624073 (3.4 Mb) TX bytes:3626223 (3.4 Mb)
Interrupt:19 Base address:0x10a0
同时/dev/sdb1,应该被挂接。使用df -h,可以看到的信息包含下面的行:
/dev/sdb1 485M 8.1M 452M 2% /ha
在 node2(node2.clusting.com)上启动heartbeat:/etc/init.d/heartbeat start。使用
ifconfig eth0:0 可以看到如下信息:

eth0:0 Link encap:Ethernet HWaddr 00:0C:29:E4:1E:F7
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:19 Base address:0x10a0
表明现在node2 节点没有被启用。
使用 df -h,看到的信息不包含下面的行:
/dev/sdb1 485M 8.1M 452M 2% /ha
表明/dev/sdb1 没有被加载。
直接关闭节点1 的电源(模拟故障)。 30 秒后(deadtime 指定的时间),在节点
2 (node2.clusting.com) 上执行ifconfig eth0:0, 可以看到eth0:0 已经被设置为
192.168.100.10

2.4 V2 版本的资源配置方法
前面已经介绍,如果在主要配置文件ha.cf 中启用了crm 功能,那么集群的资源
配置文件默认是/var/lib/heartbeat/crm/cib.xml 文件,它是使用XML 结构的配置文件。