一、RHCS简介

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

二、RHCS集群的功能和组成

      RHCS的核心功能就是提供高可用集群,当其中的节点出现故障的时候,RHCS可以通过高可用性服务管理组件自动、快速从一个节点切换到另一个节点,从而保证应用持续、不间断的对外提供服务,从而实现RHCS高可用集群实现的功能。

    RHCS通过LVS来提供负载均衡集群,当一个请求进来时,LVS通过负载均衡调度算法将请求进行分配,来达到负载均衡,而当一个节点出现故障的时候,LVS通过服务节点的故障转移功能自动屏蔽此节点,并其故障节点踢出去,同时将此节点的服务转移给其他节点。然后当此节点重新恢复服务后LVS会自动把其加到服务中来,从而来保证服务的稳定运行!

    RHCS通过GFS(Global File System)文件系统来提供存储集群功能,GFS是集群文件系统,它允许多个服务器同时读写同一个共享存储文件系统,存储集群通过将数据放在一个共享存储上来保证数据的一致性,同时GFS通过锁管理机制来实现对数据读写的隔离,从而来保证了数据的安全性!

     RHCS是一个集群套件,其主要包括以下几部分:

1、集群构架管理器:RHCS的基础套件,提供集群的基本功能,主要包括布式集群管理器(CMAN)、锁管理(DLM)、配置文件管理(CCS)、栅设备(FENCE)

2、rgmanager高可用服务管理器

提供节点服务监控和服务故障转移功能,当一个节点服务出现故障时,将服务转移到另一个健康节点。

3、集群管理工具

RHCS通过system-config-cluster来进行配置,这是一个基于图形界面的工具,可以很简单、明了的进行配置

4、负载均衡工具

RHCS通过LVS实现服务之间的负载均衡,LVS是系统内核中的套件,所有性能比较好。

5、GFS

集群文件系统,这是由RedHat公司开发的,GFS文件系统允许多个服务同时读写一个磁盘分区,通过GFS可以实现数据的集中管理,免去了数据同步和拷贝的麻烦,但GFS并不能孤立的存在,安装GFS需要RHCS的底层组件支持。

6、Cluster Logical Volume Manager

Cluster逻辑卷管理,即CLVM,是LVM的扩展,这种扩展允许cluster中的机器使用LVM来管理共享存储,但是配置之前需要开启lvm支持集群功能。

7、ISCSI

iSCSI是一种在Internet协议上,利用tcp/ip机制对fc、fc-xx等进行封装后在网络中进行传输。isici是基于C/S架构的,数据首先被封装成scsi报文,在封装成iscsi报文,最后封装tcp/ip报文进行传输!iscsi是基于tcp的,监听在3260上,通过3260端口向外提供tcp/ip的服务的,isisc的会话是一直保存建立的,知道会话介绍再断开。RHCS可以通过ISCSI技术来导出和分配共享存储的使用。

三、RHCS的架构环境和架构图

RedHat Enterprise Linux 5.8

资源分配:

node2:172.16.7.1 <--->RS-web1<--->hostname node1.chris.com
node2:172.16.7.2 <--->RS-web2<--->hostname node2.chris.com
node3:172.16.7.3 <--->RS-web3<--->hostname node3.chris.com
node4:172.16.7.4 <--->Target+NtpServer<--->hostname node4.chris.com
VIP       : 172.16.7.6
stepping:172.16.7.8      跳板机,此处利用在跳板机上利用循环语句一次性部署多个服务器。

其架构图如下

图像 2

四、搭建RHCS的高可用集群

4.1、配置Stepping主机上的NtpServer和主机名、以及ssh与其他各个几点的ssh互信和NtpServer

配置hostname

[root@stepping ~]# vim /etc/hosts
172.16.7.1      node1.chris.com node1  
172.16.7.2      node2.chris.com node2   
172.16.7.3      node3.chris.com node3   
172.16.7.4      node4.chris.com node4   
172.16.7.8      stepping.chris.com stepping

配置互信

