RHCS:红帽集群套件

实现的高可用是内部自带的cman+rgmanager(红帽6,到了红帽7使用的是cman+pacemaker)

一、cman介绍

运行在内核空间中,同cman、dlm、gfs同时运行在内核中,在图中可以看出gfs和vfs是通用的,通过dlm进行不同节点间锁通知管理,通过libdlm库进行通信

cman既然支持gfs2,就可以使用集群文件系统,并且可以和clvm结合实现逻辑卷的特点,对于lvm,要实现支持gfs(集群文件系统)的功能,需要编辑ll /etc/lvm/lvm.conf 文件,并在locking_tyep选项中设置为3,locking_type = 3

并启动lvm服务。

二、术语

  • 分布式集群管理器(CMAN)

Cluster Manager,简称CMAN,是一个分布式集群管理工具,它运行在集群的各个节点上,为RHCS提供集群管理任务。

CMAN用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的关系,当集群中某个节点出现故障,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。

  • 锁管理(DLM)

Distributed Lock Manager,简称DLM,表示一个分布式锁管理器,它是RHCS的一个底层基础构件,同时也为集群提供了一个公用的锁运行机制,在RHCS集群系统中,DLM运行在集群的每个节点上,GFS通过锁管理器的锁机制来同步访问文件系统元数据。CLVM通过锁管理器来同步更新数据到LVM卷和卷组。

DLM不需要设定锁管理服务器,它采用对等的锁管理方式,大大的提高了处理性能。同时,DLM避免了当单个节点失败需要整体恢复的性能瓶颈,另外,DLM的请求都是本地的,不需要网络请求,因而请求会立即生效。最后,DLM通过分层机制,可以实现多个锁空间的并行锁模式。

  • 配置文件管理(CCS)

Cluster Configuration System,简称CCS,主要用于集群配置文件管理和配置文件在节点之间的同步。CCS运行在集群的每个节点上,监控每个集群节点上的单一配置文件/etc/cluster/cluster.conf的状态,当这个文件发生任何变化时,都将此变化更新到集群中的每个节点,时刻保持每个节点的配置文件同步。例如,管理员在节点A上更新了集群配置文件,CCS发现A节点的配置文件发生变化后,马上将此变化传播到其它节点上去。

rhcs的配置文件是cluster.conf,它是一个xml文件,具体包含集群名称、集群节点信息、集群资源和服务信息、fence设备等,这个会在后面讲述。

  • 栅设备(FENCE)

FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的“脑裂”现象,FENCE设备的出现,就是为了解决类似这些问题,Fence设备主要就是通过服务器或存储本身的硬件管理接口,或者外部电源管理设备,来对服务器或存储直接发出硬件管理指令,将服务器重启或关机,或者与网络断开连接。

FENCE的工作原理是:当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。

RHCS的FENCE设备可以分为两种:内部FENCE和外部FENCE,常用的内部FENCE有IBM RSAII卡,HP的iLO卡,还有IPMI的设备等,外部fence设备有UPS、SAN SWITCH、NETWORK SWITCH等

  • 高可用服务管理器

高可用性服务管理主要用来监督、启动和停止集群的应用、服务和资源。它提供了一种对集群服务的管理能力,当一个节点的服务失败时,高可用性集群服务管理进程可以将服务从这个失败节点转移到其它健康节点上来,并且这种服务转移能力是自动、透明的。

RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。

在一个RHCS集群中,高可用性服务包含集群服务和集群资源两个方面,集群服务其实就是应用服务,例如apache、mysql等,集群资源有很多种,例如一个IP地址、一个运行脚本、ext3/GFS文件系统等。

在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的,所谓失败转移域是一个运行特定服务的集群节点的集合。在失败转移域中,可以给每个节点设置相应的优先级,通过优先级的高低来决定节点失败时服务转移的先后顺序,如果没有给节点指定优先级,那么集群高可用服务将在任意节点间转移。因此,通过创建失败转移域不但可以设定服务在节点间转移的顺序,而且可以限制某个服务仅在失败转移域指定的节点内进行切换。

  • 集群配置管理工具

RHCS提供了多种集群配置和管理工具,常用的有基于GUI的system-config-cluster、Conga等,也提供了基于命令行的管理工具。

