一、 什么是RHCS

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

二、RHCS提供的三个核心功能
         高可用集群是RHCS的核心功能。当应用程序出现故障,或者系统硬件、网络出现故障时,应用可以通过RHCS提供的高可用**管理组件自动、快速从一个节点切换到另一个节点,节点故障转移功能对客户端来说是透明的,从而保证应用持续、不间断的对外提供服务,这就是RHCS高可用集群实现的功能。
 
         RHCS通过LVS(Linux Virtual Server)来提供负载均衡集群,而LVS是一个开源的、功能强大的基于IP的负载均衡技术,LVS由负载调度器和服务访问节点组成,通过LVS的负载调度功能,可以将客户端请求平均的分配到各个服务节点,同时,还可以定义多种负载分配策略,当一个请求进来时,集群系统根据调度算法来判断应该将请求分配到哪个服务节点,然后,由分配到的节点响应客户端请求,同时,LVS还提供了服务节点故障转移功能,也就是当某个服务节点不能提供服务时,LVS会自动屏蔽这个故障节点,接着将失败节点从集群中剔除,同时将新来此节点的请求平滑的转移到其它正常节点上来;而当此故障节点恢复正常后,LVS又会自动将此节点加入到集群中去。而这一系列切换动作,对用户来说,都是透明的,通过故障转移功能,保证了服务的不间断、稳定运行。

         RHCS通过GFS文件系统来提供存储集群功能,GFS是Global File System的缩写,它允许多个服务同时去读写一个单一的共享文件系统,存储集群通过将共享数据放到一个共享文件系统中从而消除了在应用程序间同步数据的麻烦,GFS是一个分布式文件系统,它通过锁管理机制,来协调和管理多个服务节点对同一个文件系统的读写操作。

具体的看图:

wKioL1Q_442TsaXUAAOe5esFubo342.jpg

安装环境介绍

这个实例要介绍的是web+mysql集群的构建,整个RHCS集群共有四台服务器组成,分别由两台主机搭建web集群,两台主机搭建mysql集群,在这种集群构架下,任何一台web服务器故障,都有另一台web服务器进行服务接管,同时,任何一台mysql服务器故障,也有另一台mysql服务器去接管服务,保证了整个应用系统服务的不间断运行。

                                         

                                                wKioL1Q_676yb89xAAD5CV6gES0895.jpg

安装前准备工作

为了方便安装RHCS套件,在安装操作系统时,建议选择如下这些安装包:

桌面环境:xwindows system、GNOME desktop environment。

开发工具:development tools、x software development、gnome software development、kde software development。


地址规划如下:

           wKiom1Q_7aTQ4vP2AAEGdMNsAzg747.jpg

            master          192.168.12.181 主lvs server

            backup          192.168.12.251 备lvs server

接下来我大致介绍下安装步骤


1.安装Luci

Luci是RHCS基于web的集群配置管理工具,可以从系统光盘找到对应的Luci安装包,安装如下:

[root@storgae-server ~]#rpm -ivh luci-0.12.2-12.el5.centos.1.i386.rpm

安装完成,执行luci初始化操作:

[root@storgae-server ~]#luci_admin init

Initializing the Luci server

Creating the 'admin' user

Enter password: 

Confirm password: 

Please wait...

 The admin password has been successfully set.

Generating SSL certificates...

Luci server has been successfully initialized

输入两次密码后,就创建了一个默认登录luci的用户admin。

最后,启动luci服务即可:

[root@storgae-server ~]# /etc/init.d/luci  start 


2、 安装Luci

服务成功启动后,就可以通过https://ip:8084访问luci了。

为了能让luci访问集群其它节点,还需要在/etc/hosts增加如下内容:

192.168.12.231  Mysql1

192.168.12.232  Mysql2

192.168.12.230  web1

192.168.12.240  web2

到这里为止,在storgae-server主机上的设置完成。 


3、在集群节点安装RHCS软件包

为了保证集群每个节点间可以互相通信,需要将每个节点的主机名信息加入/etc/hosts文件中,修改完成的/etc/hosts文件内容如下:

127.0.0.1       localhost

192.168.12.230  web1

192.168.12.240  web2

192.168.12.231  Mysql1

192.168.12.232  Mysql2

将此文件依次复制到集群每个节点的/etc/hosts文件中。


