天天看点

集群之RHCS

RHCS

        RHCS是Red Hat Cluster Suite的缩写,也就是红帽子集群套件,RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合,它将集群系统中三大集群架构融合一体,可以给web应用、数据库应用等提供安全、稳定的运行环境。更确切的说,RHCS是一个功能完备的集群应用解决方案,它从应用的前端访问到后端的数据存储都提供了一个行之有效的集群架构实现,通过RHCS提供的这种解决方案,不但能保证前端应用持久、稳定的提供服务,同时也保证了后端数据存储的安全。RHCS提供了集群系统中三种集群构架,分别是高可用性集群、负载均衡集群、存储集群。

前提:

1)本配置共有三个测试节点,分别node1.test.com、node2.test.com和node3.test.com,相的IP地址分别为172.16.100.6、172.16.100.7和172.16.100.8;系统为rhel5.8 32bit;

2)集群服务为apache的httpd服务;

3)提供web服务的地址为172.16.100.1;

4)为集群中的每个节点事先配置好yum源;

5) 额外提供了主机172.16.100.100做为跳板机,以其为平台实现对集群中各节点的管理;其主机名称为stepping.test.com;

一、准备工作

为了配置一台Linux主机成为HA的节点,通常需要做出如下的准备工作:

1.1 设定主机名称解析

所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证三个节点上的/etc/hosts文件均为下面的内容:

<code>172.16.100.6   node1.</code><code>test</code><code>.com node1</code>

<code>172.16.100.7   node2.</code><code>test</code><code>.com node2</code>

<code>172.16.100.8   node3.</code><code>test</code><code>.com node3</code>

为了使得重新启动系统后仍能保持如上的主机名称,还分别需要在各节点执行类似如下的命令:

<code>Node1:</code>

<code># sed -i 's@\(HOSTNAME=\).*@\1node1.test.com@g'  /etc/sysconfig/network</code>

<code># hostname node1.test.com</code>

<code>Node2:</code>

<code># sed -i 's@\(HOSTNAME=\).*@\1node2.test.com@g' /etc/sysconfig/network</code>

<code># hostname node2.test.com</code>

<code>Node3:</code>

<code># sed -i 's@\(HOSTNAME=\).*@\1node3.test.com@g' /etc/sysconfig/network</code>

<code># hostname node3.test.com</code>

1.2 管理机设定

后续的诸多设定,如rpm包安装、配置文件修改等都需要在三个节点上同时进行;为了便于实现此过程,我们这里提供了一台跳板机172.16.100.100,其可以以基于密钥认证的方式分别与三个节点进行通信。实际使用中,如果没有专用的跳板机,也可以以三个节点中的某节点来替代。

首先让跳板机能以主机名称与各节点进行通信,此为非必须,仅为使用方便。在跳板机上建立/etc/hosts文件,内容如下:

接着在跳板机上为ssh生成密钥:

<code># ssh-keygen -t rsa -P ''</code>

其次生成的密钥的公钥传输至集群中的每个节点:

<code># ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1</code>

<code># ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2</code>

<code># ssh-copy-id -i ~/.ssh/id_rsa.pub root@node3</code>

说明:如果不想使用跳板机,后面演示过程中,但凡在跳板机上以循环方式执行的命令均可以分别在各节点执行的方式进行。

二、集群安装

RHCS的核心组件为cman和rgmanager,其中cman为基于openais的“集群基础架构层”,rgmanager为资源管理器。RHCS的集群中资源的配置需要修改其主配置文件/etc/cluster/cluster.xml实现,这对于很多用户来说是比较有挑战性的,因此,RHEL提供了system-config-cluster这个GUI工具,其仅安装在集群中的某一节点上即可,而cman和rgmanager需要分别安装在集群中的每个节点上。这里选择将此三个rpm包分别安装在了集群中的每个节点上,这可以在跳板机上执行如下命令实现:

<code># for I in {1..3}; do ssh node$I 'yum -y install cman rgmanager system-config-cluster'; done</code>

三、集群配置及其启动

3.1 为集群创建配置文件