system-config-cluster是一个用于创建集群和配置集群节点的图形化管理工具,它有集群节点配置和集群管理两个部分组成,分别用于创建集群节点配置文件和维护节点运行状态。一般用在RHCS早期的版本中。

Conga是一种web集群配置工具,与system-config-cluster不同的是,Conga是通过web方式来配置和管理集群节点的。Conga有两部分组成,分别是luci和ricci,luci安装在一台独立的计算机上,用于配置和管理集群,ricci安装在每个集群节点上,Luci通过ricci和集群中的每个节点进行通信。

RHCS也提供了一些功能强大的集群命令行管理工具,常用的有clustat、cman_tool、ccs_tool、fence_tool、clusvcadm等。

  • Redhat GFS

GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群多个节点在块级别上共享存储,每个节点通过共享一个存储空间,保证了访问数据的一致性,更切实的说,GFS是RHCS提供的一个集群文件系统,多个节点同时挂载一个文件系统分区,而文件系统数据不受破坏,这是单一的文件系统,例如EXT3、EXT2所不能做到的。

为了实现多个节点对于一个文件系统同时读写操作,GFS使用锁管理器来管理I/O操作,当一个写进程操作一个文件时,这个文件就被锁定,此时不允许其它进程进行读写操作,直到这个写进程正常完成才释放锁,只有当锁被释放后,其它读写进程才能对这个文件进行操作,另外,当一个节点在GFS文件系统上修改数据后,这种修改操作会通过RHCS底层通信机制立即在其它节点上可见。

在搭建RHCS集群时,GFS一般作为共享存储,运行在每个节点上,并且可以通过RHCS管理工具对GFS进行配置和管理。这些需要说明的是RHCS和GFS之间的关系,一般初学者很容易混淆这个概念:运行RHCS,GFS不是必须的,只有在需要共享存储时,才需要GFS支持,而搭建GFS集群文件系统,必须要有RHCS的底层支持,所以安装GFS文件系统的节点,必须安装RHCS组件

二、cman的安装和配置

前提条件:

至少三个节点,如果没有的话需要仲裁磁盘qdisk。

关闭networkmanager

时间同步

ssh互信

域名访问

关闭防火墙、setenforce

环境介绍:

管理端luci:192.168.4.209

集群节点: 10.40.0.225 node5.dtedu.com

   10.40.0.226 node6.dtedu.com

   10.40.0.227   node7.dtedu.com

配置文件:/etc/cluster/cluster.conf

实现配置文件的管理工具需要借助于:conga

conga使用luci加ricci的架构,管理端安装luci,集群节点安装ricci,并且可以管理多个不同的集群集合。

故障转移域(failover-domains)

当有多台服务器作为集群节点的时候,通过设置故障转移域限制节点资源故障转移范围,如下图,1、2节点作为一个故障转移域,当1出现故障时只可以将资源转移到2节点上,如果2节点也故障,高可用失败,也就是说不会再扩散转移到其他节点。

1、管理端安装luci工具,要求依赖的包必须使用base仓库,而不能使用epel参考。

[[email protected]~]$yum install luci --disablerepo=epel


2、启动luci管理工具,默认监听8084端口

[[email protected]~]$service luci start