4、在集群节点安装RHCS软件包

RHCS软件包的安装有两种方式,可以通过luci管理界面,在创建Cluster时,通过在线下载方式自动安装,也可以直接从操作系统光盘找到所需软件包进行手动安装,由于在线安装方式受网络和速度的影响,不建议采用,这里通过手动方式来安装RHCS软件包。

安装RHCS,主要安装的组件包有cman、gfs2和rgmanager,当然在安装这些软件包时可能需要其它依赖的系统包,只需按照提示进行安装即可 ,下面是一个安装清单,在集群的四个节点分别执行 :

#install cman

rpm -ivh perl-XML-NamespaceSupport-1.09-1.2.1.noarch.rpm

rpm -ivh perl-XML-SAX-0.14-8.noarch.rpm 

rpm -ivh perl-XML-LibXML-Common-0.13-8.2.2.i386.rpm

rpm -ivh perl-XML-LibXML-1.58-6.i386.rpm 

rpm -ivh perl-Net-Telnet-3.03-5.noarch.rpm

rpm -ivh pexpect-2.3-3.el5.noarch.rpm

rpm -ivh openais-0.80.6-16.el5_5.2.i386.rpm

rpm -ivh cman-2.0.115-34.el5.i386.rpm

#install ricci

rpm -ivh modcluster-0.12.1-2.el5.centos.i386.rpm 

rpm -ivh ricci-0.12.2-12.el5.centos.1.i386.rpm 

#install gfs2

rpm -ivh   gfs2-utils-0.1.62-20.el5.i386.rpm

#install rgmanager

rpm -ivh  rgmanager-2.0.52-6.el5.centos.i386.rpm

5、在集群节点安装配置iSCSI客户端 

安装iSCSI客户端是为了和iSCSI-target服务端进行通信,进而将共享磁盘导入到各个集群节点,这里以集群节点web1为例,介绍如何安装和配置iSCSI,剩余其它节点的安装和配置方式与web1节点完全相同 。

iSCSI客户端的安装和配置非常简单,只需如下几个步骤即可完成:

[root@web1 rhcs]# rpm -ivh iscsi-initiator-utils-6.2.0.871-0.16.el5.i386.rpm

[root@web1 rhcs]# /etc/init.d/iscsi restart

[root@web1 rhcs]# iscsiadm -m discovery -t sendtargets -p 192.168.12.246

[root@web1 rhcs]# /etc/init.d/iscsi restart

[root@web1 rhcs]# fdisk -l

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

64 heads, 32 sectors/track, 10240 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

Disk /dev/sdb doesn't contain a valid partition table

通过fdisk的输出可知,/dev/sdb就是从iSCSI-target共享过来的磁盘分区。

至此,安装工作全部结束。

1.大致的步骤如上 具体的步骤 我们看图实验操作

wKioL1RDMjXAXYREAAPhrhghNlM073.jpg

大家可以看到我这里少创建了mysql 因为机器的原理 我就开了5个 他和web的方式一样 大家会web的负载 就会mysql 

在每台服务器上的hosts文件下 做本地解析

然后在存储端 安装luci 步骤我在上面介绍了


两台节点上分别关闭selinux、iptables和NetworkManager

iptables -F
service iptables save
chkconfig iptables off
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
chkconfig NetworkManager off


2.接下来在集群节点安装RHCS软件包 上面也有介绍加依赖包 也可以使用yum

yum install ricci rgmanager cman -y
chkconfig ricci on
chkconfig rgmanager on
chkconfig cman on
service ricci start
service rgmanager start
service cman start


3.接下来我们在储存服务器上初始化luci 步骤在上面也有

我在做到这一步初始化的时候郁闷的要死 没有这条命令 结果百度半天说 命令取消了 可以直接使用root


[root@luci /]# yum install luci -y
[root@luci /]# chkconfig luci on
[root@luci /]# service luci start
Point your web browser to htt
ps://域名:8084 (or equivalent) to access luci


                     在两台节点上给ricci用户设置与root相同的密码
                     [root@gfs1 /]# passwd ricci

这时,你就可以用https://域名:8084(或https://192.168.12.246:8084)登陆集群web管理界面了,以root登陆即可

wKioL1RBWfGDPzheAAIawu3OH9M783.jpg

转到manage cluster界面