RHCS的配置文件/etc/cluster/cluster.conf,其在每个节点上都必须有一份,且内容均相同,其默认不存在,因此需要事先创建,ccs_tool命令可以完成此任务。另外,每个集群通过集群ID来标识自身,因此,在创建集群配置文件时需要为其选定一个集群名称,这里假设其为tcluster。此命令需要在集群中的某个节点上执行。

<code># ccs_tool create tcluster</code>

查看生成的配置文件的内容:

<code># cat /etc/cluster/cluster.conf</code>

<code>&lt;?xml version=</code><code>"1.0"</code><code>?&gt;</code>

<code>&lt;cluster name=</code><code>"tcluster"</code> <code>config_version=</code><code>"1"</code><code>&gt;</code>

<code>  </code><code>&lt;clusternodes/&gt;</code>

<code>  </code><code>&lt;fencedevices/&gt;</code>

<code>  </code><code>&lt;</code><code>rm</code><code>&gt;</code>

<code>    </code><code>&lt;failoverdomains/&gt;</code>

<code>    </code><code>&lt;resources/&gt;</code>

<code>  </code><code>&lt;</code><code>/rm</code><code>&gt;</code>

<code>&lt;</code><code>/cluster</code><code>&gt;</code>

ccs_tool命令用于在线更新CCS的配置文件,其有许多子命令,可以使用-h获取其使用帮助及每个子命令的使用帮助。

3.2 为集群添加fence设备

一个RHCS集群至少需要一个fence设备,正常环境中,可以选择将其配置到集群中来。这里为演示环境,没有可用的fence设备,因此,选择使用“manual fence”,即手动fence。创建fence设备也需要使用ccs_tool命令进行,其需要在集群中的某节点上执行,而且需要与前面创建集群配置文件时所执行的命令在同一个节点上进行。

查看fence代理的名称,可以通过查看cman安装生成文件来实现。

<code># rpm -ql cman | grep /sbin/fence</code>

<code>/sbin/fence_ack_manual</code>

<code>/sbin/fence_apc</code>

<code>/sbin/fence_apc_snmp</code>

<code>/sbin/fence_bladecenter</code>

<code>/sbin/fence_brocade</code>

<code>/sbin/fence_bullpap</code>

<code>/sbin/fence_cisco_mds</code>

<code>/sbin/fence_cisco_ucs</code>

<code>/sbin/fence_drac</code>

<code>/sbin/fence_drac5</code>

<code>/sbin/fence_egenera</code>

<code>/sbin/fence_ifmib</code>

<code>/sbin/fence_ilo</code>

<code>/sbin/fence_ilo_mp</code>

<code>/sbin/fence_ipmilan</code>

<code>/sbin/fence_lpar</code>

<code>/sbin/fence_manual</code>

<code>/sbin/fence_mcdata</code>

<code>/sbin/fence_node</code>

<code>/sbin/fence_rhevm</code>

<code>/sbin/fence_rps10</code>

<code>/sbin/fence_rsa</code>

<code>/sbin/fence_rsb</code>

<code>/sbin/fence_sanbox2</code>

<code>/sbin/fence_scsi</code>

<code>/sbin/fence_scsi_test</code>

<code>/sbin/fence_tool</code>

<code>/sbin/fence_virsh</code>

<code>/sbin/fence_vixel</code>

<code>/sbin/fence_vmware</code>

<code>/sbin/fence_vmware_helper</code>

<code>/sbin/fence_vmware_soap</code>

<code>/sbin/fence_wti</code>

<code>/sbin/fence_xvm</code>

<code>/sbin/fence_xvmd</code>

<code>/sbin/fenced</code>

这里为tcluster添加名为meatware的fence设备,其fence代理为fence-manual。

<code># ccs_tool addfence meatware fence-manaual</code>

接着可以使用ccs_tool lsfence查看fence设备:

<code># ccs_tool lsfence</code>

<code>Name             Agent</code>

<code>meatware         fence-manaual</code>

3.3 为集群添加节点

RHCS集群需要配置好各节点及相关的fence设备后才能启动,因此,这里需要事先将各节点添加进集群配置文件。每个节点在添加进集群时,需要至少为其配置node id(每个节点的id必须惟一)及相关的fence设备两个属性。ccs_tool的addnode子命令可以完成节点添加。例如将前面规划的三个集群节点添加至集群中,可以使用如下命令实现。

