一、RHCS集群的组成与结构

RHCS集群组成

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

    1. 集群架构管理器

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

    2. 高可用服务管理器

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

    3. 集群配置管理工具

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

    4. LVS

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

    5. GFS (Gllobal File System)

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

    6. CLVM (Cluster Logical Volume Manager)

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

    7. iSCSI

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

    8. GNBD (Global Network Block Device)

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


RHCS集群结构

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

  典型集群框图:

164257521.png

  图一 Cluster node、Failover Domain、Service

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


164259337.png

  图二 Red Hat 高可用性附加组建硬件概述


164754752.png

   图三 网页服务器集群服务示例


二、使用环境的初始化

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

配置yum源 ,必须有这几个 Server, HighAvailability, LoadBalancer,ResilientStorage, ScalableFileSystem


三、开始安装配置

node1: 管理主机

node2、node3:集群节点

#cat /etc/hosts
  192.168.1.21  ty1.org
  192.168.1.22  ty2.org
  192.168.1.23  ty3.org


集群节点上:

yum install ricci -y
passwd ricci                 #设置ricci密码
/etc/init.d/ricci start          #启动ricci端口为11111

    设置开机启动

    chkconfig ricci on

管理主机上:

yum install luci -y          #安装luci,使用web方式配置集群
[root@ty1 cluster]# /etc/init.d/luci start
Start luci...                                              [  OK  ]
Point your web browser to https://ty1.org:8084 (or equivalent) to access luci


现在就可以web访问luci配置集群,使用的是https://ty1.org:8084

获取证书:

173947266.png


此处账户密码为管理主机的root及其密码

173646702.png


174717618.png


174739669.png


点击Create Cluster后,各node就开始安装集群所需要的包,可以在node2上查看

[root@ty2 ~]# ps aux | grep yum
root      1876 14.3 10.4 257372 52432 ?        R    00:23   0:05 /usr/bin/python /usr/bin/yum -y install cman rgmanager lvm2-cluster sg3_utils gfs2-utils
root      1933  0.0  0.1 103292   844 pts/0    S+   00:24   0:00 grep yum

出现如下图,则表示集群创建成功

175334885.png

在node2上使用clustat查看集群节点状态

180833908.png

现在rhel6集群就创建好了。。。


四、添加fence设备和集群web服务


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


以虚拟机和宿主机实现fence功能:


hostname ip KVM domain name

宿主机: ty.org 192.168.1.10

虚拟机: ty2.org 192.168.1.22 node2

ty3.org 192.168.1.23 node3


宿主机上配置:

需要安装fence包:

yum install fence-virtd-multicast fence-virtd fence-virtd-libvirt -y


[root@ty ~]# rpm -qa | grep fence
fence-virtd-multicast-0.2.3-13.el6.x86_64
fence-virtd-0.2.3-13.el6.x86_64
fence-virtd-libvirt-0.2.3-13.el6.x86_64

配置fence:

[root@ty ~]# fence_virtd -c

Module search path [/usr/lib64/fence-virt]:

Available backends:
libvirt 0.1
Available listeners:
multicast 1.1

Listener modules are responsible for accepting requests
from fencing clients.

Listener module [multicast]:

The multicast listener module is designed for use environments
where the guests and hosts may communicate over a network using
multicast.

The multicast address is the address that a client will use to
send fencing requests to fence_virtd.

Multicast IP Address [225.0.0.12]:

Using ipv4 as family.

Multicast IP Port [1229]:

Setting a preferred interface causes fence_virtd to listen only
on that interface. Normally, it listens on the default network
interface. In environments where the virtual machines are
using the host machine as a gateway, this *must* be set
(typically to virbr0).
Set to 'none' for no interface.

Interface [br0]:  //设置网络接口,据实际情况填

The key file is the shared key information which is used to
authenticate fencing requests. The contents of this file must
be distributed to each physical host and virtual machine within
a cluster.

Key File [/etc/cluster/fence_xvm.key]: //认证key

Backend modules are responsible for routing requests to
the appropriate hypervisor or management layer.

Backend module [libvirt]:

The libvirt backend module is designed for single desktops or
servers. Do not use in environments where virtual machines
may be migrated between hosts.

