说明:由于配置节点比较多,有些操作使用简单的ansible部署,同时为了能清淅明白操作步骤没有写成playbook;



拓扑图:

RHCS高可用部署以及GFS2/CLVM集群文件系统应用_第1张图片


1、确保所有节点时间同步;

[root@ansible ~]# ansible group1 -a 'date'
server13.neo.com | success | rc=0 >>
Sat Jul 26 10:31:49 CST 2014
server11.neo.com | success | rc=0 >>
Sat Jul 26 10:31:50 CST 2014
server12.neo.com | success | rc=0 >>
Sat Jul 26 10:31:50 CST 2014

2、确保NetworkManager己关闭;

[root@ansible ~]# ansible group1 -a 'chkconfig --list NetworkManager'
server11.neo.com | success | rc=0 >>
NetworkManager     0:off    1:off    2:off    3:off    4:off    5:off    6:off
server13.neo.com | success | rc=0 >>
NetworkManager     0:off    1:off    2:off    3:off    4:off    5:off    6:off
server12.neo.com | success | rc=0 >>
NetworkManager     0:off    1:off    2:off    3:off    4:off    5:off    6:off



一、RHCS高可用部署


1、RHCS管理节点安装luci组件

[root@ansible ~]# yum install -y luci --disablerepo=epel
[root@ansible ~]# service luci start
[root@ansible ~]# netstat -tunlp |grep 8084

2、RHCS集群节点安装ricci组件

[root@ansible ~]# ansible group1 -m yum -a 'name=ricci state=present disablerepo=epel'
[root@ansible ~]# ansible group1 -m service -a 'name=ricci state=started enabled=yes'
[root@ansible ~]# ansible group1 -m shell -a 'netstat -tunlp |grep ricci'


3、为每个RHCS集群节点添加web服务且提供主页文件

[root@ansible ~]# ansible group1 -m yum -a 'name=httpd state=present'
[root@ansible ~]# ansible group1 -m shell -a 'echo "

`uname -n`

" >/var/www/html/index.html' [root@ansible ~]# ansible group1 -m service -a 'name=httpd state=started enabled=yes' [root@ansible ~]# ansible group1 -m shell -a 'echo asdasd |passwd --stdin ricci'


4、使用web GUI界面配置高可用服务

1)在浏览器中访问https://192.168.100.200:8084;

2)使用root帐号密码登陆;

3)创建集群服务

RHCS高可用部署以及GFS2/CLVM集群文件系统应用_第2张图片

注意Node Name中的Password是我们为ricci添加的密码;

4)定义故障域"FailOver Domains",且定义“Priority”值;

5)添加资源“Resources”,这里lsb风格的服务需指定为Scripts;添加VIP与Httpd两个资源;

6)定义组“Group”,把VIP与httpd添加进组中;

7)启动组;

8)模拟故障,在web GUI界面切换组资源在节点上的运行;

我们也可以在shell命令行下查看节点状态:

[root@server11 ~]# clustat 
Cluster Status for My_Cluster @ Sat Jul 26 11:28:36 2014
Member Status: Quorate

 Member Name                                                     ID   Status
 ------ ----                                                     ---- ------
 server11.neo.com                                                    1 Online, Local, rgmanager
 server12.neo.com                                                    2 Online, rgmanager
 server13.neo.com                                                    3 Online, rgmanager

 Service Name                                                     Owner (Last)                                                     State         
 ------- ----                                                     ----- ------                                                     -----         
 service:webserver                                                server13.neo.com                                                 started

至此一个简单的web高可用集群服务部署完成。


相关的命令行管理工具:

clusvcadm

cman_tool

ccs_tool

cman的配置文件在/etc/cluster/cluster.conf



二、部署GFS2/CLVM集群文件系统

由于上面部署GFS2使用的是ricci和luci套件,而且使用了CONGA图型化配置,下面我们部置集群文件系统不需要用到图型化配置,所以还是手动安装就行;


1、在集群节点上安装cman,corosync,rgmanager

# ansible group1 -m yum -a 'name=cman state=present'
# ansible group1 -m yum -a 'name=corosync state=present'
# ansible group1 -m yum -a 'name=rgmanager state=present'

2、在任一集群节点上创建集群,且添加集如节点信息;

    下面这里必须手动创建,默认安装完后是没有配置文件,CMAN也无法启动;

[root@server11 ~]# ccs_tool create My_Cluster  
[root@server11 ~]# ccs_tool addnode server11.neo.com -n 1 -v 1
[root@server11 ~]# ccs_tool addnode server12.neo.com -n 2 -v 1
[root@server11 ~]# ccs_tool addnode server13.neo.com -n 3 -v 1
[root@server11 ~]# ccs_tool lsnode  //查看集群节点;