Adding following auto-detected host IDs (IP addresses/domain names), corresponding to `ms.dtedu.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://ms.dtedu.com:8084 (or equivalent) to access luci


[[email protected]~]$ss -tunlp |grep 8084

tcp    LISTEN     0      5                      *:8084                  *:*      users:(("luci",7831,6))


3、访问luci工具,使用https://ip方式登录,默认用户名密码就是系统管理员的账户密码。

4、客户端安装ricci,默认生成ricci账户,但密码为空。

[[email protected]~]$ansible all -m yum -a "name=ricci state=present"

node7.dtedu.com | SUCCESS => {

    "changed": false, 

    "msg": "", 

    "rc": 0, 

    "results": [

        "ricci-0.16.2-87.el6.x86_64 providing ricci is already installed"

    ]

}

node6.dtedu.com | SUCCESS => {

    "changed": false, 

    "msg": "", 

    "rc": 0, 

    "results": [

        "ricci-0.16.2-87.el6.x86_64 providing ricci is already installed"

    ]

}

node5.dtedu.com | SUCCESS => {

    "changed": false, 

    "msg": "", 

    "rc": 0, 

    "results": [

        "ricci-0.16.2-87.el6.x86_64 providing ricci is already installed"

    ]

}


5、设置密码启动ricci服务。启动cman服务


[[email protected]~]$for i in {5..7};do ssh node$i 'echo mypass |passwd --stdin ricci';done

更改用户 ricci 的密码 。

passwd: 所有的身份验证令牌已经成功更新。

更改用户 ricci 的密码 。

passwd: 所有的身份验证令牌已经成功更新。

更改用户 ricci 的密码 。

passwd: 所有的身份验证令牌已经成功更新。

[[email protected]~]$ansible all -a "grep ricci /etc/shadow"

node7.dtedu.com | SUCCESS | rc=0 >>

ricci:$6$PUz/cUoM$aP9iRFgRf5WZ91neq5ZMinvsmk3MK3/3nx6KEz6KkDzCsQsIGe/H/5Zqo925rlJniJpXN2Fk5ak2G/A4nwfm.1:17302::::::


node6.dtedu.com | SUCCESS | rc=0 >>

ricci:$6$gLsNzk/c$JA9joiq2shqPU2dv0rURubbaq331yKUnC/lrEyW.Cdm7jIXO9Uvxf0fvqT9XDC2xi4gi9vOSSl0E8G4l7xIc30:17302::::::


node5.dtedu.com | SUCCESS | rc=0 >>

ricci:$6$FqEIkAh/$J9nsfPyOrGptiMurRQo9C2UUJttvHf3XsJo24cxt1RzSn3iIAfrlhKKk79X5aiXi4/LqwRhXO8TWeLlsM4b3v1:17302::::::



6、配置rgmanager(conga),通常情况下配置完资源是不能直接使用的,需要将资源定义到“组”中,才能启动。

注:如果yum源中有epel源要禁用,这是因为,此套件为redhat官方只认可自己发行的版本,如果不是认可的版本,可能将无法启动服务

  • 管理集群节点端

1
2
3
4
5
6
7
8
9
10
11
12
[root@essun ~] # yum install -y luci
[root@essun ~] # service luci start
Adding following auto-detected host IDs (IP addresses /domain  names), corresponding to `essun.node4.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: //essun .node4.com:8084 (or equivalent) to access luci
[root@essun ~] # ss -tnpl |grep 8084
LISTEN     0      5                         *:8084                     *:*       users :(( "python" ,2920,5))
[root@essun ~] #

而节点间要安装ricci,并且要为各节点上的ricci用户创建一个密码,以便集群服务管理各节点,为每一个节点提供一个测试页面(此处以一个节点为例,其它两个节点安装方式一样) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@essun . ssh ] # yum install ricci -y
[root@essun ~] # service ricci start
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...   done
Generating NSS database...   done
Starting ricci:                                            [  OK  ]
[root@essun ~] # ss -tnlp |grep ricci
LISTEN     0      5                        :::11111                   :::*       users :(( "ricci" ,2241,3))
#ricci默认监听于11111端口
[root@essun . ssh ] # echo "ricci" |passwd --stdin ricci
Changing password  for  user ricci.
passwd : all authentication tokens updated successfully.
#此处以ricci为密码
[root@essun html] # echo "

`hostname`

" >index.html
[root@essun html] # service httpd start
Starting httpd:                                            [  OK  ]

  • 打开web界面就可以配置了

高可用集群之RHCS_第1张图片

输入系统用户及密码就可以登录了,(注:一定要以https://协议开头)

输入正确的用户及密码就可登录了,如果是root登录会有警告提示信息

高可用集群之RHCS_第2张图片

  • 时就可以使用Manager Clusters管理集群了

高可用集群之RHCS_第3张图片

  • 创建一个集群

高可用集群之RHCS_第4张图片

  • 创建完成后,点击join cluster使节点启动。


高可用集群之RHCS_第5张图片

标签说明

Nodes :节点信息

Fence Devices :隔离设备

Failover Domins :故障转移域

Resources :定义资源

Service Groups :服务组

Cinfigure :配置文件

  • 定义故障转移

高可用集群之RHCS_第6张图片

  • 定义故障转移域的优先级,当节点重新上线后,资源是否切换

高可用集群之RHCS_第7张图片

  • 添加后的状态

高可用集群之RHCS_第8张图片

  • 可以选择的资源类型

高可用集群之RHCS_第9张图片