【1】 HA集群简介
1】通过特殊软件把独立的系统(node)连接起来,组成一个能够提供故障切换(Faileover)功能的集群
2】Ha集群可以保证在多种故障中,关键服务的可用性、可靠性及数据完整性
3】Ha集群主要用于文件服务,WEB服务,数据库服务等关键应用中
【2】 高可用集群的三种方式
1】主从方式(非对称)
2】 对称方式(互备互援)
3】多级方式(多级互备)
【3】 高可用集群的基本组成
1】服务 (Service)
2】浮动IP (Float IP)
3】成员服务器或称节点 (Member Server of Node)
HA集群中实际运行服务提供特定资源的服务器
4】 失效域 (Failover Domain)
通常会包含至少两台成员服务器(Member Server)
5】 心跳 (Heartbeat)
HA集群监视服务器状态的方法,一般情况下心跳是通过网络数据包来判断服务器是否正常工作
6】 共享存储 (Share Storage)
保证HA集群服务进行切换时,服务所需的数据资源能够保持一致
【4】高可用集群的相关技术概念
1】 单一故障点( Single Point Of Failure,SPOF )
2】 仲裁 (Quorum)
3】 失效迁移 (Failover)
4】监视器 (Watchdog)
5】 可编程电源控制器 ( Programable Power Controller or Smart Power Switch) <爆头设备>
【5】 HA双机高可用集群的配置方法
1】 网络拓扑图
-----------------------------------
| vm3 vm4 |
| 4.4.64.3/24 4.4.64.4/24 |
|vm3.rhcm.com vm4.rhcm.com |真实机 4.4.64.254/24
| [主] [备] | XEN_FENCE
| \ / |
------\--------------/-------------
[NFS SERVER]
4.4.64.100/24
2】 浮动资源
a NFS挂载资源
b 浮动IP : 4.4.64.66
c httpd服务
3】配置NFS,共享一个/www目录,其中有index.html页面
vim /etc/exports
/www 4.4.64.*(rw,sync)
4】 vm3,vm4的准备工作
a】 配置固定ip hostname(/etc/sysconfig/network) /etc/hosts(三份)
cat /etc/hosts
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 4.4.64.3 vm3.rhcm.com 4.4.64.4 vm4.rhcm.com 4.4.64.254 XEN_FENCE
注意:安装luci的主机必须能在hosts文件中解析高可用节点的主机名和IP的对应关系高可用节点必须启动ricci,并设置为开机自动启动,关闭iptables,selinux
a】 安装软件包
yum -y install ricci cman rgmanager modcluster
b】启动 ricci 服务
/etc/init.d/ricci start
c】设置开机自启动
chkconfig ricci on
7】集群管理节点(4.4.64.254)上的配置
a】 安装软件包
yum -y install luci
b】 初始化
luci_admin init
c】重启luci服务
service luci restart
8】 访问web配置页面 进行高可用集群配置
a】https://XEN_FENCE:8084
在web页面进行登录
b】 新建集群
cman_tool status 查看集群信息
如果一个环境中有很多个HA集群,请事先人为修改组播地址224.0.0.0-239.255.255.255
c】 创建故障转移域 failover domains
d】添加浮动资源
ip address 4.4.64.66
NFS MOUNT
Script
e】 添加服务,目的是将浮动资源和故障转移域关联起来
注意: 添加child resource
f】在vm3,vm4上测试,查看是否配置成功
service cman status
service rgmanager status
clustat
[root@vm3 ~]# clustat Cluster Status for pgha @ Thu Apr 26 16:47:27 2012 Member Status: Quorate Member Name ID Status ------ ---- ---- ------ vm4.rhcm.com 1 Online, rgmanager vm3.rhcm.com 2 Online, Local, rgmanager Service Name Owner (Last) State ------- ---- ----- ------ ----- service:apache_service vm3.rhcm.com started
9】为两个高可用节点添加fence设备
a】 两虚拟机所处真机(4.4.64.254)安装cman
yum install cman
b】利用web页面配置fence设备,在vm3的/etc/cluster/目录下生成两个文件
cluster.conf fence_xvm.key
scp /etc/cluster/fence_xvm.key 4.4.64.254:/etc/cluster
c】 真机启动服务
fence_xvmd -I eth0 -L
d】 手动测试是否可以正常工作
fence_xvm -H vm3 -d
-- args @ 0xbfaecf78 -- args->addr = 225.0.0.12 args->domain = vm8 args->key_file = /etc/cluster/fence_xvm.key args->op = 2 args->hash = 2 args->auth = 2 args->port = 1229 args->ifindex = 0 args->family = 2 args->timeout = 30 args->retr_time = 20 args->flags = 0 args->debug = 1 -- end args -- Remote: Operation was successful
11】 附录: vm3,vm4的/etc/cluster/cluster.conf 文件
<?xml version="1.0"?> <cluster alias="HA-WEB-Cluster" config_version="10" name="HA-WEB-Cluster"> <fence_daemon clean_start="0" post_fail_delay="0" post_join_delay="3"/> <clusternodes> <clusternode name="vm4.test.com" nodeid="1" votes="1"> <fence> <method name="1"> <device domain="xen_fence" name="vm4"/> </method> </fence> </clusternode> <clusternode name="vm3.test.com" nodeid="2" votes="1"> <fence> <method name="1"> <device domain="xen_fence" name="vm3"/> </method> </fence> </clusternode> </clusternodes> <cman expected_votes="1" two_node="1"> <multicast addr="239.3.64.8"/> </cman> <fencedevices> <fencedevice agent="fence_xvm" name="vm3"/> <fencedevice agent="fence_xvm" name="vm4"/> </fencedevices> <rm> <failoverdomains> <failoverdomain name="HA-WEB-Cluster" nofailback="1" ordered="1" restricted="1"> <failoverdomainnode name="vm4.test.com" priority="7"/> <failoverdomainnode name="vm3.test.com" priority="2"/> </failoverdomain> </failoverdomains> <resources> <ip address="4.4.64.66" monitor_link="0"/> <netfs export="/www" force_unmount="0" fstype="nfs" host="4.4.64.5" mountpoint="/var/www/html" name="NFS-Mount"/> <script file="/etc/init.d/httpd" name="Script"/> </resources> <service autostart="1" domain="HA-WEB-Cluster" exclusive="1" name="webservice" recovery="relocate"> <ip ref="4.4.64.66"> <netfs ref="NFS-Mount"> <script ref="Script"/> </netfs> </ip> </service> </rm> </cluster>