版权声明:
本文遵循“署名非商业性使用相同方式共享 2.5 中国大陆”协议
您可以自由复制、发行、展览、表演、放映、广播或通过信息网络传播本作品
您可以根据本作品演义自己的作品
您必须按照作者或者许可人指定的方式对作品进行署名。
您不得将本作品用于商业目的。
如果您改变、转换本作品或者以本作品为基础进行创作,您只能采用与本协议相同的许
可协议发布基于本作品的演绎作品。
对任何再使用或者发行,您都必须向他人清楚地展示本作品使用的许可协议条款。
如果得到著作权人的许可,您可以不受任何这些条件的限制。
                                                                                                                  asram
通过特殊的软件将若干服务器连接在一起并提供故障切换功能的实体我们称之为高可用集群。可用性是指系统的uptime,在7x24x365的工作环境中,99%的可用性指在一年中可以有87小时36分钟的DOWN机时间,通常在关键服务中这种一天多的故障时间是无法接受的,所以提出了前面提到的错误恢复概念,以满足99.999%的高可用性需求。
这里我们先说一下几个概念:
  1. 服务(Service),是HA集群中提供的资源,包括Float IP,共享的存储,apache等等。
  2. 成员服务器(Member Server) 也叫节点(Node),是HA中实际运行服务提供资源的服务器。
  3. 失效域(Failover Domain),是HA中提供资源的服务器的集合,当内部某个成员出现故障时,可以将服务切换到其他正常的成员服务器上。在HA中一个失效域一般包含2台成员服务器(未应用虚拟技术)。
  4. 心跳(HeartBeat)是HA中监控成员服务器状态的方法,一般心跳是通过网线和串口线来传输的。
  5. 单一故障点(Single Point Of Failuer,SPOF)是指一个系统的这样的一个部件,当它失效或者停止运行,将导致整个系统不能工作。在HA中通常使用双电源,多网卡,双交换机等来避免SPOF。
  6. 仲裁(Quorum)是HA中为了准确的判断服务器及其提供的服务是否正常而采用的在共享磁盘中保存成员服务器信息的方法。共享的状态信息包括群集是否活跃。服务状态信息包括服务是否在运行以及哪个成员正在运行该服务。每个成员都检查这些信息来保证其它成员处于最新状态。在一个只有两个成员的群集中,每个成员都定期把一个时间戳和群集状态信息写入位于共享磁盘贮存区的两个共享群集分区上。要保证正确的群集操作,如果某成员无法在启动时写入主共享群集分区和屏蔽共享群集分区,它将不会被允许加入群集。此外,如果某群集成员不更新其时间戳,或者到系统的"heartbeats"(心跳)失败了,该成员就会从群集中删除。
  7. Fence设备,Fence设备的作用时在一个节点出现问题时,另一个节点通过fence设备把出现问题的节点重新启动,这样做到了非人工的干预和防止出现问题的节点访问共享存储,造成文件系统的冲突,关于Fence 设备,有外置的比如APC的电源管理器.很多服务器都是内置的,只不过不同厂家的叫法不同而已。比如HP的称为iLo,IBM的称为BMC,Dell的称为DRAC。
      下面我们以RedHat Cluster Suite为例来简要说一下HA的搭建。RedHat Cluster Suite简称RHCS,RHCS目前的版本有v3,v4和v5,各版本之间不能通用。RedHat Enterprise Linux 3.0和4.0中对应的的RHCSv3/v4支持的最大节点数为16,RedHat Enterprise Linux 5.0对应的RHCSv5支持的最大节点数为128。
RedHat高可用集群组成:
  1. Cluster Configuration System (CCS):集群配置系统,以管理cluster.conf档案
  2. Cluster Manager (CMAN):集群管理器
  3. Distributed Lock Manager (DLM):分布式锁管理器
  4. Fence:输入/输出系统围栏系统(栅设备)
  5. Resource Group Manage (rgmanager):资源组管理器,用来监督、启动和停止应用、服务和资源
  6. Quorum Disk:仲裁磁盘
  7. Conga:RHCM的Web控制套件。包括luci和ricci
  8. system-configure-cluster:图形化工具来管理集群中的多个机器
下图为一HA集群环境:
 
 p_w_picpath
从防火墙到服务器网卡都是HA模式。这里交换机我是以Cisco为例的,开启HSRP。
环境描述:
2台服务器为IBM Blade HS21(2*2.5G以上 4核处理器,8G 内存,2*146G硬盘, 集成冗余双口网卡  )
p_w_picpath
Fence设备:Advanced Management Module(AMM)此次利用IBM提供的免费午餐来作为Fence设备(貌似给过钱了=.=!)。IP是192.168.110.47,用户名是USERID,密码是PASSW0RD
OS:RedHat Enterprise Linux Advance Server 4 update 6
准备工作:
1.配置bonding:
  • 新建/etc/sysconfig/network-config/ifcfg-bond0,内容如下:
