当前位置:文档之家› 基于RHEL6的RHCS红帽集群套件应用

基于RHEL6的RHCS红帽集群套件应用

基于RHEL6的RHCS红帽集群套件应用
基于RHEL6的RHCS红帽集群套件应用

毛毛雨:AM 3885999

RHCS 基于 RHEL6.0 x86_64(实验教程) 实验说明:所用的RHEL 版本均为 6.0 x86_64,宿主机支持虚拟化,内存不小于4G。

实验拓扑如下:

在本实验中,为了节省资源将 ISCSI-Target 也放到 manager 一个机器上了。

vmware 创建一个虚拟机,内存3G,按下图设置使得虚拟机也支持虚拟化,vmware workstation 版本不低于7:

蓝狐Linux系统培训中心

毛毛雨:AM 3885999

毛毛雨:AM 3885999

蓝狐Linux 系统培训中心

毛毛雨:AM 3885999

在这个虚拟机中装好 rhel6,ip192.168.0.200,作为 RHCS 的管理端,继续在其上安装 kvm,kvm 的安装请查看我之前写的关于 kvm 文档,kvm 安装好后,创建两 个 vm(virtual machine) ,桥接到 192.168.0.200 的物理网卡上,vm 上安装好 rhel6,ip 分别为192.168.0.201和 192.168.0.202,作为 RHCS 的节点,这样的拓扑设计 的原因是我们可以在 RHCS 中使用 fence-virsh 来fence 掉 kvm 管理的 RHCS 故障节点。

使用hostname 指令设置主机名,想重启之后生效别忘了/etc/sysconfig/network,因为本环境中没有使用DNS,所以在manager 上设置/etc/hosts 添加如下三行, 再 scp 到 web1 和web2。 [root@manager ~]# vim /etc/hosts

127.0.0.1

localhost.localdomain localhost ::1

localhost6.localdomain6 localhost6

192.168.0.200

https://www.doczj.com/doc/401186395.html, manager 192.168.0.201

https://www.doczj.com/doc/401186395.html, web1 192.168.0.202 https://www.doczj.com/doc/401186395.html, web2 manager、web1、web2 均关闭selinux、iptables。

毛毛雨:AM 3885999

在 manager上建 1个 target,2 个lun,用作导出 iscsi存储给节点使用。 主要步骤及指令如下:

fdisk 分出来两个分区sda5、6,大小为1G、10M,fdisk 之后使用 partx -a /dev/sda 重读分区,可以不用重启系统。

[root@manager ~]# yum install scsi-target-utils -y 安装iscsi-target 端

[root@manager ~]# chkconfig tgtd on ; /etc/init.d/tgtd start 随机启动;启动服务

[root@manager ~]# tgtadm -L iscsi -m target -o new -t 1 -T https://www.doczj.com/doc/401186395.html,.sswans:disk1 创建target

[root@manager ~]# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 1 -b /dev/sda5 创建lun1,对应sda5 分区

[root@manager ~]# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 2 -b /dev/sda6 创建lun2,对应sda6 分区

[root@manager ~]# tgtadm -L iscsi -m target -o bind -t 1 -I ALL 设置ACL 访问控制,ALL 为任意访问

[root@manager ~]# tgt-admin --dump > /etc/tgt/targets.conf dump 保存配置,以后每次重启都会生效 安装luci工具,RHCS 管理端,请配置好yum仓库,RHCS 相关的包在 iso 镜像中的 HighAvailability 和ResilientStroage中

[root@manager ~]# yum install luci -y

[root@manager ~]# chkconfig luci on ; /etc/init.d/luci start

Point your web browser to https://https://www.doczj.com/doc/401186395.html,:8084 to access luci 等节点安装好 ricci 后,可以使用这个 url 对节点进行管理和配置 节点web1、web2 上都执行如下动作,以web1为例:

[root@web1 ~]# yum install rgmanager -y 会自动安装 ricci、cman 等包

[root@web1 ~]# chkconfig ricci on ; /etc/init.d/ricci start

[root@web1 ~]# chkconfig NetworkManager off ; /etc/init.d/NetworkManager stop

[root@web1 ~]# chkconfig cman on ; chkconfig rgmanager on ; chkconfig modclusterd on

[root@web1 ~]# /etc/init.d/cman start ; /etc/init.d/rgmanager start;/etc/init.d/modclusterd start

使用浏览器打开luci的 url,新建一个集群,名为 sSWans,添加两个节点,一个名为web1,另一个名为 web2,因为之前在两个节点上都安装了 ricci、cman等包,

蓝狐Linux系统培训中心

毛毛雨:AM 3885999

毛毛雨:AM 3885999

