You are on page 1of 19

中国科学院西安网络中心 中科红旗 linux 培训认证中心

高可用性 简介
一、什么是高可用性
计 算 机 系 统 的 可 用 性 (availability) 是 通 过 系 统 的 可 靠 性 (reliability) 和 可 维 护 性
(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用
平均维修时间(MTTR)来度量系统的可维护性。
于是可用性被定义为:MTTF/(MTTF+MTTR)*100%

业界根据可用性把计算机系统分为如下几类:

可用比例 年停机时间
可用性分类
(Percent Availability) (downtime/year)

99.5 3.7 天 常规系统(Conventional)

99.9 8.8 小时 可用系统(Available)

99.99 52.6 分钟 高可用系统(Highly Available)

99.999 5.3 分钟 Fault Resilient

99.9999 32 秒 Fault Tolerant

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

为了实现集群系统的高可用性,提高系统的高可性,需要在集群中建立冗余机制。
一 个 功 能 全 面 的 集 群 机 构 如 下 图 所 示

负载均衡服务器的高可用性

为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行
High Availability 监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。
当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务 IP 并继续提供
服务;当备份管理器又从主管理器收到“I am alive”这样的信息是,它就释放服务 IP 地址,
这样的主管理器就会开始再次进行集群管理的工作了。为了在主服务器失效的情况下系统
能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,保持二者
系统的基本一致。
Ha 的容错备援运作过程

自动侦测(Auto-Detect)阶段 由主机上的软件通过冗余侦测线,经由复杂的监听程序。
逻辑判断,来相互侦测对方运行的情况,所检查的项目有:
主机硬件(CPU 和周边...)
主机网络
主机操作系统
数据库引擎及其它应用程序
主机与磁盘阵列连线

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

为确保侦测的正确性,而防止错误的判断,可设定安全侦测时间,包括侦测时间间隔,
侦测次数以调整安全系数,并且由主机的冗余通信连线,将所汇集的讯息记录下来,以供
维护参考。
自动切换 (Auto-Switch)阶段 某一主机如果确认对方故障,则正常主机除继续进行原来的
任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续程序及服务。

自动恢复 (Auto-Recovery)阶段 在正常主机代替故障主机工作后,故障主机可离线进行修


复工作。在故障主机修复后,透过冗余通讯线与原正常主机连线,自动切换回修复完成的
主机上。整个回复过程完成由 EDI-HA 自动完成,亦可依据预先配置,选择回复动作为半
自动或不回复。

HA 三种工作方式:

1、 主从方式 (非对称方式)
工作原理:主机工作,备机处于监控准备状况;当主机宕机时,备机接管主机的一切
工作,待主机恢复正常后,按使用者的设定以自动或手动方式将服务切换到主机上运
行,数据的一致性通过共享存储系统解决。

2、 双机双工方式(互备互援)
工作原理:两台主机同时运行各自的服务工作且相互监测情况,当任一台主机宕机时,
另一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在
共享存储系统中。

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

3、 集群工作方式(多服务器互备方式)
工作原理:多台主机一起工作,各自运行一个或几个服务,各为服务定义一个或多个
备用主机,当某个主机故障时,运行在其上的服务就可以被其它主机接管。

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

案例的具体操作

一、硬件环境:
含 RedHat Advanced Server 3.0、双网卡主机两台
分别是 linux1、linux2
10.0.0.155 linux1 /* 外网 */
192.168.123.1 linux1 /* 心跳线地址 */
10.0.0.156 linux2 /* 外网 */
192.168.123.2 linux2 /* 心跳线地址 */
10.0.0.157 linux1、linux2 /* 分配服务用,主机不用配 */
注: 修改 linux1 系统的/etc/hosts 文件,内容不包括 10.0.0.157 地址
两机在做系统时需注意,系统分区的合理是衡量集群能否成功的标准。我们在分区时,
最好把/boot、/home、/var 分出来。

二、配置共享磁盘
在 linux1 上:
#fdisk /dev/hda //注:使用 parted 也可以
将添加的共享磁盘,分为两个区:hda1 和 hda2,各 500M 大小
在两台服务器上分别编辑/etc/sysconfig/rawdevices 文件,将分区绑定到裸设备:
#vi /etc/sysconfig/rawdevices
加入
/dev/raw/raw1 /dev/hda1
/dev/raw/raw2 /dev/hda2
重启服务
#service rawdevices restart
启动完成后,执行#raw –qa,会显示以下内容
/dev/raw/raw1: bound to major 8, minor 17
/dev/raw/raw2: bound to major 8, minor 18
格式化共享磁盘,每个块大小为4K (如果是真实环境,必须重启再进行格式化)
mkfs.ext3 -j -b 4096 /dev/hda5
mkfs.ext3 -j -b 4096 /dev/hda6
注:使用-b 选项将磁盘区块设置为4K,过小的区块会导致磁盘检查的时候耗费
过多的时间。

然后在 linux2 里修改/etc/sysconfig/rawdevices 同上,然后重新启动 rawdevices 服务,


用 raw –qa 命令检查系统
至此,硬件准备工作完成。

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

三、安装并配置基本的 HA 系统
在 这 里 我 们 只 将 AS3.0 自 带 的 CLUSTER 服 务 配 置 好 , 涉 及 到 具 体 的
http,ftp,mysql,oracle 的HA服务会在下一部分介绍。
1、安装确认系统内安装了 AS3.0 的 HA 软件包
我们在这里要用到的软件包主要有两个,clumanager 和 redhat-config-cluster
请用 rpm –q 命令检查系统是否安装这两个软件包。
2、如果没有安装可以通过以下方法安装
使用 ISO 或光盘,AS3.0 共有十一张光盘,我们平时常用的只有前四张,另外三张
为源代码光盘,最后有四张扩展光盘,其中扩展光盘的第三张包含有集群软件,还包括
了 IPVS 等软件,从光盘上安装,如下图

或者通过从以下网络服务器上下载到这两个软件包,并进行安装,如:
ftp://159.226.139.234/software/service/ha/
rpm --Uvh clumanager-<version>.<arch>.rpm
rpm --Uvh redhat-config-cluster-<version>.noarch.rpm

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

注:网络上比较多的是 src 软件包,下载下来以后需要使用 rpmbuild 命令进行重新编


译,然后再安装。
3、开始基本的HA配置
在 linux1 系统上,启动 xwindows,我这里是 kde,开始运行配置工具
选择左下角图标 => 系统设置 =>服务器设置 => Cluster
(或者在命令行里运行#redhat-config-cluster) 出现以下画面(都是引用七月飞雪的)

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

下一步操作,点菜单栏里的群集->配置

出现下图所示:

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

在 Cluster Name 处可以更改你设置集群的名字,在这里我设置为 test_cluster


然后我们开始添加集群内的成员,点菜单栏->新建 如下图所示

(注:此时保证列表处选中 Members,才可以出现下面内容)
将两台机器 Ip 都填写进去,如下图:

在这里选中菜单栏里的 cluster->shared state,可以查看裸设备设置,如下图:

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

点击确定继续
然后打开菜单栏 cluster..daemon properties 出现以下窗口:

这个窗口就是集群的配置窗口,详细的说明请查看 redhat 的官方文档


有一个说明的就是中间的那个滑动条,就是配置服务器探测等待 15 秒,我们不能设
的太小,这里我们就默认使用 15 秒
在 clumembd 这个窗口里选中 Enable Broadcast Heartbeating 然后点确定,这时候会弹
出一个窗口提示

因为我们配置的就是双节点的 HA,所以不用管它,直接点确定
然后在 cluster configuration 选择保存后退出此窗口

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

在菜单栏 群集..启动本地群集守护进程,稍等一会儿,就会出现以下状态:

这里就显示在 linux1 上的 cluster 配置成功


然 后 我 们 就 要 配 置 linux2 了 , 配 置 linux2 其 实 很 简 单 , 将 linux1 系 统 下 /
etc/cluster.xml 文件 COPY 到 linux2 的/etc/目录下就可以了。
//注:cluster.xml 是在安装完两个软件包的时候不会产生,它是在第一次运行
redhat-config-cluster 命令的时候产生的,和 AS2.1 里的 cluster.conf 储存内
容相同,只不过换了格式而已。这就是集群主要的配置文件,一定要确保集群上
每个节点的此文件都是相同的,另外在 redhat 的官方文档上强烈警告用户:不要
去手动的修改这个 xml 文件//
将此文件 copy 上 linux2 以后,在 linux2 命令行里执行
#service clumanager start
系统显示执行成功,再稍等一会儿,你就会发现在 linux1 上出现了变化,如下图

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

启动关闭集群服务的命令是 service clumanager start | stop


{注:如果你在配置完成以后不想用图形界面监控节点运行,在 shell 里运行
#clustat –i 10 / / 状态监控,每 10 秒中刷新一次。 出现如下结果:
Cluster Status -test_cluster
13:57:22
Cluster Quorum Incarnation #1
Shared State: Shared Raw Device Driver v1.2
Member Status
------------------ ----------
10.0.0.155 Active <-- You are here
10.0.0.156 A ctive
Service Status Owner (Last) Last Transition Chk Restarts
-------------- -------- ---------------- --------------- --- --------

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

这样,一个没有包含任何服务的“裸”的集群系统就配置成功了,因为它没有包含任何应
用,也没有什么意义,下一步我们就在上面配置一个大家最常用的 http 服务来测试一下。

四、举例说明:配置 HTTP Server 的 HA 服务


1、给 http 服务增加共享磁盘 //就是我们/var 分区所在磁盘。如我的是 hda3 磁盘上将存
储两个系统上 apache 共用的程序文件,也就是说,把 apache 的 DocumnetRoot 放到这个共
享磁盘上,创建方法同创建裸设备时一样,请注意,这个共享磁盘的作用不同于上面的裸
设备。
2、创建共享磁盘加载点,配置两台机器上的 http 服务:
a、启动两台机器,我这里新添加分区为 hda7,我以 ext3 格式将其格式化,在每个机器
的根目录下创建文件夹 www,为 apache 的 web 目录,同时将创建的 hdc7 分区加载到/www
目录下 #mkdir /www :
#mount /dev/hda7 /www
然后安装 apache,这就不用多说了吧,指出一点是,两台机器上的 apache 安装必须
完全一样,包括配置文件,安装完成后,修改 httpd.conf,将其根目录指向/www,我这
里是用的是 AS3.0 自带的 apache2.0 的 RPM 包。
b、或者就是直接用/var/www/html 所在区
在 linux1 上,进入/www/html 目录,在此目录下保存一个 index.html 作测试使用。
这样,两台机器上的 http 服务就完全配置完成。
3、配置基于此集群的 http 服务
在 linux1 的 xwindows,启动集群配置工具(参看上),增加名为 httpd 的服务如图

点菜单栏"新建"服务名为”httpd”,检测时间间隔设置为 4 秒,httpd 服务的启动脚本


就是 apache 的启动脚本,我这里使用的是 rpm 包默认安装的脚本/etc/rc.d/init.d/httpd

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

点"确定",就增加了一个服务如下图所示

如上图所示,选中 httpd 这个 service,单击菜单栏的”Add Child”,出现如下图

先给 httpd 服务增加共享设备 Add Device,设备点为我们创建的 sdc1(把图上给成 var 区),


加载点为/www,格式为 ext3,模式为”rw”读写模式。

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

点确定,在给此服务添加一个 IP 地址,这个 IP 就是客户浏览器访问的 IP,我们设置


为 10.0.0.157,掩码同网络设置,这里设置为 255.0.0.0,广播地址设置为 10.0.0.255

这样就完全添加成功了,如下图

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

保存设置,回到集群监控状态。
以上所有操作均是在 linux1 上进行,现在为保证 linux1 和 linux2 集群配置相同,将
linux1 的/etc/cluster.xml 复制到 linux2 的/etc/cluster.xml,同时启动两台机器上的集
群服务,再次查看监控状态图,就发现有新的服务添加了,点击上面的"启用"及"运行
"此服务,HTTP 服务就开始运行了。

这样,整个集群下的 http 服务就配置完成,并开始运行了。

五、图形界面下配置相对应的 Console 下 HA 配置的详细命令


与图形界面配置相对应,Redhat 也提供了 Console 环境下的详细配置命令,其中主要
的 配 置 命 令 就 是 redhat-config-cluster-cmd 这 个 命 令 , 还 有 其 它 的 一 组 命 令 如
clusvcadm、clushutdown 等,下面就同样以配置 httpd 服务为例子,对 Console 下的 HA 配
置命令进行详细的说明,请参照第四章节阅读。
1、 列出当前集群名字
redhat-config-cluster-cmd --cluster
2、 设置当前集群名字为“test_cluster”
redhat-config-cluster-cmd --cluster --name='test_cluster'
3、 显示当前裸设备状态
redhat-config-cluster-cmd –sharedstate
4、 添加一个集群节点,名字为“10.0.0.155”

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

redhat-config-cluster-cmd --add_member --name=10.0.0.155


5、 修改一个节点名字由 member2 到 member3
redhat-config-cluster-cmd --member=member2 --name=member3
6、 删除一个名为 member3 的节点
redhat-config-cluster-cmd --member=member3 --del_member
7、 列出当前集群内的服务
redhat-config-cluster-cmd –services
8、 添加一个名为 httpd 的服务
redhat-config-cluster-cmd --add_service --name=httpd
9、 列出名为 httpd 的这个服务下的子节点
redhat-config-cluster-cmd --service=httpd
10、设置 httpd 服务的相关信息,检测时间,启动脚本等等
redhat-config-cluster-cmd --service=httpd \
--checkinterval=15 \
--userscript=/etc/rc.d/init.d/httpd
11、删除名为 httpd 的集群服务
redhat-config-cluster-cmd --service=httpd \
--del_service
12、列出 httpd 服务的 ip 地址
redhat-config-cluster-cmd --service=httpd \
--service_ipaddresses
13、设置 httpd 的对外服务 IP 地址为 10.0.0.157
redhat-config-cluster-cmd --service=httpd \
--add_service_ipaddress \
--ipaddress=10.0.0.157
14、设置对方服务 ip 的掩码地址及广播地址
redhat-config-cluster-cmd --service=httpd \
--service_ipaddress=10.0.0.157 \
--netmask=255.0.0.0 \
--broadcast=10.0.0.255
15、删除 httpd 服务的 10.0.0.157 的这个 IP 地址
redhat-config-cluster-cmd --service=httpd \
--service_ipaddress=10.0.0.157 \
--del_service_ipaddress
16、列出 httpd 服务的设备
redhat-config-cluster-cmd --service=httpd \
--devices
17、给 httpd 服务添加共享磁盘 sdc1
redhat-config-cluster-cmd --service=httpd \

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

--add_device \
--name=/dev/sdc1
18、设置共享磁盘的参数
redhat-config-cluster-cmd --service=httpd \
--device=/dev/sdc1 \
--mount \
--mountpoint=/www \
--fstype=ext3 \
--options=rw \
19、启用 10.0.0.155 节点上的 httpd 服务
clusvcadm -e httpd -m 10.0.0.155
20、禁用 10.0.0.155 节点上的 httpd 服务
clusvcadm -d httpd -m 10.0.0.155
21、停止 10.0.0.155 节点上的 httpd 服务
clusvcadm -s httpd -m 10.0.0.155
更多信息请在控制台执行以下命令
#man redhat-config-cluster-cmd

六、对配置好的服务进行简单的测试
1、基本功能的测试
在 win 的机器上 IE 里输入 10.0.0.157,你就可以看到你准备在/www 目录下的测试页。
2、故障测试
任意的关闭掉其中一台机器,你就会发现 10.0.0.157 依然可以访问,你用 ssh 工具
去连接这个 IP 地址,就会发现你连接的就是现在正在运行的机器了。
3、手动的去关闭 apache 服务,集群软件依然会将 apache 服务启动起来,也就是说:
此时的服务由集群软件控制,而不是人为去控制了,除非你将 clumanger 服务停掉。

七、附加配置好的/etc/cluster.xml 供大家参考(Redhat 官方警告:勿要手动修改此文件)


<?xml version="1.0"?>
<cluconfig version="3.0">
<clumembd broadcast="yes" interval="750000" loglevel="5" multicast="no"
multicast_ipaddress="" thread="yes" tko_count="20"/>
<cluquorumd loglevel="5" pinginterval="2" tiebreaker_ip=""/>
<clurmtabd loglevel="5" pollinterval="4"/>
<clusvcmgrd loglevel="5"/>
<clulockd loglevel="5"/>
<cluster config_viewnumber="11" key="24bc70bf34ca71f0473ae3ddc34e2fc3"
name="test_cluster"/>
<sharedstate driver="libsharedraw.so" rawprimary="/dev/raw/raw1"

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn


中国科学院西安网络中心 中科红旗 linux 培训认证中心

rawshadow="/dev/raw/raw2" type="raw"/>
<members>
<member id="0" name="10.0.0.155" watchdog="yes"/>
<member id="1" name="10.0.0.156" watchdog="yes"/>
</members>
<services>
<service checkinterval="4" failoverdomain="None" id="0" name="httpd"
userscript="/etc/rc.d/init.d/httpd">
<service_ipaddresses>
<service_ipaddress broadcast="10.0.0.255" id="0" ipaddress="10.0.0.157"
netmask="255.0.0.0"/>
</service_ipaddresses>
<device id="0" name="/dev/sdc1" sharename="">
<mount forceunmount="yes" fstype="ext3" mountpoint="/www" options="rw"/>
</device>
</service>
</services>
<failoverdomains/>
</cluconfig>

参考文献链接:http://jamesthornton.com/redhat/linux/Enterprise/3/Cluster-Guide/

中科红旗 linux 技术支持服务中心---西安站 http://linux.xab.ac.cn