spacer.gifspacer.gifspacer.gifwKioL1RDq03iYBY0AAFgO7Xa6l0597.jpg点击Create,创建集群

wKiom1RDq42w9pl_AAGLEpu0TbI764.jpg此处密码为ricci密码

wKioL1RDrC3QS9_vAAHytPXMIW8613.jpg转到Fence Devices创建fence设备,因为不是用的服务器,没有fence设备,我随意建了一个SRF,实际生产环境中,必须使用fence硬件设备

wKiom1RDrECzSgn7AAFyIHcrBkw371.jpg

回到nodes菜单下,点击v1.domain.com,出现节点详情后点击add fence method添加一个method, 点击add fence instance,添加刚才设定的SRF

wKiom1RDrLDDqY14AAC3CISKTA0105.jpg

wKioL1RDrRrD7towAADaewqzjtA237.jpg

wKioL1RDrTjit9QaAADFRTfVP3k331.jpg

wKioL1RDrVCwTzvxAADiFQ2FKHE051.jpg

存储服务器

2.安装scsi-target-utils软件提供iscsi服务

yum install scsi-target-utils

wKioL1RDNiWjyHpdAATkAS3W15c853.jpg

存储服务上挂载10G 做共享用的

3.修改/etc/tgt/targets.conf,添加:
<target iqn.2011-06.com.domain:server.target1>
backing-store /dev/xvdb
</target>

4.重启tgtd服务,并将其设为开机启动:

/etc/init.d/tgtd restart
chkconfig tgtd on

ISCSI客户机

1.安装iscsi客户端软件iscsi-initiator-utils
[root@v1 ~]# yum install iscsi-initiator-utils

2.发现服务器192.168.12.246的iscsi共享卷

iscsiadm -m discovery -t sendtargets -p 192.168.12.246

3.登录ISCSI存储:
iscsiadm -m node -T iqn.2011-06.com.domain:server.target1 -p 192.168.12.246:3260 -l

1、查看iscsi的状态:
[root@desktop54 node1]# /etc/init.d/iscsi status    (node1的状态)
iSCSI Transport Class version 2.0-870
version 2.0-872
Target: iqn.2012-03.com.example:kevin
    Current Portal: 192.168.0.24:3260,1
    Persistent Portal: 192.168.0.24:3260,1
        **********
        Interface:
        **********
        Iface Name: default
        Iface Transport: tcp
        Iface Initiatorname: iqn.1994-05.com.RedHat:86d532367ca0
        Iface IPaddress: 192.168.0.54
        Iface HWaddress: <empty>
        Iface Netdev: <empty>
        SID: 2
        iSCSI Connection State: LOGGED IN
        iSCSI Session State: LOGGED_IN
        Internal iscsid Session State: NO CHANGE
        ************************
        Negotiated iSCSI params:
        ************************
        HeaderDigest: None
        DataDigest: None
        MaxRecvDataSegmentLength: 262144
        MaxXmitDataSegmentLength: 8192
        FirstBurstLength: 65536
        MaxBurstLength: 262144
        ImmediateData: Yes
        InitialR2T: Yes
        MaxOutstandingR2T: 1
        ************************
        Attached SCSI devices:
        ************************
        Host Number: 3    State: running
        scsi3 Channel 00 Id 0 Lun: 0
        scsi3 Channel 00 Id 0 Lun: 1
            Attached scsi disk sdb    (这里发现为sdb)    State: running

[root@desktop86 node2]# service iscsi status     (node2的状态)
iSCSI Transport Class version 2.0-870
version 2.0-872
Target: iqn.2012-03.com.example:kevin
    Current Portal: 192.168.0.24:3260,1
    Persistent Portal: 192.168.0.24:3260,1
        **********
        Interface:
        **********
        Iface Name: default
        Iface Transport: tcp
        Iface Initiatorname: iqn.1994-05.com.redhat:12546582ea96
        Iface IPaddress: 192.168.0.85
        Iface HWaddress: <empty>
        Iface Netdev: <empty>
        SID: 2
        iSCSI Connection State: LOGGED IN
        iSCSI Session State: LOGGED_IN
        Internal iscsid Session State: NO CHANGE
        ************************
        Negotiated iSCSI params:
        ************************
        HeaderDigest: None
        DataDigest: None
        MaxRecvDataSegmentLength: 262144
        MaxXmitDataSegmentLength: 8192
        FirstBurstLength: 65536
        MaxBurstLength: 262144
        ImmediateData: Yes
        InitialR2T: Yes
        MaxOutstandingR2T: 1
        ************************
        Attached SCSI devices:
        ************************
        Host Number: 3    State: running
        scsi3 Channel 00 Id 0 Lun: 0
        scsi3 Channel 00 Id 0 Lun: 1
            Attached scsi disk sda    (发现为sda,源存储为vda)    State: running

