集群
一、 概念
是指一组相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点都是运行各自服务的独立服务器,这些服务器之间可以彼此通信,协同向用户提供应用程序,系统资源和数据,并以单一系统的模式加以管理。
二、优点
1 高性能
2 价格有效性
3 可伸缩性
4 高可用
5 透明性
6 可管理
7 可编程
高可用集群原理:
实际应用过程中,并不是所有的集群结点都在工作,一般为某台工作,其余作为“热备”
1.Corosync(心跳检测):检测集群结点是否正常,若停止“心跳”,rg组工作
2.直连线通信(交换机):连接集群结点的网卡接口
3.Fence(电源交换机):对某集群结点先断电,再重启,使得内存数据不会刷新至存储系统
4.rg组:
(1)vip–可迁移地址,一定时未被占用的ip地址,与lip无关;
(2)filesystem–共享的、集群的或是clvm的文件系统;
(3)service–服务
5.rg组工作方式:假设当前rg组工作在集群结点1上,当node1挂掉时,rg组中的vip将filesystem迁移至另一集群结点(“热备”),因此rg组对外显示的地址为vip
三、RHCS 集群组成
1 集群架构管理器
这是RHCS 集群的一个基础套件,提供您一个集群的基本功能,使各个节点组成的集群在一起工作,具体包含分布式集群管理器(CMAN),成员关系管理、锁管理(DLM)配置文件管理(CCS)、栅设备(FENCE)
2 高可用服务管理器
提供节点服务监控和服务故障转移,当一个节点服务出现故障时,将服务转移到另一个健康的节点上。
3 集群配置管理工具
通过LUCI 来管理和配置RHCS集群,LUCI是一个基于web的集群配置方式,通过luci可以轻松的搭建一个功能强大的集群系统,节点主机可以使用ricci来和luci 管理段进行通信
4 LinuxVirtualServer
LVS 是一个开源的负载均衡软件,利用LVS 可以将客户端的请求根据指定的负载策略和算法合理分配到各个节点,实现动态、智能的负载分担
5 RedHatGS(globalfilesystem)
GFS 是Redhat公司开发的一款集群文件系统,目前最新的版本是GFS2,GFS文件系统允许多个服务同时读写一个磁盘分区,通过GFS可以实现数据的集中管理,免去了数据同步和拷贝的麻烦,但GFS不能独立存在,需要RHCS的底层组件支持
6 clusterlogicalvolumemanger
CLuster 逻辑卷管理,及CLVM,是LVM的扩展,这种允许cluster 中的机器使用LVM来管理共享存储
7 ISCSI
是一种在Internet协议上,特别是以太网上进行数据传输的标准,他是一种基于IPstorage理论的新型存储技术,RHCS可以通过ISCSI技术来导出和分配共享存储的使用。
四、RHCS集群运行原理及功能介绍
1 分布式集群管理器(CMAN)
它运行在各个节点上,为RHCS提供集群管理任务
CMAN 用于管理集群成员、消息和通知。他通过监控每个节点的运行状态来了解节点成员之间的关系,当节点出现故障时,CMAN及时将这种改变通知底层,进而做出相应的调整
2锁管理(DLM)
表示一个分布式锁管理器,他是RHCS的一个底层基础构建,同时也为集群提供了一个公用的锁运行机制,在RHCS中,DLM运行在集群的每个节点上,GFS通过锁管理机制来同步访问数据系统元数据,CLVM通过锁管理其来同步更新数据到LVM卷和逻辑卷, DLM 不需要设定锁骨哪里服务器,它采用对等的锁管理方式,大大提高了处理性能,同时,DLM避免了当单个节点失败需要整体恢复的性能瓶颈,另外,DLM的请求都是本地的,不需要网络请求,因而请求会立即生效,最后,DLM通过分层机制,可以实现多个锁空间的并行管理模式
3配置文件管理(CCS)
ClusterConfigurationSystem,简称CCS,主要用于集群配置文件管理和配置文件在节点之间的同步。有时候,luci管理界面可能由于网络等方面的因素并不是那么畅快,CCS就显得很必要了。CCS运行在集群的每个节点上,监控每个集群节点上的单一配置文件/etc/cluster/cluster.conf的状态,当这个文件发生任何变化时,都将此变化更新到集群中的每个节点,时刻保持每个节点的配置文件同步。例如,管理员在节点A上更新了集群配置文件,CCS发现A节点的配置文件发生变化后,马上将此变化传播到其它节点上去。
rhcs的配置文件是cluster.conf,它是一个xml文件,具体包含集群名称、集群节点信息、集群资源和服务信息、fence设备等
4栅设备(FENCE)
FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的“脑裂”现象,FENCE设备的出现,就是为了解决类似这些问题,Fence设备主要就是通过服务器或存储本身的硬件管理接口,或者外部电源管理设备,来对服务器或存储直接发出硬件管理指令,将服务器重启或关机,或者与网络断开连接。
FENCE的工作原理是:当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。
RHCS的FENCE设备可以分为两种:内部FENCE和外部FENCE,常用的内部FENCE有IBMRSAII卡,HP的iLO卡,还有IPMI的设备等,外部fence设备有UPS、SANSWITCH、NETWORKSWITCH等
5高可用服务管理器(rgmanager)
高可用性服务管理主要用来监督、启动和停止集群的应用、服务和资源。
它提供了一种对集群服务的管理能力,当一个节点的服务失败时,
高可用性集群服务管理进程可以将服务从这个失败节点转移到其它健康节点上来,并且这种服务转移能力是自动、透明的。RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。
在一个RHCS集群中,高可用性服务包含集群服务和集群资源两个方面,集群服务其实就是应用服务,例如apache、mysql等,集群资源有很多种,例如一个IP地址、一个运行脚本、ext3/GFS文件系统等。
在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的,所谓失败转移域是一个运行特定服务的集群节点的集合。在失败转移域中,可以给每个节点设置相应的优先级,通过优先级的高低来决定节点失败时服务转移的先后顺序,如果没有给节点指定优先级,那么集群高可用服务将在任意节点间转移。因此,通过创建失败转移域不但可以设定服务在节点间转移的顺序,而且可以限制某个服务仅在失败转移域指定的节点内进行切换。
6集群配置管理工具(luci和ricci)
Conga是一种新的基于网络的集群配置工具,Conga是通过web方式来配置和管理集群节点的。Conga有两部分组成,分别是luci和ricci,luci安装在一台独立的计算机上,用于配置和管理集群,ricci安装在每个集群节点上,Luci通过ricci和集群中的每个节点进行通信。
RHCS也提供了一些功能强大的集群命令行管理工具,常用的有clustat、cman_tool、ccs_tool、fence_tool、clusvcadm等,这些命令的用法将在下面讲述。
7 RedhatGFS
GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群多个节点在块级别上共享存储,每个节点通过共享一个存储空间,保证了访问数据的一致性,更切实的说,GFS是RHCS提供的一个集群文件系统,多个节点同时挂载一个文件系统分区,而文件系统数据不受破坏,这是单一的文件系统不能实现的。
为了实现多个节点对于一个文件系统同时读写操作,GFS使用锁管理器来管理I/O操作,当一个写进程操作一个文件时,这个文件就被锁定,此时不允许其它进程进行读写操作直到这个写进程正常完成才释放锁,有当锁被释放后,其它读写进程才能对这个文件进行操作,另外,当一个节点在GFS文件系统上修改数据后,这种修改操作会通过RHCS底层通信机制立即在其它节点上可见。
在搭建RHCS集群时,GFS一般作为共享存储,运行在每个节点上,并且可以通过RHCS管理工具对GFS进行配置和管理。这些需要说明的是RHCS和GFS之间的关系,一般初学者很容易混淆这个概念:运行RHCS,GFS不是必须的,只有在需要共享存储时,才需要GFS支持,而搭建GFS集群文件系统,必须要有RHCS的底层支持,所以安装GFS文件系统的节点,必须安装RHCS组件。
五、相关配置
fence的概念
首先了解“脑裂”:当结点间的通信断开,但集群结点或服务本身正常时,此时集群结点会竞争rg组, 若集群结点同时对文件系统进行操作,则会造成文件系统毁坏,这种现象即为“脑裂”。
上述现象,当结点间的通信断开,但集群结点或服务本身正常时,交换机与fence电源交换机通信,检查另一结点是否还在运行,若还在运行,fence则对另一结点先进行断电处理,然后集群结点再重启,亦称爆头。
硬件Fence:电源Fence,通过关掉电源来踢掉坏的服务器
软件Fence:Fence卡(智能卡),通过线缆、软件来踢掉坏的服务器
实际坏境中,Fence卡连接的都是专线,使用专用的Fence网卡,不会占用数据传输线路,这样,更能保证稳定及可靠性。
Fence卡的IP网络和集群网络是相互依存的
由于红帽自带高可用套件,此处可在前端页面上对fence进行配置
1、集群节点与集群管理(前端页面的搭建)
此为红帽自带套件,因此此处先对集群管理界面进行搭建
准备两台虚拟机,用作集群节点,和真机在统一网段
分别为server1、server2,对应ip为172.25.47.1、172.25.47.2
1)server1、server2上配置yum源,添加如下包:(红帽自带集群套件)
HighAvailability ##高可用
LoadBalancer ##负载均衡
ResilientStorage ##弹性存储
ScalableFileSystem ##大文件系统
2)集群节点安装集群管理工具
server1和server2安装 ricci
yum install ricci -y ##安装集群管理工具
id ricci
echo redhat|passwd --stdin ricci ##添加密码
/etc/init.d/ricci start ##启动集群管理软件
chkconfig ricci on ##开机自启
netstat -antlp|grep ricci ##可以看到监听的是11111端口
3)管理端配置
Luci是RHCS基于web的集群配置管理工具,可以从系统光盘找到对应的Luci安装包
管理端一般不在集群结点上,因为在创建本身所在主机为集群结点时,可能会造成服响应过慢,还需注意在创建本机为集群结点时,一定要设置luci服务为开机自启
在server1上安装luci
yum install luci -y
/etc/init.d/luci start
chkconfig luci on
开启时显示luci监听8084端口,访问https://server1:8084可进行管理集群结点
4)真机
1》浏览器中
2》登陆,用户是超级用户,密码就是设定的rucci的密码,此处是redhat
3》进入管理页面
add表示添加集群结点至某个集群,该集群已经存在
Create是创建集群
4》创建集群
Cluster name ##集群名称
Usethe Same Password for All Nodes ##表示使用对所有结点同一密码,注意此处的密码非用户密码,根据表格信息,因为之前设置的ricci密码,ricc监听11111端口
Download Packages ##调用本地的yum源下载安装包或更新
UseLocally Installed Packages ##使用本地已有的安装包
Reboot Nodes Before Joining Cluster ##结点加入集群前应先重启
Enable Shared Storage Support ##支持共享存储
添加过程比较慢,添加成功如下
2、配置fence
1)搭建fence服务(物理真机上搭建)
物理真机—
systemctl stop firewalld
systemctl disable firewalld
yum search fence
yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y
# fence-virtd-libvirt-0.3.2-2.el7.x86_64 ##后端连接组件
#fence-virtd-multicast-0.3.2-2.el7.x86_64 ##多播服务
#fence-virtd-0.3.2-2.el7.x86_64 ##virtd服务
mkdir /etc/cluster/ ##创建key文件目录
cd /etc/cluster/
ls
fence_virtd -c ##创建fence(除了br0需要添加,其余默认即可)
Module search path [/usr/lib64/fence-virt]: ##选择默认路径
Listener module [multicast]: ##多播监听方式,也可以安装其他方式,本机仅安装了multicast
Multicast IP Address [225.0.0.12]: ##组播ip,选择默认(可更改,但同时需要更改集群结点端)
Multicast IP Port [1229]: ##监听端口,选择默认1229
Interface [virbr0]: br0 ##连接br0
Key File [/etc/cluster/fence_xvm.key]: ##该文件用来检验集群结点身份,选择默认
Backend module [libvirt]: ##后端连接libvirtd
Replace /etc/fence_virt.conf with the above [y/N]? y ##配置内容会保存至/etc/fence_virt.conf
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 ##从随即数urandom中截取128字节来生成key,一般先从urandom截取,不够时选择random
systemctl start fence_virtd.service ##生成key文件后,一定重启服务使key生效
scp fence_xvm.key root@172.25.47.1:/etc/cluster/ ##key发给集群节点,集群结点不需手动创建/etc/cluster,ricci服务会自动生成该目录
scp fence_xvm.key root@172.25.47.2:/etc/cluster/
2)管理端添加fence设备
1》添加设备
1.选择Fence virt(Multicase Mode)多播模式,添加设备,命名为vmfence
2.添加fence设备的过程:提交添加请求后,管理端会自动连接每个集群结点:1111,将更改保存至集群结点的cd/etc/cluster/cluster.con
该文件的修改需要调用root权限,所以若要删除某集群结点,不能仅从管理端remove,且需要修改集群结点的配置文件。
2》给每个结点添加fence method
添加fece设备,实现fence对结点的管理
Domain 添加节点的物理主机名或者是UUID
3》在server1、server2两个节点上查看钥匙和生成结果
cd /etc/cluster/
ls
cat cluster.conf
4》测试
物理机—重启服务
systemctl restart fence_virtd.service
测试1
server1
clustat ##查看状态
fence_node server2 ##对server2进行立即断电,然后重启
server2会被重启
测试2
server2
把网卡关闭
ip link set eth0 down
server1上查看状态,此时server2会重启
3)rg组的部署
1》Failover Domains–创建域
Prioritized ##优先级设置,数字越小级别越高,默认级别高的为数据接收方
Restricted ##指定结点
No Failback ##选中该项表示:不回切
##回切解释:n1是master,当n1挂掉,n2接管;当n1恢复后,资源回切至n1,使n1成为master,该机制下n2为“热备”。一般在n1性能很好时可选择回切,但回切可能发生资源损失:如丢包
2》Resources
添加IP address,设置vip,注意一定是未被占用的ip
3》添加服务
server1和server2安装httpd服务,切忌服务不要开启,因为添加服务到集群,因此,服务由集群来进行操作
yum install httpd -y
cd /var/www/html
vim index.html ##写一个发布页便于看到效果
选择script脚本类型:资源切换所执行的脚本。需要保证上述域中设置的每个结点主机均有该服务
4》Service Group:服务组/资源组
此处记得先添加ip
再添加脚本http
5》测试
真机curl 172.25.47.200
显示是server1
在server1执行
echo c >/proc/sysrq-trigger ##把内核写死
真机curl 172.25.47.200
显示是server2
server2上
clustat ##查看状态
server1下线,server2在线
当server1上线时,不会回切,真机显示还是server2
在server2上,让server2网卡不工作
/etc/init.d/network stop
此时真机在curl 172.25.47.200
显示server1在工作
4)共享存储,通过与服务结合
当用户正在写入存储时,如果服务器切换,存储会出错,此处把存储空间与服务结合到一块,由于服务每次只有一个服务器向客户服务,哪一个服务器上线,哪一个服务器写入。
1》在server3上
准备一块硬盘
yum install scsi-* -y
vim /etc/tgt/targets.conf
38 <target iqn.2019-04.com.example:server.target1>
39 backing-store /dev/vda
40 initiator-address 172.25.47.1
41 initiator-address 172.25.47.2
42 </target>
/etc/init.d/tgtd start
tgt-admin -s
ps ax ##起两个进程就是正确的
2》server1上
yum install iscsi-* -y
iscsiadm -m discovery -t st -p 172.25.47.3
iscsiadm -m node -l
vim /etc/lvm/lvm.conf
462 locking_type = 3 ##查看一下,是3就正确
/etc/init.d/clvmd status
fdisk -l
3》server2上
yum install iscsi-* -y
iscsiadm -m discovery -t st -p 172.25.47.3
iscsiadm -m node -l
/etc/init.d/clvmd status
4》设置磁盘
server2上
fdisk -l
fdisk -cu /dev/sdb ---改标签为8e
partprobe ##server2和server1都做
pvcreate /dev/sdb1
partprobe
pvcreate /dev/sdb1
两边都pvs,可以看到同步
vgcreate qagroup /dev/sdb1
两边都vgs,可以看到同步
lvcreate -L 4G -n qa qagroup
lvs
mkfs.ext4 /dev/qagroup/qa
mount /dev/qagroup/qa /mnt
cd /mnt/
ls
vim index.html
hahaha
cd
umount /mnt/
clustat --发现apache在server1上运行
在server1上执行
clusvcadm -d apache ##关掉apachi服务
5》在操作平台上Resources
6》Service Groups
第一个添加ip地址
第二添加webdata
第三 添加httpd脚本
保存
勾选apache,选择start
7》测试
真机
5)共享存储RedhatGFS
此处介绍gfs2版本
gfs2集群文件系统,一定是集群才可以用
在搭建RHCS集群时,GFS一般作为共享存储,运行在每个节点上,并且可以通过RHCS管理工具对GFS进行配置和管理。这些需要说明的是RHCS和GFS之间的关系,一般初学者很容易混淆这个概念:运行RHCS,GFS不是必须的,只有在需要共享存储时,才需要GFS支持,而搭建GFS集群文件系统,必须要有RHCS的底层支持,所以安装GFS文件系统的节点,必须安装RHCS组件
1》关闭apache
clustat ##查看哪台服务器运行apache
就在上面执行
clusvcadm -d apache ##关闭apache服务
2》上锁
在server2上
mkfs.gfs2 -p lock_dlm -j 3 -t wanghaha:mygfs2 /dev/qagroup/qa
mkfs.gfs2为gfs2文件系统创建工具,其一般常用的选项有:
-b BlockSize:指定文件系统块大小,最小为512,默认为4096;
-J MegaBytes:指定gfs2日志区域大小,默认为128MB,最小值为8MB;
-j Number:指定创建gfs2文件系统时所创建的日志区域个数,一般需要为每个挂载的客户端指定一个日志区域;
-p LockProtoName:所使用的锁协议名称,通常为lock_dlm或lock_nolock之一;
-t LockTableName:锁表名称,一般来说一个集群文件系统需一个锁表名以便让集群节点在施加文件锁时得悉其所关联到的集群文件系统,锁表名称为clustername:fsname,其中的clustername必须跟集群配置文件中的集群名称保持一致,因此,也仅有此集群内的节点可访问此集群文件系统;此外,同一个集群内,每个文件系统的名称必须惟一;
mount /dev/qagroup/qa /mnt
mount /dev/qagroup/qa /mnt
df
cd /mnt/
cp /etc/passwd .
ls 可以看到
在server1上
mount /dev/qagroup/qa /mnt
ls /mnt/
rm -fr /mnt/passwd
在server2上
ls /mnt/ 可以看到被删除
3》写入开机自启
server2上
umount /mnt/
vim /etc/fstab
/dev/qagroup/qa /var/www/html gfs2 _netdev 0 0
mount -a
server1上
umount /mnt/
vim /etc/fstab
/dev/qagroup/qa /var/www/html gfs2 _netdev 0 0
mount -a
4》Server Groups
删除共享的文件系统,保存
5》Resources
删除 File System
6》测试
server1上
clustat
clusvcadm -e apache ##开启服务
clustat
df ##挂载上了
cd /var/www/html/
uhahaha
真机curl 172.25.47.200 能看到
server1上
clusvcadm -r apache -m server2 ##把apache迁移到server2上
在server2上可以,修改发布页
cd /var/www/html/
vim index.html
uhahaha server2xiugia
真机curl 172.25.23.200也可以看到发布页信息
gfs2常用命令
gfs2_tool sb /dev/qagroup/qa all ##查看gfs2配置的状态
gfs2_tool journals /dev/qagroup/qa ##查看日至的份数
gfs2_jadd -j 3 /dev/qagroup/qa ##再添加3份日至
##拉伸磁盘空间
lvextend -L +1G /dev/qagroup/qa ##增大磁盘
gfs2_grow /dev/qagroup/qa ##刷新文件系统