Cluster name: My_Cluster, config_version: 4

Nodename                        Votes Nodeid Fencetype
server11.neo.com                   1    1    
server12.neo.com                   1    2    
server13.neo.com                   1    3   

[root@server11 ~]# cat /etc/cluster/cluster.conf  //查看CMAN配置文件;



  
      
      
      
  

  
  

  
      
      
  


将server11上的cluster.conf复制到其它集群节点://以下两步,我记得以前在RHEL5上是可以自动传送给其它节点的,但不知为何RHEL6无法自动传送,所以我们还是手动传送给其它集群节点;
[root@server11 ~]# scp -p /etc/cluster/cluster.conf server12:/etc/cluster/ 
[root@server11 ~]# scp -p /etc/cluster/cluster.conf server13:/etc/cluster/

3、启动服务

[root@ansible ~]# ansible group1 -m service -a 'name=cman state=started enabled=yes'  //设置CMAN服务启动且开机自动启动;


4、安装配置ISCSI服务端与客户端

[root@ansible ~]# ansible group1 -m yum -a 'name=iscsi-initiator-utils state=present' //在各集群节点上安装iscsi客户端软件;

[root@server14 ~]# yum install scsi-target-utils -y  //在iscsi服务器上安装配置ISCSI服务端
[root@server14 ~]# cat /etc/tgt/targets.conf     //配置文件;
default-driver iscsi

    backing-store /dev/sdb1
    backing-store /dev/sdb2
    initiator-address 192.168.100.0/24

[root@server14 ~]# service tgtd start        //启动iscsi服务端;
Starting SCSI target daemon:                               [  OK  ]
[root@server14 ~]# chkconfig tgtd on        //设置开机自动启动;
[root@server14 ~]# tgtadm -L iscsi -m target -o show   //查看状态信息;
Target 1: iqn.2014-07.com.neo:server14.target2
    System information:
        Driver: iscsi
        State: ready
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 10742 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb1
            Backing store flags: 
        LUN: 2
            Type: disk
            SCSI ID: IET     00010002
            SCSI SN: beaf12
            Size: 10742 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb2
            Backing store flags: 
    Account information:
    ACL information:
        192.168.100.0/24
为每个集群节点配置独有的iscsi客户端名称;
[root@ansible ~]# ansible group1 -m shell -a 'echo "InitiatorName=`iscsi-iname -p iqn.2014-07.com.neo`" >/etc/iscsi/initiatorname.iscsi'
检查是否正确;
[root@ansible ~]# ansible group1 -m shell -a 'cat /etc/iscsi/initiatorname.iscsi'
server11.neo.com | success | rc=0 >>
InitiatorName=iqn.2014-07.com.neo:bb39eb84c2
server12.neo.com | success | rc=0 >>
InitiatorName=iqn.2014-07.com.neo:3032a51c13da
server13.neo.com | success | rc=0 >>
InitiatorName=iqn.2014-07.com.neo:c82593bb8d
[root@ansible ~]# ansible group1 -m shell -a 'iscsiadm -m discovery -p 192.168.100.14 -t sendtargets'  //集群节点都去discovery一次目标主机;
[root@ansible ~]# ansible group1 -m shell -a 'iscsiadm -m node -T iqn.2014-07.com.neo:server14.target2 -p 192.168.100.14 -l'  //集群节点登陆,连接服务端;


[root@ansible ~]# ansible group1 -m yum -a 'name=gfs2-utils state=present' //安装GFS2组件;

以下为选择集群中任一节点操作:
[root@server11 ~]# fdisk /dev/sdb
[root@server11 ~]# partx -a /dev/sdb
[root@server11 ~]# mkfs.gfs2 -h
Usage:
mkfs.gfs2 [options]  [ block-count ]
Options:
  -b        Filesystem block size
  -c           Size of quota change file
  -D               Enable debugging code
  -h               Print this help, then exit
  -J           Size of journals
  -j          Number of journals   //设定日志文件系统个数,有多少个集群节点设置多少个;
  -K               Don't try to discard unused blocks
  -O               Don't ask for confirmation
  -p         Name of the locking protocol //指定锁类型,创建集群文件系统我们使用lock_dlm;
  -q               Don't print anything
  -r           Resource Group Size
  -t         Name of the lock table //指定锁表名称:ClusterName:string
  -u           Size of unlinked file
  -V               Print program version information, then exit

   
[root@server11 ~]# mkfs.gfs2 -j 3 -t My_Cluster:myweb -p lock_dlm /dev/sdb1  // 创建集群文件系统; 
This will destroy any data on /dev/sdb1.
It appears to contain: data
Are you sure you want to proceed? [y/n] y
Device:                    /dev/sdb1
Blocksize:                 4096
Device Size                10.00 GB (2622460 blocks)
Filesystem Size:           10.00 GB (2622458 blocks)
Journals:                  3
Resource Groups:           41
Locking Protocol:          "lock_dlm"
Lock Table:                "My_Cluster:myweb"
UUID:                      c6d9c780-9a94-e245-0471-a16c55e6b1c1