<code># ccs_tool addnode -n 1 -f meatware node1.test.com  </code>

<code># ccs_tool addnode -n 2 -f meatware node2.test.com </code>

<code># ccs_tool addnode -n 3 -f meatware node3.test.com</code>

查看已经添加完成的节点及相关信息:

<code># ccs_tool lsnode</code>

<code>Cluster name: tcluster, config_version: 5</code>

<code>Nodename                        Votes Nodeid Fencetype</code>

<code>node1.</code><code>test</code><code>.com                   1    1    meatware</code>

<code>node2.</code><code>test</code><code>.com                   1    2    meatware</code>

<code>node3.</code><code>test</code><code>.com                   1    3    meatware</code>

3.4 启动集群

RHCS集群会等待各节点都启动后方才进入正常工作状态,因此,需要把集群各节点上的cman服务同时启动起来。这分别需要在各节点上执行如下命令。

<code># /etc/rc.d/init.d/cman start</code>

查看服务监听的端口,以验正服务启动状况:

<code># netstat -tunlp | grep -E "ccsd|aisexec"</code>

<code>tcp        0      0 127.0.0.1:50006             0.0.0.0:*                   LISTEN      14544</code><code>/ccsd</code>          

<code>tcp        0      0 0.0.0.0:50008               0.0.0.0:*                   LISTEN      14544</code><code>/ccsd</code>          

<code>udp        0      0 172.16.100.6:5405           0.0.0.0:*                               14552</code><code>/aisexec</code>       

<code>udp        0      0 172.16.100.6:5149           0.0.0.0:*                               14552</code><code>/aisexec</code>       

<code>udp        0      0 239.192.110.162:5405        0.0.0.0:*                               14552</code><code>/aisexec</code>       

<code>udp        0      0 0.0.0.0:50007               0.0.0.0:*                               14544</code><code>/ccsd</code>

而后在各节点启动rgmanager服务,这可以在跳板机上执行如下命令实现:

<code># for I in {1..3}; do ssh node$I '/etc/init.d/rgmanager start'; done</code>

3.5 查看集群状态信息

clustat命令可用于显示集群成员信息、法定票数信息及服务相关信息。

<code># clustat </code>

<code>Cluster Status </code><code>for</code> <code>tcluster @ Mon May 13 12:06:53 2013</code>

<code>Member Status: Quorate</code>

<code> </code><code>Member Name                                                     ID   Status</code>

<code> </code><code>------ ----                                                     ---- ------</code>

<code> </code><code>node1.</code><code>test</code><code>.com                                                    1 Online, Local</code>

<code> </code><code>node2.</code><code>test</code><code>.com                                                    2 Online</code>

<code> </code><code>node3.</code><code>test</code><code>.com                                                    3 Online</code>

cman_tool的status子命令则以当前节点为视角来显示集群的相关信息。

<code># cman_tool status</code>

<code>Version: 6.2.0</code>

<code>Config Version: 5</code>

<code>Cluster Name: tcluster</code>

<code>Cluster Id: 28212</code>

<code>Cluster Member: Yes</code>

<code>Cluster Generation: 12</code>

<code>Membership state: Cluster-Member</code>

<code>Nodes: 3</code>

<code>Expected votes: 3</code>

<code>Total votes: 3</code>

<code>Node votes: 1</code>

<code>Quorum: 2  </code>

<code>Active subsystems: 8</code>

<code>Flags: Dirty </code>

<code>Ports Bound: 0 177  </code>

<code>Node name: node1.</code><code>test</code><code>.com</code>

<code>Node ID: 1</code>

<code>Multicast addresses: 239.192.110.162 </code>

<code>Node addresses: 172.16.100.6</code>

cman_tool的nodes子命令则可以列出集群中每个节点的相关信息。

<code># cman_tool nodes</code>

<code>Node  Sts   Inc   Joined               Name</code>

<code>   </code><code>1   M      4   2013-05-13 12:00:09  node1.</code><code>test</code><code>.com</code>

<code>   </code><code>2   M      8   2013-05-13 12:00:28  node2.</code><code>test</code><code>.com</code>

<code>   </code><code>3   M     12   2013-05-13 12:00:39  node3.</code><code>test</code><code>.com</code>