所以单选 use locally installed packages,enable shared storage support 选项其实就是指的 gfs,我们在后面手动装包来实施,这里不勾选。

检查节点的服务状态,确定 cman、rgmanager、ricci、modcluster 服务处于 running 状态。如有问题,请注意查看节点的/var/log/message 日志进行排错。

点击菜单中的Failover Domains,添加一个热备切换域,名为 web_FD,勾选 no Failback,勾选web1,web2 两个节点。

点击菜单中的 Resources,添加一个 ip address 资源,ip为 192.168.0.252,这个 ip就是提供服务的虚拟 ip,再添加一个 script,名为 http,脚本路径/ etc/init.d/httpd。

点击菜单中的Services,添加一个服务,名为apache,选择刚创建的热备切换域web_FD,添加资源,把刚创建的 ip 资源和脚本资源添加进来,如果服务需要使用的 资源具有先后关系,那么需要将前提资源以子资源(add a child resource)的形式添加。

在两个节点上针对httpd写一个index.html的页面,web1上 [root@web1 ~]# echo web1 > /var/www/html/index.html ,web2的index.html内容为web2, 这样待会服务启动后,我们去访问这个 apache 服务,可以通过访问到的内容来检测集群提供的服务是由哪个节点完成的。

在两个节点上都监控日志tail -f /var/log/message,启动这个apache服务,查看服务启动时节点的信息,有助于更好的理解 rhcs和增加排错经验。如无意外,此时 应该可以看到apache 服务会在其中一个节点上启动,我的启动在 web1 上,在 Services 菜单可以看到,在任意节点上用指令clustat 查看更快更方便。

做到这里,我们完成了一个rhcs 的最小部署,也是一个特殊情况,也就是two_node 两节点模式,此时的集群可以提供设定的web 服务,在节点web1使用init指令关机 或重启,apache服务都能正常迁移到节点web2,但是,如果提供服务的web1节点网卡故障,我们可以使用指令模拟网卡故障 [root@web1 ~]# ifdown eth0 ,那么

蓝狐Linux系统培训中心

毛毛雨:AM 3885999

毛毛雨:AM 3885999

集群无法将 web服务迁移到 web2 节点上,从日志可以看到 web2 要fence掉 web1,但是没有fence method,此时,我们在正常节点web2 上使用指令

[root@web2 ~]# fence_ack_manual web1

About to override fencing for web1.

Improper use of this command can cause severe file system damage.

Continue [NO/absolutely]? absolutely

Done

意思是告诉正常节点 web2,已经成功fence掉故障节点 web1,web2 可以抢夺原本运行在web1 上的apache 服务了,注意看日志,这原本就是fence设计的原理。如

果你没有使用 fence_ack_manual 而将 web1 的网卡重新开启或者重启 web1,那么 web2 的 cman服务会被停止掉,留意 web2 的日志,这种情况下,web2 的 cman 服务重启不了啦,你只能选择重启系统。

因此,我们的集群是需要fence 设备的,下面开始添加 fence 设备,在节点 web1 和 web2 上做如下动作:

[root@web1 ~]# mv /usr/sbin/fence_apc{,.bak}

[root@web1 ~]# ln -s /usr/sbin/fence_virsh /usr/sbin/fence_apc

因为在 luci 的Fence Devices 菜单中,添加fence 设备,下拉菜单中并没有fence_virsh 项,所以上面的动作就是用fence_virsh 替换 fence_apc。

“偷龙转凤”之后,我们选择下拉菜单中的 fence_apc,其实这时候调用的是 fence_virsh,name填 virsh_fence,ip填 192.168.0.200,login填 root,password 填上对应的密码,这样子,我们就成功添加了一个可以fence kvm 节点的fence设备,接下来,将这个fence设备应用到节点上,web1为例,luci中点击 web1节点, 添加fence_method,名为web_fence,再添加fence instance,选择刚创建的virsh_fence,port 填web1,此处的web1不是web1的hostname,而是kvm 上的vm

名;节点web2 上 port 换成 web2,其他跟 web1 设置一样。

蓝狐Linux系统培训中心

毛毛雨:AM 3885999

毛毛雨:AM 3885999

很有必要解释一下fence工作原理, 当web1网卡故障的时候, web1是与外部网络断开连接的, 但web1会认为web2挂掉了, web1使用fence设备去fence web2, 因为web1的网卡故障,所以web1 fence web2是不会成功的,同时web2也会发现web1挂掉了,web2使用fence设备去fence web1,web2的网卡是正常的, 所以 web2 的fence 指令能正常发送到fence 设备上,fence 掉 web1,并且会把原来由 web1 提供的apache 服务及资源抢夺过来,由 web2 对外提供apache 服务。

