一,概述

   Cluster manager 简称CMAN,是一个分布式集群管理工具,运行在集群的各个节点上,为RHCS提供集群管理任务。它用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的有关系。当集群中某个节点出现故障时,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。
   CMAN根据每个节点的运行状态,统计出一个法定节点数,作为集群是否存活的依据。当整个集群中有多于一半的节点处于激活状态时,表示达到了法定节点数,此集群可以正常运行,当集群中有一半或少于一半的节点处于激活状态时,表示没有达到法定的节点数,此时整个集群系统将变得不可用。CMAN依赖于CCS,并且CMAN通过CCS读取cluster.conf文件。

   rgmanager主要用来监督、启动、停止集群的应用、服务和资源。当一个节点的服务失败时,高可用集群服务管理进程可以将服务从这个失败节点转移至其点健康节点上,这种服务转移能力是自动动,透明的。RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。
   在RHCS集群中,高可用生服务包括集群服务和集群资源两个方面。集群服务其实就是应用,如APACHE,MYSQL等。集群资源有IP地址,脚本,EXT3/GFS文件系统等。
   在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的。由几个节点负责一个特定的服务的集合叫失败转移域,在失败迁移域中可以设置节点的优先级,主节点失效,服务会迁移至次节点,如果没有设置优先,集群高可用服务将在任意节点间转移。

RHCS包括的组件:

wKioL1M32pfzlPAEAAETKpy6wTo843.jpg

下面说一下CMAN在 RHEL4到RHEL6的各组件工作模式的变化:

RHEL 4系列:

wKioL1M32kLDclg6AAF0-OvdhgU216.jpg


RHEL 5系列:

wKiom1M32xOiJLM7AAHH_OIi1-g438.jpg

RHEL 6系列:

发现CMAN在RHEL6中各组功能已经大部分被转移到用户空间实现,大大简化了工作流程。

wKioL1M32xezZOwtAAGUjC68zuI428.jpg



集群配置和管理工具

   RHCS提供了多种集群配置和管理工具,常用有基于GUI的system-config-cluster,conga等,还提供了基于命令行的管理工具。
   System-config-cluster由集群节点配置和集群管理两个部分组成,分别用于创建集群节点配置文件和维护节点运行状态,一般用于早期的RHCS版本中。
   Conga是新的基于网络的集群配置工具。它是web界面管理的,由luci和ricci组成,luci可以安装在一台独立的计算机上,也可安装在节点上,用于配置和管理集群,ricci是一个代理,安装在每个集群节点上,luci通过ricci和集群中的每个节点通信。



二,下面我准备了一个实验环境,使用Conga配置工具来创建和管理集群:

IP:192.168.30.115  Host:admin.luojianlong.com OS:Centos6.4 x86_64  用于管理和配置集群

IP:192.168.30.116  Host:node1.luojianlong.com OS:Centos6.4 x86_64  集群节点1

IP:192.168.30.117  Host:node1.luojianlong.com OS:Centos6.4 x86_64  集群节点2

IP:192.168.30.119  Host:node1.luojianlong.com OS:Centos6.4 x86_64  集群节点3


首先配置4台server的主机名,ssh无密码互信和hosts文件:

[root@localhost ~]# hostname admin.luojianlong.com
[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1admin.luojianlong.com@g'  /etc/sysconfig/network
[root@localhost ~]# bash
[root@localhost ~]# hostname node1.luojianlong.com
[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1node1.luojianlong.com@g' /etc/sysconfig/network
[root@localhost ~]# bash
[root@localhost ~]# hostname node2.luojianlong.com
[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1node2.luojianlong.com@g' /etc/sysconfig/network
[root@localhost ~]# bash
[root@localhost ~]# hostname node3.luojianlong.com
[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1node3.luojianlong.com@g' /etc/sysconfig/network
[root@localhost ~]# bash
[root@localhost ~]# vi /etc/hosts
192.168.30.115 admin.luojianlong.com admin
192.168.30.116 node1.luojianlong.com node1
192.168.30.117 node2.luojianlong.com node2
192.168.30.119 node3.luojianlong.com node3
[root@admin ~]# ssh-keygen -t rsa
[root@admin ~]# ssh-copy-id -i node1
[root@admin ~]# ssh-copy-id -i node2
[root@admin ~]# ssh-copy-id -i node3
[root@admin ~]# scp /etc/hosts node1:/etc
[root@admin ~]# scp /etc/hosts node2:/etc
[root@admin ~]# scp /etc/hosts node3:/etc


下面在admin上面安装luci

[root@admin ~]# yum -y install luci --disablerepo=epel


启动luci服务

[root@admin ~]# service luci start
Adding following auto-detected host IDs (IP addresses/domain names), corresponding to `admin.luojianlong.com' address, to the configuration of self-managed certificate `/var/lib/luci/etc/cacert.config' (you can change them by editing `/var/lib/luci/etc/cacert.config', removing the generated certificate `/var/lib/luci/certs/host.pem' and restarting luci):
    (none suitable found, you can still do it manually as mentioned above)
Generating a 2048 bit RSA private key
writing new private key to '/var/lib/luci/certs/host.pem'
Starting saslauthd:                                        [  OK  ]
Start luci...                                              [  OK  ]
Point your web browser to https://admin.luojianlong.com:8084 (or equivalent) to access luci

以上信息看出启动luci后会自动生成2048位ras加密的密钥,启动成功,监听在套接字的8084

注意,这里是基于https的,所有通过web访问luci管理页面,要通过https://IP来访问

[root@admin ~]# ss -antpl | grep :8084
LISTEN     0      5                         *:8084                     *:*      users:(("python",17785,5))


打开浏览器访问https://192.168.30.115:8084

wKiom1M3yhHwXqUkAAE79Z-oO64877.jpg


输入服务器的账号密码登录:

wKiom1M3ywqR4DlQAAFZac_UWA0749.jpg


在其他3个节点上分别安装ricci

[root@node1 ~]# yum -y install ricci
[root@node2 ~]# yum -y install ricci
[root@node3 ~]# yum -y install ricci

安装好riccic后,会在3个节点上分别自动建立用户ricci,下面分别给ricci设置密码,用来在luci里面添加集群节点

[root@node1 ~]# echo mypass | passwd --stdin ricci
Changing password for user ricci.
passwd: all authentication tokens updated successfully.
[root@node2 ~]# echo mypass | passwd --stdin ricci
Changing password for user ricci.
passwd: all authentication tokens updated successfully.
[root@node3 ~]# echo mypass | passwd --stdin ricci
Changing password for user ricci.
passwd: all authentication tokens updated successfully.


启动ricci

[root@node1 ~]# service ricci start
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...  done
Generating NSS database...  done
Starting ricci:                                            [  OK  ]
[root@node1 ~]# chkconfig ricci on
[root@node2 ~]# service ricci start
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...  done
Generating NSS database...  done
Starting ricci:                                            [  OK  ]
[root@node2 ~]# chkconfig ricci on
[root@node3 ~]# service ricci start
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...  done
Generating NSS database...  done
Starting ricci:                                            [  OK  ]
[root@node3 ~]# chkconfig ricci on


在luci创建集群,并添加集群节点

wKiom1M3za7AAFubAAKdiw0ps7Y711.jpg


选择Download Packages,node1,node2,node3会自动安装rgmanager等所需要的软件包


wKiom1M3zeuQJkikAAIF-cozaxY810.jpg


以上信息发现,正在创建集群


wKiom1M3ziuwDbVsAAKobQMop_Q105.jpg

创建完成


随便登录到一个节点上面,观察集群状态

[root@node1 ~]# cman_tool nodes
Node  Sts   Inc   Joined               Name
   1   M      4   2014-03-30 15:49:14  node1.luojianlong.com
   2   M     12   2014-03-30 15:49:14  node2.luojianlong.com
   3   M     12   2014-03-30 15:49:14  node3.luojianlong.com
[root@node1 ~]# clustat
Cluster Status for tcluster @ Sun Mar 30 15:53:40 2014
Member Status: Quorate
 Member Name                                                     ID   Status
 ------ ----                                                     ---- ------
 node1.luojianlong.com                                               1 Online, Local
 node2.luojianlong.com                                               2 Online
 node3.luojianlong.com                                               3 Online

发现3个节点都已经在线


下来创建集群资源,首先创建集群VIP

wKioL1M30B-SX44EAAJn2GKmoUg269.jpg


wKiom1M30KPR6pHwAAJZmslKbSc059.jpg


以上信息:

IP Address:定义IP地址

Netmask Bits (optional):掩码长度

Monitor Link:是否监控资源,发生故障后可以自动重启资源

Disable Updates to Static Routes:禁止跟新静态路由

Number of Seconds to Sleep After Removing an IP Address:故障转移等待的时间


设置完成,点submit提交

wKiom1M30XuA5ceXAAJIvGjO2os111.jpg

发现一个IP资源已经创建好了

下面开始创建service groups

wKioL1M30uLx9QhsAAIRMzeIvaw264.jpg


wKiom1M31EvSYLaeAAHsidZKKsc025.jpg


定义:

Service Name:服务名称

Automatically Start This Service:服务是否自动启动

Failover Domain:选择故障转移域

Recovery Policy:故障转移策略,包括Relocate,Restart,Restart-Disable,Disable


下面选择资源:

wKioL1M31QTCtczmAAGOadOnylA065.jpg


选择刚才创建的IP资源


wKiom1M31VbwVph0AAF0eeVZ_a8252.jpg


选择自定义script资源,我们这里选择httpd,请确保3台node上面已经安装httpd

然后submit

wKiom1M31cagiTADAAJd7DePE4Q424.jpg


下来点击start,启动资源

wKiom1M31i3y4tOaAAIvabTPGcc689.jpg


wKioL1M31jij4KjkAAIKWzuqv9A458.jpg

发现刚才定义的IP资源已经被使用


登录node1,查看集群状态

[root@node1 ~]# clustat
Cluster Status for tcluster @ Sun Mar 30 16:26:40 2014
Member Status: Quorate
 Member Name                                                     ID   Status
 ------ ----                                                     ---- ------
 node1.luojianlong.com                                               1 Online, Local, rgmanager
 node2.luojianlong.com                                               2 Online, rgmanager
 node3.luojianlong.com                                               3 Online, rgmanager
 Service Name                                                Owner (Last)                                                State 
 ------- ----                                                ----- ------                                                ----- 
 service:webservice                                          node1.luojianlong.com                                       started
[root@node1 ~]# ss -anptl | grep :80
LISTEN     0      128                      :::80                      :::*      users:(("httpd",31177,5),("httpd",31179,5),("httpd",31180,5),("httpd",31181,5),("httpd",31182,5),("httpd",31183,5),("httpd",31184,5),("httpd",31185,5),("httpd",31186,5))


发现httpd已经在node1运行了

接着,将webservice转移到node2上面

[root@node1 ~]# clusvcadm -r webservice -m node2.luojianlong.com
Trying to relocate service:webservice to node2.luojianlong.com...Success
service:webservice is now running on node2.luojianlong.com
[root@node1 ~]# clustat
Cluster Status for tcluster @ Sun Mar 30 16:29:25 2014
Member Status: Quorate
 Member Name                                                     ID   Status
 ------ ----                                                     ---- ------
 node1.luojianlong.com                                               1 Online, Local, rgmanager
 node2.luojianlong.com                                               2 Online, rgmanager
 node3.luojianlong.com                                               3 Online, rgmanager
 Service Name                                                Owner (Last)                                                State 
 ------- ----                                                ----- ------                                                ----- 
 service:webservice                                          node2.luojianlong.com                                       started

登录node2

[root@node2 ~]# ss -anptl | grep :80
LISTEN     0      128                      :::80                      :::*      users:(("httpd",11601,5),("httpd",11603,5),("httpd",11604,5),("httpd",11605,5),("httpd",11606,5),("httpd",11607,5),("httpd",11608,5),("httpd",11609,5),("httpd",11610,5))
[root@node2 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:5b:50:f9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.117/24 brd 192.168.30.255 scope global eth0
    inet 192.168.30.230/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe5b:50f9/64 scope link
       valid_lft forever preferred_lft forever


发现httpd和VIP已经在node2上面了。