DEVICE=bond0
BOOTPROTO=static
BROADCAST=192.168.100.255
IPADDR=192.168.100.21
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
  • 编辑要绑定的真实网卡eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
  • 编辑要绑定的真实网卡eth1
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
  • 配置绑定模式:
编辑 /etc/modules.conf 文件,加入如下一行内容以使系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0加入下列两行
# vi /etc/modules.conf
alias bond0 bonding
options bond0 miimon=100 mode=1 primary=eth0
说明:miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,共有0、1、2、3四种模式,常用的为0,1两种:mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,默认情况下只有一块网卡工作,另一块做备份,primary指定启动后active的网卡。
  • 修改默认路由
由环境描述可知192.168.100.0网段是跑业务的,所以我们需要指定默认路由
# more /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=am1
GATEWAY=192.168.100.2
  • 重新启动网络服务应用刚才的配置
# /etc/init.d/network restart
    Bringing up interface bond0 OK
    Bringing up interface eth0 OK
    Bringing up interface eth1 OK
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v2.6.3-rh (June 8, 2005)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 1
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave Interface: eth1
MII Status: up
Link Failure Count: 1
Permanent HW addr: xx:xx:xx:xx:xx:xx
  • bond1的配置同上,am2服务器配置同am1。
2.修改/etc/hosts文件,添加节点的主机名和IP地址。在两台刀片机上该文件必须一致。
    # vi /etc/hosts
    127.0.0.1 localhost.localdomain localhost
    192.168.110.21 amcluster1
    192.168.100.21 am1
    192.168.110.22 amcluster2
    192.168.100.22 am2
3.安装RHCS套件
    # mount –o loop rhel-4-u6-rhcs-i386-disc1.iso /mnt
    # cd /mnt
    # ./autorun
    弹出安装cluster软件对话框,选择需要安装的软件,所有有关Xen、large、huge、luci、ricci字样的软件包都不选择,点下一步,如果没有错误信息,则安装成功。如果多选了一些软件包的话,
    可能需要插入RedHat安装盘。
    注意:
    必须关掉RedHat的Selinux和Iptables,当然你要是知道cluster软件的端口在防火墙上打开也是可以的^_^。
4.停掉两台机器上cluster的所有服务
# /etc/init.d/rgmanager stop
#/etc/init.d/fenced stop
#/etc/init.d/cman stop
#/etc/init.d/ccsd stop
修改/usr/share/system-config-cluster/FaildomController.py文件,第213行少一个“=”,该问题为cluser自身bug。
5.编写集群启动和关闭脚本:
#more /root/cluster.sh
#!/bin/sh
start() {
/etc/init.d/ccsd start
/etc/init.d/cman start
/etc/init.d/fenced start
/etc/init.d/rgmanager start
}
stop() {
/etc/init.d/rgmanager stop
/etc/init.d/fenced stop
/etc/init.d/cman stop
/etc/init.d/ccsd stop
}
status() {
/etc/init.d/rgmanager status
/etc/init.d/fenced status
/etc/init.d/cman status
/etc/init.d/ccsd status
}
case "$1" in
start)
start $1
;;
stop)
stop $1
exit 0
;;
restart|reload)
stop $1
start $1
RETVAL=$?
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac
修改权限
#chmod 700 /root/cluster.sh
开始配置Cluster:(使用的是RHCSV5版本的system-config-cluster工具)
1.在Xwindow下运行
# system-config-cluser
打开图形化配置工具:
p_w_picpath
2.选择Create New Configuration按钮,然后输入文件名点和多播地址,然后点击“确定”。
p_w_picpath
再选择左边的Cluster,并选择右下"Edit Cluster Properties" 调出"cluster Properies" 配置Cluster的名称和相关属性。
p_w_picpath
"PostJoinDelay" 栅进程接收新节点的加入请求后等待节点确认加入的延迟秒数,默认值为3,典型的设置为20至30,这个根据你的网路和集群的实际情况而定。"PostFailDelay" 栅进程发现节点失效后将节点踢出错误恢复域的等待延迟时间,默认值为0代表立即踢出不延时,这个值要按你集群网络的实际情况而定。
3.选中Cluster Nodes,这里就是加入成员节点的,点击Add a Cluster Node,输入amcluster1点OK,如下图,Node Name需要和/etc/hosts文件中配置的机器名相同
p_w_picpath
同理加入amcluster2。
4.选中Fence Devices,点击Add a Fence Device,如下图,Fence设备需要根据实际情况进行选择配置,这次安装中IBM刀片服务器使用IBM Blade Center管理,修改后的IP是192.168.110.47,用户名是USERID,密码是PASSW0RD, 点OK。
p_w_picpath
    5.选中刚添加的节点amcluster1,点Manage Fencing For This Node,弹出对话框,点Add a New Fence Level,再选中左侧的Fence-Level-1,点Add a New Fence to this Level,弹出下面对话框,输入刀片所在的槽位,点OK
    p_w_picpath
    同样方式配置amcluster2的fence设备。