[root@stepping ~]#ssh-keygen -t rsa
[root@stepping ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub node1
[root@stepping ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub node2
[root@stepping ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub node3
[root@stepping ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub node4

配置NtpServer服务器

配置之前先把本地磁盘做成yum,需要在每个节点上都配置

把本地磁盘挂载到media目录下

# mount /dev/cdrom /media         挂载光盘
vim /etc/yum.repos.d/server.repo,添加如下内容
# repos on instructor for cla***oom use
# Main rhel5 server  
[base]   
name=Instructor Server Repository   
baseurl=file:///media/Server   
gpgcheck=0
# This one is needed for xen packages  
[VT]   
name=Instructor VT Repository   
baseurl=file:///media/VT   
gpgcheck=0
# This one is needed for clustering packages  
[Cluster]   
name=Instructor Cluster Repository   
baseurl=file:///media/Cluster   
gpgcheck=0
# This one is needed for cluster storage (GFS, iSCSI target, etc...)
packages  
[ClusterStorage]   
name=Instructor ClusterStorage Repository   
baseurl=file:///media/ClusterStorage   
gpgcheck=0

安装NtpServer服务器

[root@stepping ~]#yum –y install ntp

修改配置文件

[root@stepping ~]#vim /etc/ntp.conf

restrict default kod nomodify notrap nopeer noquery       #默认禁止所有客户
端请求时间同步  
restrict -6 default kod nomodify notrap nopeer noquery  #IPv6的定义
# Permit all access over the loopback interface.  This could  
# be tightened as well, but to do so would effect some of   
# the administrative functions.   
restrict 127.0.0.1                                                 
restrict -6 ::1   
restrict 172.16.0.0 mask 255.255.0.0 nomodify                   #restrict 定义允许同步的网段   
# Hosts on local network are less restricted.   
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.  
# Please consider joining the pool (http://www.pool.ntp.org/join.html).   
server 127.0.0.1                          #本地上层的ntp服务器,这个必须定义的,指向本地就行

通过stepping主机做跳板机配置其他节点的配置

首先定义一个命令别名,方便下面的多个服务器上部署操作:

alias hap='for I in {1..4}; do'     配置包括Target在内的主机的命令别名
alias hcp='for I in {1..3}; do'     配置不包括Target在内的主机的命令别名

配置node1-node4节点主机名

[root@stepping ~]#hap ssh node$I "hostname node$I.chris.com" ; done  注意此处由于命令中有变量,使用双引号

同步各个节点时间

[root@stepping ~]#hap ssh node$I 'ntpdate 172.16.7.8' ; done

图像 4

复制hosts文件到各个节点

[root@stepping ~]#hap scp /etc/hosts node$I:/etc/ ; done

图像 7

关闭各个节点的selinux设置

[root@stepping ~]#hap ssh node$I 'setenforce 0' ; done

配置各个节点上的yum

[root@stepping ~]#hap ssh node$I 'mount /dev/cdrom /media' ; done      
[root@stepping ~]#hap scp /etc/yum.repos.d/server.repo node$I:/etc/yum.repos.d/ ; done

图像 9

4.2、在node1、node2、node3上安装apache的httpd服务,并进行相关的测试

[root@stepping ~]#hcp ssh node$I 'yum -y install httpd' ; done                    #安装httpd服务,注意只需在node1-3,所有使用hcp

[root@stepping ~]#hcp ssh node$I "echo node$I.chris.com
>/var/www/html/index.html"; done


#设置节点上的各个主页内容,分别为

[root@stepping ~]#node1.chris.com
[root@stepping ~]#node2.chris.com
[root@stepping ~]#node3.chris.com

启动服务并通过curl进行测试

[root@stepping ~]#hcp ssh node$I "service httpd start"; done
[root@stepping ~]#hcp curl node$I ; done
[root@stepping ~]#hcp ssh node$I "service httpd stop"; done
[root@stepping ~]#hcp ssh node$I "chkconfig httpd off"; done

图像 11

4.3、安装RHCS套件:cmam、rgmanager、system-config-cluster

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

[root@stepping ~]# hcp ssh node$I "yum -y install cman rgmanager system-
config-cluster"; done

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

此在node1上配置

图像 12

添加fence设备

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

查看fence代理的名称,可以通过查看cman安装生成文件来实现。    
# rpm -ql cman | grep /sbin/fence

命令行添加集群,但是不能添加资源。

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

接着可以使用ccs_tool lsfence查看fence设备:    
# ccs_tool lsfence    
图像 14

为集群添加节点

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

[root@node1 html]# ccs_tool addnode -n 1 -f meatware node1.chris.com  
running ccs_tool update...   
[root@node1 html]# ccs_tool addnode -n 2 -f meatware node2.chris.com   
running ccs_tool update...   
[root@node1 html]# ccs_tool addnode -n 3 -f meatware node3.chris.com   
running ccs_tool update...

图像 15

ok这些添加完成就可以启动集群了,必须在每个节点启动,这个不能在stepping主机上进行操作,因为此服务需要一个节点一个节点的进行启动,当所有服务器的服务都启动起来以后才能完成配置文件的复制才能启动完成

service cman start

然后在stepping上启动rgmanager服务,

[root@stepping ~]# hcp ssh node$I "service rgmanager start"; done
[root@stepping ~]# hcp ssh node$I "cman_tool status"; done

图像 16

cman_tool的nodes子命令则可以列出集群中每个节点的相关信息。    
[root@stepping ~]# hcp ssh node$I "cman_tool nodes"; done

图像 17

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

添加Resources内的IP资源

图像 22

定义httpd资源

图像 22

此处定义了资源以后是无法启动的,资源还需要定义服务。

图像 2

图像 4

配置好以后点击右上角的按钮“send to cluster”提交给服务器

然后进入节点查看节点状态:[root@node1 ~]# clustat

图像 5

在node2上查看相关服务和IP等信息

图像 6

图像 7

利用clusvcadm –r webservice –m node1.chris.com可以把服务迁移到节点node1上去

五、安装target并配置

5.1、安装scsi-target-utils的rpm包

[root@node4 ~]# yum install scsi-target-utils

5.2、系统上有一新的磁盘 /dev/sdb,把此做成scsi,注意:此磁盘千万不能格式化

配置target

[root@node4 ~]# tgtadm --lld iscsi --mode target --op new --targetname
iqn.2013-05.com.chris:testor.disk1 --tid 1         
查看
[root@node4 ~]# tgtadm --lld iscsi --mode target --op s

图像 1

关联其真正的存储设备

图像 2

设置访问控制列表,允许此网段内的主机使用

图像 3

六、安装配置scis的客户端并让其发现使用SCSI

在node1、node2、node3上分别安装iscsi-initiator-utils,此命令在stepping上执行如下命令
[root@stepping ~]# hap ssh node$I "yum install -y iscsi-initiator-utils"; done                       #redhat上可能已经安装过了
[root@stepping ~]# hap ssh node$I "echo" InitiatorAlias=iqn.20135.com.chris:node$I" > /etc/iscsi/initiatorname.iscs"; done      #分别设置各个节点的名称
启动iscsi服务并设置成开机启动
[root@stepping ~]# hap ssh node$I 'service iscsi start' ; done
[root@stepping ~]# hap ssh node$I 'chkconfig iscsi on' ; done

图像 4

发现target并进行登录

[root@stepping ~]# hap ssh node$I 'iscsiadm -m discovery -t st -p 172.16.7.4' ; done
[root@stepping ~]# hap ssh node$I 'iscsiadm -m node -T iqn.2013-05.com.chris:testor.disk1 -p 172.16.7.4 -l' ; done

图像 5

图像 6

在node1、node2、node3上分别安装gfs2-utils、lvm2-cluster

[root@stepping ~]# hap ssh node$I "yum install -y gfs2-utils lvm2-cluster"; done #安装服务
[root@stepping ~]# hap ssh node$I "lvmconf --enable-cluster"; done   #开启lvm支持clvm,也可以在/etc/lvm/lvm.conf内设置locking_type = 3 即可
[root@stepping ~]# hap ssh node$I "service clvmd start"; done   #启动服务

下面在node1上进行配置集群逻辑卷

[root@node1 ~]# pvcreate /dev/sdb
[root@node1 ~]# vgcreate myvg /dev/sdb
[root@node1 ~]# lvcreate -L 500M --name mydata myvg

此时在其他节点上查看,就可以看到我们创建的逻辑卷了

[root@node2 ~]# lvs

图像 8

格式化上面新建的逻辑卷

[root@node1 ~]# mkfs.gfs2 -p lock_dlm -t tcluster:ltb1 -j 3 /dev/myvg/mydata

图像 9

下面进行挂载文件系统,需要在每个节点上都挂载

[root@node1 ~]# mount -t gfs2 /dev/myvg/mydata /var/www/html/

[root@node2 ~]# mount -t gfs2 /dev/myvg/mydata /var/www/html/

[root@node3 ~]# mount -t gfs2 /dev/myvg/mydata /var/www/html/

图像 10

创建index.html

[root@node1 ~]# cd /var/www/html/

[root@node1 html]# vim index.html 添加如下

gfs2.chris.com

在节点一上增加的内容其会自动同步到其他节点上的

现再访问vip,其主页内容如下,已经变成了我们共享存储上的主页了

图像 11

下面把服务前移到node1上去并进行测试

图像 12

搭建过程易出错误处:

1、时间不同步造成集群无法进行配置文件传递

2、配置过程中一旦出现某个小错误,修改不易成功,需要重新配置

3、进程和服务较多,易造成停止和启动服务的错乱

    ok,至此我们的架构已经完成,由于对于RedHat的管理工具luci和ricci的使用还没掌握,这里暂时在跳板机上使用命令循环的方式来实现了,对于luci的使用会在以后的博文中详细介绍其安装和使用,博文其中命令比较多,难免有错误,还望各位指出!