cman_tool的nodes子命令则可以列出集群中每个服务的相关信息。 

<code># cman_tool services</code>

<code>type</code>             <code>level name       </code><code>id</code>       <code>state       </code>

<code>fence            0     default    00010001 none        </code>

<code>[1 2 3]</code>

<code>dlm              1     rgmanager  00020001 none        </code>

四、配置集群服务

配置集群服务涉及到配置故障转移域、服务及资源,这些需要手动修改集群配置文件,或使用system-config-cluster这个GUI程序完成。

五、配置使用gfs2文件系统

这里假设集群节点均已经正常登录某iscsi target,本地正常映射了磁盘/dev/sdb,且创建分区/dev/sdb1和/dev/sdb2。

5.1 在集群节点上安装gfs2-utils

以下命令在跳板机上执行,实现在集群所有节点上统一部署安装gfs2-utils并启动gfs2的服务

<code># for I in {1..3}; do ssh node$I 'yum -y install gfs2-utils; service gfs2 start'; done</code>

在集群中的某节点上执行如下命令,查看gfs2模块的装载情况:

<code># lsmod  | grep gfs</code>

<code>gfs2                  354825  1 lock_dlm</code>

<code>configfs               28625  2 dlm</code>

5.2 gfs2相关命令行工具的使用

mkfs.gfs2为gfs2文件系统创建工具,其一般常用的选项有:

-b BlockSize:指定文件系统块大小,最小为512,默认为4096;

-J MegaBytes:指定gfs2日志区域大小,默认为128MB,最小值为8MB;

-j Number:指定创建gfs2文件系统时所创建的日志区域个数,一般需要为每个挂载的客户端指定一个日志区域;

-p LockProtoName:所使用的锁协议名称,通常为lock_dlm或lock_nolock之一;

-t LockTableName:锁表名称,一般来说一个集群文件系统需一个锁表名以便让集群节点在施加文件锁时得悉其所关联到的集群文件系统,锁表名称为clustername:fsname,其中的clustername必须跟集群配置文件中的集群名称保持一致,因此,也仅有此集群内的节点可访问此集群文件系统;此外,同一个集群内,每个文件系统的名称必须惟一;

因此,若要在前面的/dev/sdb1上创建集群文件系统gfs2,可以使用如下命令:

<code># mkfs.gfs2 -j 3 -p lock_dlm -t tcluster:sdb1 /dev/sdb1</code>

六、配置使用cLVM(集群逻辑卷)

在RHCS集群节点上安装lvm2-cluster:

<code># for I in {1..3}; do ssh node$I 'yum -y install lvm2-cluster;'; done</code>

在RHCS的各节点上,为lvm启用集群功能:

<code># for I in {1..3}; do ssh node$I 'lvmconf --enable-cluster'; done</code>

而后,为RHCS各节点启动clvmd服务:

<code># for I in {1..3}; do ssh node$I 'service clvmd start'; done</code>

如果需要创建物理卷、卷组和逻辑卷,使用管理单机逻辑卷的相关命令即可;比如,将/dev/sdb2创建为物理卷:

<code># pvcreate /dev/sdb2</code>

<code># pvs</code>

此时,在另外的其它节点上也能够看到刚刚创建的物理卷。

创建卷组和逻辑卷:

<code># vgcreate clustervg /dev/sdb2</code>

<code># lvcreate -L 2G -n clusterlv clustervg</code>

七、gfs2的其它管理工具

7.1 gfs2-tool

查看挂载至/mydata目录上的某gfs2文件系统上的日志相关信息:

<code># gfs2-tool journals /mydata</code>

7.2 gfs2-jadd

为挂载至/mydata的gfs2文件系统添加新的日志区域:

<code># gfs2_jadd -j 1 /mydata</code>

7.3 gfs2-grow

如果需要扩展逻辑卷,其方式与普通逻辑卷相同,只是gfs2文件系统的扩展,则需要gfs2_grow进行,其需要以挂载点为参数:

<code># gfs2-grow /mydata</code>

<code></code>

本文转自 SoulMio 51CTO博客,原文链接:http://blog.51cto.com/bovin/1868611,如需转载请自行联系原作者

继续阅读