Libvirt URI [qemu:///system]:

Configuration complete.

=== Begin Configuration ===
backends {
libvirt {
uri = "qemu:///system";
}
}
listeners {
multicast {
interface = "br0";
port = "1229";
family = "ipv4";
address = "225.0.0.12";
key_file = "/etc/cluster/fence_xvm.key";
}
}
fence_virtd {
module_path = "/usr/lib64/fence-virt";
backend = "libvirt";
listener = "multicast";
}
=== End Configuration ===
Replace /etc/fence_virt.conf with the above [y/N]? y

创建fence认证key:

[root@ty ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1

/dev/urandom可以产生随机数

将key上传至集群节点node

[root@ty ~]#scp /etc/cluster/fence_xvm.key ty2.org:/etc/cluster

[root@ty ~]#scp /etc/cluster/fence_xvm.key ty3.org:/etc/cluster

[root@ty ~]#/etc/init.d/fence_virtd start //启动fence


接下来使用web设置节点fence

232301677.png

232303565.png

232305636.png

232307811.png

232309380.png

这一步的Domain为虚拟机名字(如下),各节点一定要对应好

232621537.png


设置好fence,就是如下显示

232311448.png


接下来就是测试fence功能,使集群某一节点出现问题(即使心跳连接断开),若fence设置正确,此节点就会由fence控制自动重启。

使用命令使一节点内核崩溃:echo -c > /proc/sysrq-trigger

223637809.png


内核崩溃,集群心跳连接就会断开,该节点若自动重启,即成功。



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


添加web服务

先在每个节点上都设置httpd

echo `hostname` > /var/www/html/index.html    //创建index.html文件

节点机上的httpd服务不用启动,集群会自动启动

使用web页面添加服务:


创建故障转移域

231047694.png

231050405.png

Prioritized 设定节点优先级
Restricted 指定运行某服务的节点主机
No Failback 勾选时,优先级高的节点主机宕机服务转移到其他节点,其恢复后,服务不再转移到该节点


添加资源

231052974.png


添加vip(虚拟ip)

231419299.png


添加Apache服务

231208862.png


创建service groups

231210494.png

231212903.png

Run Exclusive 专一的运行这一种service

Recovery Policy选择Relocate,服务节点出现问题,转移服务至其它节点


添加Resource到Service,(注意:先添加vip,再添加Apache服务,;两者处在同一级)

231214906.png


231536545.png

231541485.png

231544958.png

231546420.png


231606663.png


添加完后可以使用clustat命令在节点上查看service状态,已经运行,虽然使用/etc/init.d/httpd status 查看httpd状态为stop,但查看httpd端口已经开启运行

231608890.png


现在就可以web访问vip

110446162.png


命令:

clusvadm -e www        启动集群www服务enable,在哪个节点上执行,哪个节点运行此服务

clusvadm -d www        关闭集群www服务disable

clusvcadm -r www -m server60.example.com         //服务迁移到server60

clusvcadm -il              监控clustat



加入cluster后,若想要删除某一节点,需要先LeaveCluster,然后再Delete;若某一节点已经加入一个Cluster,现在想加入其他cluster,就必须先删除该节点/etc/cluster/cluster.conf文件(里边为节点的配置信息)


添加其他节点时可以遇到问题:

wKioL1MwFBmTBk56AAY2egbsR1M327.jpg


问题原因:

安装luci软件包时是使用的yum,yum源中包含了epel,在安装过程中使用了epel源里的包.epel源里的包是最新版本的,luci有些包不兼容.


解决办法:

shell>yum erase jabberpy.noarchpython-repoze-who-friendlyform.noarch python-tw-forms.noarch

shell>yum install luci–disablerepo=*epel*


启动luci遇到的问题:

wKioL1MwFIPyUo4vAAAvrkrQ1pU344.jpg

提示无法创建/var/lib/luci/data/luci.db

解决办法:touch /var/lib/luci/data/luci.db    手动添加


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


添加iSCSI共享存储


宿主机上创建iscsi共享磁盘:

lvcreate-L 2G -n demo vg_ty

安装iscsi

scsi-target-utils        server (宿主机)

iscsi-initiator-utils     client (虚拟机)

在宿主机上:

 #yum install scsi-target-utils

#vi/etc/tgt/targets.conf
 <targetiqn.2013-11.com.example:ty.target1>
backing-store /dev/vg_ty/node
initiator-address 192.168.1.13           //指定client,其他的不能访问
initiator-address192.168.1.14
</target>


#/etc/init.d/tgtdstart


在节点主机上(虚拟机中)


   #yum  install iscsi*

   

#iscsiadm-m discovery -t st -p 192.168.1.10            
    Startingiscsid:                                           [  OK  ]
    192.168.1.10:3260,1iqn.2013-11.com.example:ty.target1


//扫描iscsi主机共享磁盘,-t 指定type(sendtargets简写为st)-p指定ip


#iscsiadm -m node  -l           //登录,登录后在宿主机上执行tgt-admin -s命令就可以看到登录信息

   

#tgt-admin -s
    Target 1: iqn.2013-11.com.example:ty.target1
      System information:
            Driver: iscsi
            State: ready
     I_T nexus information:
        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: 2147 MB, Block size: 512
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                Backing store type: rdwr
                Backing store path: /dev/vg_ty/demo
                Backing store flags:
        Account information:
        ACL information:
            192.168.1.13
            192.168.1.14


现在可以使用fdisk-l 查看新加入的磁盘

 #fdisk-cu /dev/sda              //只需在一个节点上执行,所有节点同步,分区,t,8e



wKioL1MxiO6CtEr_AADeLgphifo445.jpg

   

#lvmconf --enable-cluster                     //使逻辑卷支持cluster

#/etc/init.d/clvmd restart

//只需在一个节点上执行,所有节点同步

#pvcreate /dev/sda1                    

   wKiom1MxiabiPgFoAAGTYH0E2X0965.jpg

c 支持集群功能,y---yes , n---no

#vgcreate -cy clustervg /dev/sda1

#lvcreate -L 1G -n lvcluster clustervg

在其他节点上使用pvsvgs等,可以查看创建的lvm分区,第一次若看不到,可以使用partprobe重读分区表

#mkfs.ext4 /dev/clustervg/lvcluster                          //只需在一个节点上执行

现在就可以挂载文件系统了,所有节点可以同时挂载,某节点做的变动,其他节点需要umount重新挂载才能同步

#mount/dev/clustervg/lvcluster /mnt/


在节点ty2.com上挂在并创建file文件

[root@ty2 ~]# mount /dev/clustervg/lvcluster /mnt/
[root@ty2 ~]# cd /mnt/
[root@ty2 mnt]# ls
lost+found
[root@ty2 mnt]# echo "test iscsi" > file
[root@ty2 mnt]# ls
file  lost+found
[root@ty2 mnt]# cat file
test iscsi

在节点ty3.com上挂载共享分区,可看到ty3.com上创建的文件file

[root@ty3 ~]# mount /dev/clustervg/lvcluster /mnt/
[root@ty3 ~]# ls
lianxi
[root@ty3 ~]# cd /mnt/
[root@ty3 mnt]# ls
file  lost+found
[root@ty3 mnt]# cat file
test iscsi


[root@ty3 ~]# cman_tool status
                           //查看集群信息
    Version: 6.2.0
    Config Version: 16
    Cluster Name: cluster
    Cluster Id: 63628
    Cluster Member: Yes
    Cluster Generation: 140
    Membership state: Cluster-Member
    Nodes: 2
    Expected votes: 3
    Total votes: 2
    Node votes: 1
    Quorum: 2 
    Active subsystems: 9
    Flags:
    Ports Bound: 0 11 177 
    Node name: ty4.com
    Node ID: 2
    Multicast addresses: 239.192.248.133
    Node addresses: 192.168.1.23


若想删除scsi-server主机的scsi共享磁盘,必须先使客户端退出登录,才可以

/etc/init.d/tgtstop,否则回报错,现在就可以删除server端的scsi磁盘分区了

#iscsiadm-m node -u           //退出iscsi
Loggingout of session [sid: 1, target: iqn.2013-11.com.example:ty.target1,portal: 192.168.1.10,3260]
Logout of[sid: 1, target: iqn.2013-11.com.example:ty.target1, portal:192.168.1.10,3260] successful.


#iscsiadm-m node -o delete             //删除