###################################################
cluster 集群与存储
day 04
一、RHCS概述
什么是RHCS
redhat cluster suite(红帽集群套件)
能够提供高可用性、高可靠性、负载均衡、存储共享且经济实用
可以为web应用、数据库应用等提供安全、稳定的运行环境
RHCS提供了从前端负载均衡到后端数据存储的完整解决方案,是企业应用的首选
RHCS有什么功能
高可用--核心功能 --系统硬件或网络出现故障时,应用可以自动、快速地从一个节点切换到另一个节点
负载均衡--通过LVS提供负载均衡 --LVS将负载通过负载分配策略,将来自于客户端的请求分配到服务器节点 --当某个服务节点无法提供服务,节点将被从集群中剔除
存储集群功能
-RHCS通过GFS文件系统提供存储集群功能
-GFS即global file system,允许多个服务同时读写一个单一的共享文件系统
-通过GFS消除在应用程序间同步数据的麻烦
-通过锁管理机制来谐调和管理多个服务节点对同一个文件系统的读写操作
RHCS组件
cman-cluster manager --集群管理器
rgmanger-cluster resource group manager --集群资源管理器
corosync 集群间通信软件
ricci 集群远程管理器
附加组件
LVS
GFS-红帽公司开发,最新版本是GFS2 --GFS不能孤立存在,需要RHCS底层组支持
CLVM -集群逻辑卷管理 -LVM的扩展,允许集群使用LVM来管理共享存储
ISCSI -即internet SCSI,是IETF制订的标准 -将SCSI数据块映射为以太网数据包 -是基于IP storage理论的新型存储技术
GNBD -全局网络模块 -GFS的一个补充组件,用于RHCS分配和管理共享存储
RHCS运行原理
分布式集群管理器CMAN
-运行在全部节点上,提供集群管理任务 -用于管理集群成员、消息和通知。
-根据每个节点的运行状态,统计法定节点数作为集群是否存活的依据
RHCS高可用集群:红帽集群套件
双机软件、双机热备
非日志文件系统:ext2
日志文件系统:ext3 ext4 xfs ntfs
RHCS集群是否工作采用投票机制,默认情况下,每个节点可以投一票,集群能够工作,需要满足的票数是floor(n/2 + 1),即总票数除以2,加1,取整
配置RHCS
1、准备三台虚拟机,前两台用于集群节点,第三台加上额外硬盘,作为共享存储
vh01.tedu.cn
eth0: 192.168.4.1 存储1
eth1: 192.168.2.1 存储2
eth2: 201.1.1.1 公共 对外服务
eth3: 201.1.2.1 私有 内部管理
2、配置yum
rhel6.7光盘目录中的每个单词首字母大写的目录,都是一个仓库,在安装RHCS时,需要用到这些目录
[root@vh01 ~]# vim /etc/yum.repos.d/rhel6.repo
[Server]
name=Server
baseurl=ftp://201.1.2.254/rhel6.7/Server
enabled=1
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=ftp://201.1.2.254/rhel6.7/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=ftp://201.1.2.254/rhel6.7/LoadBalancer
enabled=1
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=ftp://201.1.2.254/rhel6.7/ResilientStorage
enabled=1
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=ftp://201.1.2.254/rhel6.7/ScalableFileSystem
enabled=1
gpgcheck=0
3、在vh01和vh02上关闭NetworkManager,它与cman服务有冲突
4、在所有节点上(vh01~vh03以及物理主机),在hosts文件中设置名称解析
[root@vh01 ~]# vim /etc/hosts
201.1.1.1 vh01.public.tedu.cn
201.1.2.1 vh01.private.tedu.cn vh01
201.1.1.2 vh02.public.tedu.cn
201.1.2.2 vh02.private.tedu.cn vh02
201.1.2.254 host.tedu.cn host
5、准备vh03上的共享存储
(1)先对vdb分区,将所有空间分为vdb1
(2)安装并配置target
6、在vh01和vh02上配置iscsi客户端
(1)在两条路径上发现共享存储
(2)配置多路径
7、在vh01和vh02上配置ricci。ricci是接受远程管理的服务。
[root@vh01 ~]# yum install -y ricci
[root@vh01 ~]# echo redhat | passwd --stdin ricci
[root@vh01 ~]# service ricci start; chkconfig ricci on
8、在vh03上安装luci,luci提供一个web页面,用于管理集群
[root@v03 ~]# yum install -y luci
[root@v03 ~]# service luci start; chkconfig luci on
9、访问luci
[root@room9pc16 ~]# firefox https://201.1.2.3:8084 &
用户是vh03上的root
10、在物理主机上配置fence服务
[root@room9pc16 ~]# yum list | grep ^fence
[root@room9pc16 ~]# yum install -y fence-virtd fence-virtd-libvirt fence-virtd-multicast
[root@room9pc16 ~]# fence_virtd -c 用于重新生成配置文件
Interface [public2]: 此处网卡应该填写vh0X.private.tedu.cn所在的网段
[root@room9pc16 ~]# mkdir /etc/cluster/
[root@room9pc16 ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=1k count=4 生成共享密钥
[root@room9pc16 ~]# scp /etc/cluster/fence_xvm.key 201.1.2.1:/etc/cluster/
[root@room9pc16 ~]# scp /etc/cluster/fence_xvm.key 201.1.2.2:/etc/cluster/
[root@room9pc16 ~]# systemctl start fence_virtd.service
[root@room9pc16 ~]# systemctl enable fence_virtd.service
11、在web页上配置好fence进行验证
[root@vh01 ~]# iptables -A INPUT -j DROP 收到的任何数据包都丢弃
过几秒钟之后,vh01将被关机重启
(2)apache
[root@vh01 ~]# yum install -y httpd
(3)共享存储
[root@vh01 ~]# parted /dev/mapper/mpatha
(parted) mklabel gpt
(parted) mkpart primary ext4 1M 50%
[root@vh01 ~]# mkfs.ext4 /dev/mapper/mpathap1
[root@vh02 ~]# partprobe ; multipath -rr
[root@vh01 ~]# mount /dev/mapper/mpathap1 /var/www/html/
[root@vh01 ~]# echo 'rhcs web service' > /var/www/html/index.html
[root@vh01 ~]# umount /var/www/html/
13、将以上三个资源加入到资源组中,点击submit之前,运行以下命令
[root@vh02 ~]# clustat -i1
14、验证
[root@vh01 ~]# ip a s eth2
[root@vh01 ~]# df -h
[root@vh01 ~]# netstat -tlnp | grep :80
[root@vh01 ~]# iptables -A INPUT -j DROP # vh01将被关机
[root@vh02 ~]# ip a s eth2 # vh02将获得所有资源
[root@vh02 ~]# df -h
[root@vh02 ~]# netstat -tlnp | grep :80
创建RHCS集群环境
1 创建RHCS集群环境
1.1 问题
准备四台KVM虚拟机,其三台作为集群节点,一台安装luci并配置iSCSI存储服务,实现如下功能:
使用RHCS创建一个名为tarena的集群
集群中所有节点均需要挂载iSCSI共享存储
使用集群中任意节点对iSCSI设置进行分区格式化
安装luci的虚拟主机要求额外添加一块20G硬盘
物理主机IP地址为192.168.4.1,主机名称为desktop1.example.com
1.2 方案
使用4台虚拟机,1台作为luci和iSCSI服务器、3台作为节点服务器,拓扑结构如图-1所示。
图-1
所有主机的主机名及对应的IP地址如表-1所示。
表-1 主机名称及对应IP地址表
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:安装前准备
1)为所有节点配置yum源,注意所有的虚拟主机均需要挂载安装光盘。
[root@node1 ~]# mount /dev/cdrom /media
[root@node1 ~]# rm -rf /etc/yum.repos.d/*
[root@node1 ~]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=red hat
baseurl=file:///media/
enabled=1
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=file:///media/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=file:///media/LoadBalancer
enabled=1
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=file:///media/ResilientStorage
enabled=1
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=file:///media/ScalableFileSystem
enabled=1
gpgcheck=0
[root@node1 ~]# yum clean all
[root@node2 ~]# mount /dev/cdrom /media
[root@node2 ~]# rm –rf /etc/yum.repos.d/*
[root@node2 ~]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=red hat
baseurl=file:///media/
enabled=1
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=file:///media/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=file:///media/LoadBalancer
enabled=1
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=file:///media/ResilientStorage
enabled=1
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=file:///media/ScalableFileSystem
enabled=1
gpgcheck=0
[root@node2 ~]# yum clean all
[root@node3 ~]# mount /dev/cdrom /media
[root@node3 ~]# rm -rf /etc/yum.repos.d/*
[root@node3 ~]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=red hat
baseurl=file:///media/
enabled=1
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=file:///media/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=file:///media/LoadBalancer
enabled=1
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=file:///media/ResilientStorage
enabled=1
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=file:///media/ScalableFileSystem
enabled=1
gpgcheck=0
[root@node3 ~]# yum clean all
[root@luci ~]# mount /dev/cdrom /media
[root@luci ~]# rm -rf /etc/yum.repos.d/*
[root@luci ~]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=red hat
baseurl=file:///media/
enabled=1
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=file:///media/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=file:///media/LoadBalancer
enabled=1
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=file:///media/ResilientStorage
enabled=1
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=file:///media/ScalableFileSystem
enabled=1
gpgcheck=0
[root@luci ~]# yum clean all
2)修改/etc/hosts并同步到所有主机。
[root@luci ~]# vim /etc/hosts
192.168.4.1 node1.example.com
192.168.4.2 node2.example.com
192.168.4.3 node3.example.com
192.168.4.4 luci.example.com
[root@luci ~]# for i in {1..3};do scp /etc/hosts 192.168.4.$i:/etc/;done
3)所有节点关闭NetworkManager、SELinux服务。
[root@luci ~]# service NetworkManager stop
[root@luci ~]# chkconfig NetworkManager off
[root@luci ~]# sed -i '/SELINUX=/s/enforcing/permissive/' /etc/sysconfig/selinux
[root@luci ~]# setenforce 0
[root@luci ~]# iptables -F; service iptables save
[root@node1 ~]# service NetworkManager stop
[root@node1 ~]# chkconfig NetworkManager off
[root@node1 ~]# sed -i '/SELINUX=/s/enforcing/permissive/' /etc/sysconfig/selinux
[root@node1 ~]# setenforce 0
[root@node1 ~]# iptables -F; service iptables save
[root@node2 ~]# service NetworkManager stop
[root@node2 ~]# chkconfig NetworkManager off
[root@node2 ~]# sed -i '/SELINUX=/s/enforcing/permissive/' /etc/sysconfig/selinux
[root@node2 ~]# setenforce 0
[root@node2 ~]# iptables -F; service iptables save
[root@node3 ~]# service NetworkManager stop
[root@node3 ~]# chkconfig NetworkManager off
[root@node3 ~]# sed -i '/SELINUX=/s/enforcing/permissive/' /etc/sysconfig/selinux
[root@node3 ~]# setenforce 0
[root@node3 ~]# iptables -F; service iptables save
步骤二:部署iSCSI服务
1)在luci主机上部署iSCSI服务器,将/dev/sdb使用iSCSI服务共享。
提示:服务器IQN名称为: iqn.2015-06.com.example.luci:cluster。
[root@luci ~]# yum -y install scsi-target-utils //安装软件
.. ..
[root@luci ~]# rpm -q scsi-target-utils
scsi-target-utils-1.0.24-10.el6.x86_64
[root@luci ~]# vim /etc/tgt/targets.conf
<target iqn.2015-06.com.example.luci:cluster>
# List of files to export as LUNs
backing-store /dev/sdb //定义存储设备
initiator-address 192.168.4.0/24 //定义ACL
</target>
[root@luci ~]# service tgtd start //启动服务
Starting SCSI target daemon: [ OK ]
[root@luci ~]# chkconfig tgtd on
2)所有节点服务器挂载该iSCSI共享。
[root@node1 ~]# yum -y install iscsi-initiator-utils //安装软件
[root@node1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.4.4:3260
[root@node1 ~]# iscsiadm -m node -T \
>iqn.2015-06.com.example.luci:cluster \
>-p 192.168.4.4:3260 -l //挂载iSCSI共享
[root@node1 ~]# iscsiadm -m node -T \
>iqn.2015-06.com.example.luci:cluster \
>-p 192.168.4.4:3260 -l
[root@node2 ~]# yum -y install iscsi-initiator-utils //安装软件
[root@node2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.4.4:3260
[root@node2 ~]# iscsiadm -m node -T \
>iqn.2015-06.com.example.luci:cluster \
>-p 192.168.4.4:3260 –l //挂载iSCSI共享
[root@node2 ~]# iscsiadm -m node -T \
>iqn.2015-06.com.example.luci:cluster \
>-p 192.168.4.4:3260 -l
[root@node3 ~]# yum -y install iscsi-initiator-utils //安装软件
[root@node3 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.4.4:3260
[root@node3 ~]# iscsiadm -m node -T \
>iqn.2015-06.com.example.luci:cluster \
>-p 192.168.4.4:3260 -l //挂载iSCSI共享
[root@node3 ~]# iscsiadm -m node -T \
>iqn.2015-06.com.example.luci:cluster \
>-p 192.168.4.4:3260 –l
步骤三:安装集群软件
1)在luci.example.com主机上安装luci,并启动服务。
[root@luci ~]# yum –y install luci
[root@luci ~]# service luci start;chkconfig luci on
2)在所有的集群节点中安装ricci,并启动服务。
[root@node1 ~]# yum -y install ricci
[root@node1 ~]# echo "11111" |passwd --stdin ricci
[root@node1 ~]# service ricci start;chkconfig ricci on
[root@node2 ~]# yum -y install ricci
[root@node2 ~]# echo "11111" |passwd --stdin ricci
[root@node2 ~]# service ricci start;chkconfig ricci on
[root@node3 ~]# yum -y install ricci
[root@node3 ~]# echo "11111" |passwd --stdin ricci
[root@node3 ~]# service ricci start;chkconfig ricci on
步骤四:配置集群
1)浏览器访问luci,任意主机使用浏览器访问即可。
[root@luci ~]# firefox https://luci.example.com:8084
2)创建集群。
使用浏览器访问luici页面后,点击“Manage Clusters“页面,点击”Create“按钮创建一个新的集群,如图-2所示。
图-2
接下来,在弹出的回话框中,输入集群的名称“tarena“,勾选”Download Packages“、“Reboot Nodes Befor Joining Cluster”、“Enable Shared Storage Support”,效果如图-3所示。
图-3
等待所有的节点重启之后,在luci页面将显示如图-4所示的页面,代表所有节点以及加入到了tarena集群中。
图-4
提示:如果节点重启后,有部分节点无法自动加入集群中,可以将正常的节点系统中/etc/cluster/cluster.conf文件同步到其他失败的节点中,并确保失败节点的cman和rgmanager服务为启动状态即可。
2 创建高可用Apache服务
2.1 问题
沿用练习一,使用集群中的节点创建高可用Apache服务,实现以下目标:
在任意节点将练习一挂载的iSCSI磁盘分区并格式化
为集群添加有效的Fence设备
创建名为prefer_node1的故障转移域
Apache服务优先运行于node1节点
Apache服务提供的VIP地址为192.168.4.100
客户端通过访问VIP地址访问Web页面
2.2 方案
沿用练习一的拓扑架构,依次完成如下操作:
部署httpd服务
创建Fence设备
创建故障转移域
创建VIP资源
创建存储资源
创建Apache服务资源
创建服务组
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:准备存储资源,并在所有节点安装httpd软件
1)在任一集群节点将iSCSI磁盘分区并格式化。
[root@node1 ~]# parted /dev/sdb mklabel msdos
[root@node1 ~]# parted /dev/sdb mkpart primary 1 1000
[root@node1 ~]# partprobe
[root@node1 ~]# mkfs.ext4 /dev/sdb1
2)安装httpd软件
[root@node1 ~]# yum –y install httpd
[root@node2 ~]# yum –y install httpd
[root@node2 ~]# yum –y install httpd
3)挂载共享存储并生成测试web页面
[root@node1 ~]# mount /dev/sdb1 /var/www/html
[root@node1 ~]# echo “test page for rhcs” > /var/www/html/index.html
步骤二:创建Fence设备
1)安装软件包,生成共享秘钥。
[root@desktop1 ~]# yum -y install \
>fence-virtd fence-virtd-libvirt fence-virtd-multicast
[root@desktop1 ~]# mkdir /etc/cluster
[root@desktop1 ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=4k count=1
[root@desktop1 ~]# systemctl enable fence_virtd
2)拷贝秘钥
[root@desktop1 ~]# for i in {1..3};do scp /etc/cluster/fence_xvm.key \
> 192.168.4.$i:/etc/cluster/; done
3)配置Fence
注意:Interface项填写网络接口,Backend module项填写libvirt。
[root@desktop1 ~]# fence_virtd –c
[root@desktop1 ~]# systemctl start fence_virtd
4)登录luci为集群节点添加Fence
在任一使用浏览器访问https://luci.example.com:8084,配置Fence。首先选择“Fence Devices”菜单后,选择Add添加按钮,效果如图-5所示。
图-5
在弹出的回话框中选择Fence设备的类型为Fence virt(Multicast Mode),并给fence设备设置名称,效果如图-6所示。
图-6
创建完Fence设备后,接下来还需要给每个节点添加该Fence设备,首先在集群中点击“Nodes”菜单,依次选择所有节点,给每个节点添加Fence 设备。如图-7所示,选择node1准备给该节点添加Fence设备。
图-7
在节点列表中选择了某个节点后,通过点击“Add Fence Method”添加Fence设备,效果如图-8所示。
图-8
选择“Add Fence Method”后在弹出的回话框中输入名称,如图-9所示。
图-9
接下来,执行最后的操作,为Fence设备添加实例,选择“Add Fence Instance”,效果如图-10所示。
图-10
在弹出的回话框中,选择之前创建的Fence实例“fence_xvm”,并为每个节点填写对应的虚拟机域名称,注意名称必须与虚拟机名称一致,如图-11所说。
图-11
步骤三:创建高可用Apache服务
1)创建故障转移域
在任一节点使用浏览器访问https://luci.example.com:8084,点击“Failover Domains”菜单,通过下面的Add按钮创建故障转移域,如图-12所示。
图-12
在弹出的回话框中为故障转移域填写名称:prefer_node1,依次勾选“Prioritized”、“Restricted”、 “No Failback”,并为每个节点设置优先级,为了确保服务优先运行在node1上,我们将node1的优先级设置为1,如图-13所示。
图-13
2)创建资源(VIP、共享存储、Apache服务)
创建资源,可以通过点击“Resources”菜单,使用“Add”按钮创建,如图-14所示。
图-14
在弹出的回话框中,我们选择IP Address这个资源,并为该资源设置具体的参数,VIP地址为192.168.4.100,效果如图-15所示。
图-15
使用相同的方法,创建共享存储,在资源列表中选择Filesystem,并设置具体的参数将共享iSCSI磁盘挂载到/var/www /html中,为了确保挂载点的唯一性,这里我们使用的是设备的UUID(请各位同学根据自己的实际情况填写具体的值),查看UUID的方法是blkid /dev/sdb1,最终的设置效果如图-16所示。
图-16
最后创建Apache服务资源,在资源列表中选择Apache,设置名称为web_service,如图-17所示。
图-17
3)创建服务组
在任意节点使用浏览器访问https://luci.example.com:8084,点击“Service Groups”菜单,通过下面的Add按钮创建服务组,如图-18所示。
图-18
在弹出的回话框中,输入具体的参数,设置服务名称为web_clu,选择故障域为prefre_node1,恢复策略为Relocate,并通过Add Resource给该服务组添加服务资源,将上一步中创建的3个资源添加到该服务组中,效果如图-19所示。
图-19
步骤四:验证测试
在任意集群节点中,输入clustat查看集群及高可用服务运行状态,如图-20所示。
图-20