一、RHCS集群的组成与结构

RHCS集群组成:

    RHCS是一个集群工具的集合,主要有下面几大部分组成:

    1. 集群架构管理器

       这是RHCS集群的一个基础套件,提供一个集群的基本功能,使各个节点组成集群一起工作,具体包括分布式集群管理器(CMAN)、成员关系管理、锁管理(DLM)、配置文件管理和栅设备(Fence)。

    2. 高可用服务管理器

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

    3. 集群配置管理工具

       RHCS可以通过Luci来配置和管理RHCS集群。Luci是一个基于Web的集群配置方式,通过Luci可以轻松的搭建一个功能强大的集群系统。

    4. LVS

       LVS是一个开源的负载均衡软件,利用LVS可以将客户端的请求根据指定的负载均衡策略和算法合理的分配到各个服务节点,实时地、动态地、智能地分担负载。

    5. GFS (Gllobal FileSystem)

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

    6. CLVM (ClusterLogical Volume Manager)

       集群逻辑卷管理,是LVM的扩展,这种扩展允许集群中的机器使用LVM来管理共享存储。

    7. iSCSI

       即Internet SCSI,是IETF制定的一项标准,用于将SCSI数据块映射为以太网数据包。它是一种基于IP Storage理论的存储技术。RHCS可以通过iSCSI技术来导出和分配共享存储的使用。

    8. GNBD (Global NetworkBlock Device)

       全局网络模块,是GFS的一个补充组件,用于RHCS分配和管理共享存储,现在GNBD已经停止了开发,使用GNBD的人越来越少了。

RHCS集群结构:

    RHCS集群整体上分为3大部分:高可用性、负载均衡和存储集群。

  典型集群框图:

Cluster node、Failover Domain、Service

  整个结构分为三层,最上层为高可用的LVS负载均衡层;中间一层是Real Server层,也就是集群服务节点部分;最下边为共享存储层,主要用于为GFS文件系统提供共享存储空间,可以通过GNBD实现,也可以通过iSCSI技术实现。

iscsi和gfs2群集文件系统_第1张图片

高可用性附加组建硬件

iscsi和gfs2群集文件系统_第2张图片

网页服务器集群

iscsi和gfs2群集文件系统_第3张图片

二、使用环境的初始化

各个node要有 IP Hostname(主机名)、 /etc/hosts(添加解析,集群中每个节点都得有)
需要关闭 NetworkManagerIptablesSelinux

配置yum

实验配置cam,rgmanger.ricci.lucci.gfs2-utils

实验环境redhat6.6系统

1)需要安装的软件

在配置中ricci在所有的节点安装

lucci只在一个节点安装,通过web界面配置,只要安装了ricci的为其在添加节点的时候初始化和安装启动群架的软件

HA

Node1 Node1.contoso.com 10.35.46.195

Node1 Node2.contoso.com 10.35.46.185

Node1 Node3.contoso.com 10.35.46.175

node4.contoso.com 10.35.46.165 管理主机和iscsi的服务端

 

RHCS:

Cman.rgmanager,luci .ricci

4个软件只需要安装2个其他的通过luci通过web添加节点时初始化ricc自己安装

     luci 在一个节点上安装就可以了,可以用通过其他节点安装ricci进行相同的配置

     ricci所有的节点都必须安装

三、开始安装配置

node4管理主机

node1.node2.node3:集群节点

配置每一个群集节点主机名


[root@node1 ~]# cat /etc/hosts   

10.35.46.195 node1.contoso.com node1

10.35.46.185 node2.contoso.com node2

10.35.46.175 node3.contoso.com node3

集群每一个节点上:

#yum install ricci -y

#passwd ricci    #设置ricci密码 添加节点使用的密码就是这个密码

#/etc/init.d/ricci start          #启动ricci端口为11111

#chkconfig ricci on

管理主机上:

[root@ty1 cluster]#yum install luci -y          #安装luci,使用web方式配置集群

[root@ty1 cluster]# /etc/init.d/luci start

Start luci...                                              [  OK  ]

Point your web browser to https://node1.contoso.com:8084 (or equivalent) to access luci



https://node1.contoso.com :8084  登录密码使用系统管理root用户与其密码

iscsi和gfs2群集文件系统_第4张图片

iscsi和gfs2群集文件系统_第5张图片创建群集名称,加入3个节点

iscsi和gfs2群集文件系统_第6张图片iscsi和gfs2群集文件系统_第7张图片


[root@node1 ~]# clustat   查看群集节点是否运行正常 

Cluster Status for webtest@ Sat May 14 21:23:57 2016  群集名称

Member Status: Quorate

 

 Member Name                                                ID   Status

 ------ ----                                                ---- ------

 node1.contoso.com                                               1 Online, Local,

 node2.contoso.com                                              2 Online,

 node3.contoso.com                                              3 Online,

四、添加fence设备

 

Fence技术”核心在于解决高可用集群在出现极端问题情况下的运行保障问题,在高可用集群的运行过程中,有时候会检测到某个节点功能不正常,比如在两台高可用服务器间的心跳线突然出现故障,这时一般高可用集群技术将由于链接故障而导致系统错判服务器宕机从而导致资源的抢夺,为解决这一问题就必须通过集群主动判断及检测发现问题并将其从集群中删除以保证集群的稳定运行,Fence技术的应用可以有效的实现这一功能

 

添加一个fence,这儿的fence可能我添加的跟大家实际中演示的可能不太一样所有,这儿就不做演示

iscsi和gfs2群集文件系统_第8张图片

群集配置完成了

五、在node4上配置iscsi服务

下面的配置都是在node4上使用的

配置iscsi服务端

实现准备好一块磁盘 添加了一块20G /dev/sdb

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