2、在节点node1和node2上配置
[root@desktop54 node1]# lvmconf --enable-cluster    (启动CLVM的集成cluster锁)
[root@desktop54 node1]# chkconfig clvmd on
[root@desktop54 node1]# service clvmd start    (clvm对lvm有效哦)
Activating VG(s):   No volume groups found
                                                           [  OK  ]

之后使用fdisk -l 在节点上可以看到多了一块10G的硬盘

wKioL1RDPZbhn7jxAAOh16OcEKE029.jpg


接下来我们先给lvs+keepalived 安装配置好 具体步骤我上篇有介绍 在写就重复了

wKiom1RDS7rBrT3QAAPE_FbPSKs611.jpg

看 虚拟ip233 我们这就完成了主备


之后我们在230上操作如下

创建LVM
1.创建物理卷
[root@v1 ~]# pvcreate /dev/sda 
2.查看物理卷
[root@v1 ~]# pvdisplay 
3.创建卷组v g1
[root@v1 ~]# vgcreate vg1 /dev/sda 
4.查看卷组
[root@v1 ~]# vgdisplay
5.创建逻辑卷lv1
[root@v1 ~]# lvcreate -L 10G -n lv1 vg1
-L 10G指定大小 –n lv1指定名称 vg1指定所在卷组
6.现在在两台节点上手动重启/etc/clvmd服务:
[root@v1 ~]# /etc/init.d/clvmd restart
7.在两边主机上都可以看到新建的lvm卷

[root@web1 ~]#  mkfs.gfs2 -p lock_dlm -t kevin_cluster:gfs2 -j 3 /dev/vg1/lv1

kevin_cluster是群集名字

This will destroy any data on /dev/vg1/lv1.

It appears to contain: symbolic link to `../dm-2'


Are you sure you want to proceed? [y/n] y


Device:                    /dev/vg1/lv1

Blocksize:                 4096

Device Size                9.00 GB (2359296 blocks)

Filesystem Size:           9.00 GB (2359294 blocks)

Journals:                  3

Resource Groups:           36

Locking Protocol:          "lock_dlm"

Lock Table:                "kevin_cluster:gfs2"

UUID:                      e0fa9331-6479-30b0-7249-670823921408

『kevin_cluster:gfs2这个kevin_cluster就是集群的名字,gfs2是定义的名字,相当于标签吧。-j是指定挂载这个文件系统的主机个数,不指定默认为1即为管理节点的。这里实验有两个节点,加上管理主机为3』

接下来 节点安装apache

挂载GFS文件系统
在挂载之前将RHCS上apache服务停掉
Services 里将apache服务disabled掉。
[root@desktop54 node1]# mount.gfs2 /dev/vg1/lv1 /var/www/html/
如果这里出现类似『fs is for a different cluster error mounting lockproto lock_dlm』错误,查看日志文件:tail -n1 /var/log/messages,当前集群名字为current="kevin_cluster",上一步重新格式化,修改集群名就好了。

接下来测试

wKioL1RDn6KhtMqkAANZEonjsT8572.jpg

我们在192.168.12.230html下的建设文件 都会同步到192.168.12.240上 看图

wKiom1RDn9WgK6E7AAKP9jX3ZuU301.jpg

接下来 我们把网站指向虚拟ip 

wKioL1RDqFWiVbduAAEb3MRLfMQ227.jpg

我们接下来试试负载 我把主lvs的节点服务down了 外加把web的服务down了 网页照样可以访问

而且当用户在网站上传文件的时候 就算主web down了 数据不影响 继续在web2上

wKiom1RDqNuBBrInAAQ03UtTdZs682.jpg

wKioL1RDqUugIWteAAV13j8CBls885.jpg

wKiom1RDqeaT2wRtAADV2ZrLYd8706.jpg