6.创建失效域,添加对应节点,如图,选中Failover Domains,点击右下角的Create a Failover Domain。在弹出的对话框中输入失效域的名称,这里我们输入AMHA保存后。
p_w_picpath
7.将失效域成员节点添加进去
p_w_picpath
右边的两个打勾选向分别是 "RestrictFailover Domains members" 以及 "Priotitzed List"。如果妳只有两台, 打勾第一项“Restrict Failover Domains members” 就可以了,这项是只允许这两台做轮替。另外一项"Priotitzed List"则是在你有两台以上的服务器,需要分别设定轮替的优先级时需要的。当你打钩"Priotitzed List"后可以使用"Adjust Priority" 调整多节点的替换优先级
8.创建资源组
选中Resources,点击右下角的Create a Resources,这里选择Create a Resource,然后选择IP Address,填写Float IP进去。
p_w_picpath
然后将tomcat的启动脚本添加进去,如下图所示:
p_w_picpath
9.创建服务
选中Service,点击右下角的Create a Service,在弹出的对话框中创建Service,如下图
p_w_picpath
点击OK后,做如下配置
p_w_picpath
注意:
1.红色圈出的下拉框要选择我们刚才创建的失效域名称AMHA
2.蓝色圈出的部分,若选择Restart,则服务发生异常时,cluster尝试把该服务重启;若选择Relocate,则服务发生异常时,cluster直接尝试切换服务至另一个节点上。
配置完这两步,点击左下角的p_w_picpath 弹出如下对话框
p_w_picpath
依次增加要切换的服务即可。
在这里需要提醒各位最好将服务脚本放置在IP下面,只有网卡起来了才
能服务,逻辑上才正确。
p_w_picpath
操作流程:选择Create a new resource for this service 然后选择IP Address,这样地址资源就加载好了,选中刚建立的地址,再在下面选择Attach a new Private Resource to the Selection,这里选择Script并添加我们需要服务的脚本。
10.保存配置并同步到备机
最终的cluster.conf文件内容应该如下结构:
<?xml version="1.0" ?>
<cluster alias="AMHA" config_version="2" name="AMHA">
        <fence_daemon post_fail_delay="0" post_join_delay="3"/>
        <clusternodes>
                <clusternode name="amcluster1" nodeid="1" votes="1">
                        <multicast addr="225.0.0.1" interface="bond0"/>
                        <fence>
                                <method name="1">
                                        <device blade="1" name="AMM"/>
                                </method>
                        </fence>
                </clusternode>
                <clusternode name="amcluster2" nodeid="2" votes="1">
                        <multicast addr="225.0.0.1" interface="bond0"/>
                        <fence>
                                <method name="1">
                                        <device blade="2" name="AMM"/>
                                </method>
                        </fence>
                </clusternode>
        </clusternodes>
        <cman expected_votes="1" two_node="1">
                <multicast addr="225.0.0.1"/>
        </cman>
        <fencedevices>
                <fencedevice agent="fence_bladecenter" ipaddr="192.168.110.47" login="USERID" name="AMM" passwd="PASSW0RD"/>
        </fencedevices>
        <rm>
                <failoverdomains>
                        <failoverdomain name="AMHA" ordered="0" restricted="1">
                                <failoverdomainnode name="amcluster1" priority="1"/>
                                <failoverdomainnode name="amcluster2" priority="1"/>
                        </failoverdomain>
                </failoverdomains>
                <resources>
                        <ip address="192.168.100.18" monitor_link="1"/>
                        <script file="/etc/init.d/tomcat" name="tomcat"/>
                </resources>
                <service autostart="1" domain="AMHA" name="AMHA">
                        <ip ref="192.168.100.18">
                                <script ref="tomcat"/>
                        </ip>
                </service>
        </rm>
</cluster>
可以通过
# scp /etc/cluster/cluster.conf root@amcluster2:/etc/cluster
也可以通过systemconfigcluster图形集群配置工具中可以简单的点一下”Send to”按钮来传。
也可以通过RHCS提供的工具:
1.# ccs_tool update /etc/cluster/cluster.conf,告知ccs升级配置文件版本。
2.# cman_tool status | grep “Config version”,首先查出你cluster.conf文件的版本。
观察返回的东东是否和你的新版本一样,否的话就需要通过下面的命令来更新。
# cman_tool version-r new_version_number
3.验证一下是否是最新就OK了。
以上操作时RHEL4中的,在RHEL5中用户只需要使用ccs_tool update /etc/cluster/cluster.conf就可以了。
到这里使用之前的集群启动脚本启动服务就可以了。