Professional Documents
Culture Documents
高可用性 简介
一、什么是高可用性
计 算 机 系 统 的 可 用 性 (availability) 是 通 过 系 统 的 可 靠 性 (reliability) 和 可 维 护 性
(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用
平均维修时间(MTTR)来度量系统的可维护性。
于是可用性被定义为:MTTF/(MTTF+MTTR)*100%
业界根据可用性把计算机系统分为如下几类:
可用比例 年停机时间
可用性分类
(Percent Availability) (downtime/year)
为了实现集群系统的高可用性,提高系统的高可性,需要在集群中建立冗余机制。
一 个 功 能 全 面 的 集 群 机 构 如 下 图 所 示
负载均衡服务器的高可用性
为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行
High Availability 监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。
当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务 IP 并继续提供
服务;当备份管理器又从主管理器收到“I am alive”这样的信息是,它就释放服务 IP 地址,
这样的主管理器就会开始再次进行集群管理的工作了。为了在主服务器失效的情况下系统
能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,保持二者
系统的基本一致。
Ha 的容错备援运作过程
自动侦测(Auto-Detect)阶段 由主机上的软件通过冗余侦测线,经由复杂的监听程序。
逻辑判断,来相互侦测对方运行的情况,所检查的项目有:
主机硬件(CPU 和周边...)
主机网络
主机操作系统
数据库引擎及其它应用程序
主机与磁盘阵列连线
为确保侦测的正确性,而防止错误的判断,可设定安全侦测时间,包括侦测时间间隔,
侦测次数以调整安全系数,并且由主机的冗余通信连线,将所汇集的讯息记录下来,以供
维护参考。
自动切换 (Auto-Switch)阶段 某一主机如果确认对方故障,则正常主机除继续进行原来的
任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续程序及服务。
HA 三种工作方式:
1、 主从方式 (非对称方式)
工作原理:主机工作,备机处于监控准备状况;当主机宕机时,备机接管主机的一切
工作,待主机恢复正常后,按使用者的设定以自动或手动方式将服务切换到主机上运
行,数据的一致性通过共享存储系统解决。
2、 双机双工方式(互备互援)
工作原理:两台主机同时运行各自的服务工作且相互监测情况,当任一台主机宕机时,
另一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在
共享存储系统中。
3、 集群工作方式(多服务器互备方式)
工作原理:多台主机一起工作,各自运行一个或几个服务,各为服务定义一个或多个
备用主机,当某个主机故障时,运行在其上的服务就可以被其它主机接管。
案例的具体操作
一、硬件环境:
含 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,过小的区块会导致磁盘检查的时候耗费
过多的时间。
三、安装并配置基本的 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
下一步操作,点菜单栏里的群集->配置
出现下图所示:
(注:此时保证列表处选中 Members,才可以出现下面内容)
将两台机器 Ip 都填写进去,如下图:
点击确定继续
然后打开菜单栏 cluster..daemon properties 出现以下窗口:
因为我们配置的就是双节点的 HA,所以不用管它,直接点确定
然后在 cluster configuration 选择保存后退出此窗口
在菜单栏 群集..启动本地群集守护进程,稍等一会儿,就会出现以下状态:
这样,一个没有包含任何服务的“裸”的集群系统就配置成功了,因为它没有包含任何应
用,也没有什么意义,下一步我们就在上面配置一个大家最常用的 http 服务来测试一下。
点"确定",就增加了一个服务如下图所示
这样就完全添加成功了,如下图
保存设置,回到集群监控状态。
以上所有操作均是在 linux1 上进行,现在为保证 linux1 和 linux2 集群配置相同,将
linux1 的/etc/cluster.xml 复制到 linux2 的/etc/cluster.xml,同时启动两台机器上的集
群服务,再次查看监控状态图,就发现有新的服务添加了,点击上面的"启用"及"运行
"此服务,HTTP 服务就开始运行了。
--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 服务停掉。
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/