[root@node1 ~]# /etc/init.d/tgtd start

[root@node1 ~]# cat /etc/tgt/targets.conf

    backing-store /dev/sdb

    initiator-address 10.35.46.0/24        绑定可以挂在的ip地址


在3个节点上安装iscsi的client

 [root@node1 ~]# yum install iscsi-initiator-utils -y ; ssh  node2 'yum install iscsi-initiator-utils -y'; ssh  node3 'yum install iscsi-initiator-utils -y'  安装iscsiclient

发现iscsi

[root@node1 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 10.35.46.165 --discover ; ssh node2 'iscsiadm --mode discoverydb --type sendtargets --portal 10.35.46.165 --discover'; ssh node3 'iscsiadm --mode discoverydb --type sendtargets --portal 10.35.46.165 --discover'

10.35.46.195:3260,1 iqn.2016-05.com.contoso:disk1

10.35.46.195:3260,1 iqn.2016-05.com.contoso:disk1

10.35.46.195:3260,1 iqn.2016-05.com.contoso:disk1 

登录iscsi

[root@node1 ~]# iscsiadm --mode node --targetname iqn.2016-05.com.contoso:disk1 --portal 10.35.46.165:3260 --login ; ssh node2 'iscsiadm --mode node --targetname iqn.2016-05.com.contoso:disk1 --portal 10.35.46.165:3260 --login'; ssh node3 'iscsiadm --mode node --targetname iqn.2016-05.com.contoso:disk1 --portal 10.35.46.165:3260 --login'

格式化磁盘一个分区使1个分区10G,

[root@node3 ~]# fdisk /dev/sdb

 iscsi和gfs2群集文件系统_第9张图片

[root@node1 ~]# fdisk -l /dev/sdb       

Disk /dev/sdb: 21.5 GB, 21467948544 bytes

64 heads, 32 sectors/track, 20473 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x27cd42a2


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1       10241    10486768   83  Linux

[root@node1 ~]# partx /dev/sdb            格式化完了记得 重读一下分区信息


三块磁盘盘都都能看到

[root@node4 ~]#  fdisk -l | grep /dev/sdb ; ssh node2 'fdisk -l | grep /dev/sdb '; ssh node3 'fdisk -l | grep /dev/sdb'  

Disk /dev/sdb: 21.5 GB, 21467948544 bytes

/dev/sdb1               1       10241    10486768   83  Linux

Disk /dev/sdb: 21.5 GB, 21467948544 bytes

/dev/sdb1               1       10241    10486768   83  Linux

Disk /dev/sdb: 21.5 GB, 21467948544 bytes

/dev/sdb1               1       10241    10486768   83  Linux


六、配置gfs2 

所有节点都要安装gfs2

[root@node1 ~]# yum install gfs2-utils -y; ssh node2 'yum install gfs2-utils -y '; ssh node3 'yum install gfs2-utils -y '

将刚刚上面格式化iscsi一块磁盘,格式化为gfs2的格式

[root@node2 ~]# mkfs.gfs2 –h   获取帮助

[root@node2 ~]#  rpm -ql gfs2-utils 查看生成了那些命令

mkfs.gfs2 

-b 指定块大小

-j:  指定日志区域的个数,有几个就能够被几个几点挂载

-J:  指定日志区域的大小默认为128MB   

-p:{lock_dlm|lock_nolock}:  锁,不锁

-t :锁表的名称,格式为clustername:locktablename clustername为当前所在的集群的名称,locktablename要在当前集群唯一

-D显示详细信息

[root@node1 ~]# mkfs.gfs2 -j 3 -p lock_dlm –twebtest:webtest /dev/sdb1

This will destroy any data on /dev/sdb1.

It appears to contain: ACB archive data


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


Device:                    /dev/sdb1

Blocksize:                 4096

Device Size                10.00 GB (2621692 blocks)

Filesystem Size:           10.00 GB (2621689 blocks)

Journals:                  3

Resource Groups:           41

Locking Protocol:          "lock_dlm"

Lock Table:                "RHCS:RHCS"

UUID:                      fb629cb6-bb19-47af-ff90-b45bcc604a5a

[root@node1 ~]# mount /dev/sdc1 /mnt       挂在不用指定文件系统默认会指定 

[root@node1 ~]# mont 

-bash: mont: command not found

[root@node1 ~]# mount 

/dev/mapper/vg_node1-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

none on /sys/kernel/config type configfs (rw)

/dev/sdc1 on /mnt type gfs2 (rw,seclabel,relatime,hostdata=jid=0)

[root@node1 ~]# cd /mnt 

[root@node1 mnt]# touch 1        创建了一个文件

[root@node1 mnt]# ls

1

[root@node2 ~]# mount -t gfs2 /dev/sdc1 /mnt  让node2也挂在

[root@node2 ~]# cd /mnt/

[root@node2 mnt]# ls           文件同步了

1  

[root@node2 mnt]# touch 2                 在node2上创建一个文件

[root@node2 mnt]# ls

1  2

[root@node1 mnt]# ls   在                在node1上查看数据也同步了

12


群集文件的好处,一旦发现数据立即同步,而且一旦一个节点在写的时候会发出锁通知其他节点并锁定文件,等这个节点完成数据后,其他节点才能后写入数据

/usr/sbin/gfs2_tool –h

[root@node1 mnt]# gfs2_tool journals /mnt查看信息

journal2 - 128MB

journal1 - 128MB

journal0 - 128MB

[root@node3 cluster]# rpm -ql gfs2-utils

gfs2_jadd 日志区域不过在增加几个,就是可以在同时挂在的节点有几个

[root@node3 cluster]# gfs2_jadd -j 1 /dev/sdb2