以上 fence设置的默认 action为 reboot,如果要换成 off 关机,需修改/etc/cluster/cluster.conf 文件,添加红字部分,,如果 web1、web2及 manager相互之间ssh是以密钥进行认证的,那么我们需要在 cluster.conf 中对fence 设备添加私钥的位置及指明用加 密的模式,红字部分,,如果是使用用户名和密码进行ssh 认证,则上面的红字部分不需要添加。在 kvm 虚拟化环境,并且有高安全需求的情况下,显然这是很不错的选择。请注 意,在任意节点上修改 cluster.conf 之后,需要增加 config_version 的值,再使用指令 scp 或者 ccs_sync将 cluster.conf 传播到其他节点。

配置好fence 之后,回到 services 菜单,看到 web 服务是运行在 web1上的,我们再次将 web1的网卡故障掉,你会发现web1 会自动重启,并且web2 抢夺到原本 运行在web1上的apache 服务,作为集群提供服务的节点。这个过程依然不要忘记多看日志。

接下来,我们再体验GFS,之前不是在 manager 上导出了 iscsi的存储吗,现在有用武之地了,在两个节点上使用如下动作挂载iscsi 存储:

[root@web1 ~]# yum install iscsi-initiator-utils -y 挂载 iscsi存储需要安装的包

[root@web1 ~]# chkconfig iscsi on

[root@web1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.200

[root@web1 ~]# /etc/init.d/iscsi start 启动 iscsi服务,发现/dev 下多了两个盘,sdb,sdc

蓝狐Linux系统培训中心

毛毛雨:AM 3885999

毛毛雨:AM 3885999

[root@web1 ~]# udevadm info -q all -n /dev/sdb 查看sdb 设备在被内核识别时候的信息,用作写 udev规则,用来固定iscsi 设备在本机的设备名称。

从上条指令结果中提取这条用作书写 udev规则的条件,ID_SCSI_SERIAL=beaf11

[root@web1 ~]# vim /etc/udev/rules.d/99-iscsi.rules

KERNEL=="sd[b-z]",ENV{ID_SCSI_SERIAL}=="beaf11",NAME="disk_gfs"

KERNEL=="sd[b-z]",ENV{ID_SCSI_SERIAL}=="beaf12",NAME="qdisk

[root@web1 ~]# udevadm trigger 触发刚写的 udev 规则,查看/dev 下,sdb,sdc已经不见了,出现了 disk_gfs 和 qdisk 两个块设备 [root@web1 ~]# yum install lvm2-cluster gfs2-utils -y 安装 gfs 需要的包

[root@web1 ~]# chkconfig clvmd on

clvm信息是自动在集群节点上同步的,所以以下动作只需在任意节点上做一次,在此之前,修改lvm2支持集群,使用指令

[root@web1 ~]# lvmconf --enable-cluster

确保各个上的 clvmd服务是启动的。

[root@web1 ~]# pvcreate /dev/disk_gfs 创建物理卷

[root@web1 ~]# vgcreate gfs /dev/disk_gfs 创建卷组

[root@web1 ~]# vgdisplay gfs | grep Cluster 可以看到 Clustered yes 表示是 clvm,在其他节点也可以看到相同信息

[root@web1 ~]# lvcreate -l 100%free -n gfslv gfs 创建名为 gfslv的逻辑卷,使用 gfs 卷组100%的剩余空间

[root@web1 ~]# mkfs.gfs2 -j 2 -t sSWans:gfslv -p lock_dlm /dev/gfs/gfslv

格式化为 gfs2,设定锁机制及 2 份journal,-t 分两部分,集群名:设备名,格式化的时间有点长,耐心等待。

[root@web1 ~]# mount -t gfs2 /dev/gfs/gfslv /var/www/html

[root@web1 ~]# echo web-service > /var/www/html/index.html 设置 index.html 页面的内容

[root@web1 ~]# echo "/dev/gfs/gfslv /var/www/html gfs2 defaults 0 0" >> /etc/fstab 设置启动自动挂载,两个>>,别写成>

蓝狐Linux系统培训中心

毛毛雨:AM 3885999

毛毛雨:AM 3885999

在 luci的 Resources 菜单添加一个 gfs2 资源,name 为web_data,mount point为/var/www/html,filesystem type为 gfs2。打开Services 菜单,点击apache 服务,添加一个资源,选择刚创建的web_data。

这时候已经是个完整的两节点RHCS 应用了。附上 cluster.conf

蓝狐Linux系统培训中心

毛毛雨:AM 3885999

毛毛雨:AM 3885999