[root@server11 ~]# ansible group1 -m shell -a 'mount /dev/sdb1 /root/gfs2' // 所有节点都挂载此集群文件系统,且都可以同时读取文件;


CLVM集群逻辑卷文件系统


这里我们继续上面GFS2文件系统环境进行;

每个集群节点上安装lvm2-utils

[root@ansible ~]# ansible group1 -m yum -a 'name=lvm2-cluster state=present disablerepo=epel'
[root@ansible ~]# ansible group1 -m shell -a 'lvmconf --enable-cluster'  //启用lvm集群功能,默认是不启用的;这里也可以直接去修改/etc/lvm/lvm.conf中“locking-type=3”;
[root@ansible ~]# ansible group1 -m service -a 'name=clvmd state=started enabled=yes' //设置开机自动启动;

同样的,在任一集群节点上创建一个新的分区,然后创建PV,VG,LV等;

[root@server11 ~]# fdisk /dev/sdc
Command (m for help): n
p
Partition number (1-4): 1
First cylinder (1-1020, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1020, default 1020): +1G

Command (m for help): n
p
Partition number (1-4): 2
Last cylinder, +cylinders or +size{K,M,G} (206-1020, default 1020): +1G
Command (m for help): w

在每个节点上刷新内核重识分区 (由于ISCSI磁盘是先连接登陆,所以集群中某一节点对其分区,另外节点内核是无法识别的);
[root@ansible ~]# ansible group1 -m shell -a 'partx -a /dev/sdc'

[root@server11 ~]# pvcreate /dev/sdc1  //创建PV;
  Physical volume "/dev/sdc1" successfully created
[root@server11 ~]# vgcreate vg_clvm /dev/sdc1  //创建VG;
  Clustered volume group "vg_clvm" successfully created
[root@server11 ~]# lvcreate -L 1G -n lv_clvm vg_clvm  //创建LV;
  Logical volume "lv_clvm" created

  下面可以查看其它集群节点都可以看到server11上的操作结果;  
[root@ansible ~]# ansible group1 -m shell -a 'vgs'
server11.neo.com | success | rc=0 >>
  VG        #PV #LV #SN Attr   VSize  VFree
  vg_clvm     1   1   0 wz--nc  1.00g 4.00m
  vg_server   1   2   0 wz--n- 19.51g    0 

server12.neo.com | success | rc=0 >>
  VG        #PV #LV #SN Attr   VSize  VFree
  vg_clvm     1   1   0 wz--nc  1.00g 4.00m
  vg_server   1   2   0 wz--n- 19.51g    0 

server13.neo.com | success | rc=0 >>
  VG        #PV #LV #SN Attr   VSize  VFree
  vg_clvm     1   1   0 wz--nc  1.00g 4.00m
  vg_server   1   2   0 wz--n- 19.51g    0 

[root@ansible ~]# ansible group1 -m shell -a 'lvs'
server12.neo.com | success | rc=0 >>
  LV      VG        Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_clvm vg_clvm   -wi-a-----  1.00g                                             
  lv_root vg_server -wi-ao---- 17.57g                                             
  lv_swap vg_server -wi-ao----  1.94g                                             

server13.neo.com | success | rc=0 >>
  LV      VG        Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_clvm vg_clvm   -wi-a-----  1.00g                                             
  lv_root vg_server -wi-ao---- 17.57g                                             
  lv_swap vg_server -wi-ao----  1.94g                                             

server11.neo.com | success | rc=0 >>
  LV      VG        Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_clvm vg_clvm   -wi-a-----  1.00g                                             
  lv_root vg_server -wi-ao---- 17.57g                                             
  lv_swap vg_server -wi-ao----  1.94g                                             

  创建GFS2文件系统;
[root@server11 ~]# mkfs.gfs2 -j 3 -t My_Cluster:clvm -p lock_dlm /dev/mapper/vg_clvm-lv_clvm 
This will destroy any data on /dev/mapper/vg_clvm-lv_clvm.
It appears to contain: symbolic link to `../dm-2'

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

Device:                    /dev/mapper/vg_clvm-lv_clvm
Blocksize:                 4096
Device Size                1.00 GB (262144 blocks)
Filesystem Size:           1.00 GB (262142 blocks)
Journals:                  3
Resource Groups:           4
Locking Protocol:          "lock_dlm"
Lock Table:                "My_Cluster:clvm"
UUID:                      dfcd6df8-c309-9fba-c19f-3f8d174096d9