一、RHCS的概念
Red Hat Cluster Suite即红帽集群套件,它是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要。REDHAT公司在2007年发布RHEL5时,就将原本作为独立软件发售的用于构建企业级集群的集群套件RHCS集成到了操作系统中一同发布。
它提供有如下两种不同类型的集群:
1、高可用性:应用/服务故障切换-通过创建n个节点的服务器集群来实现关键应用和服务的故障切换
2、负载均衡:IP 负载均衡-对一群服务器上收到的 IP 网络请求进行负载均衡
RHCS技术要点:
- 最多支持128个节点(红帽3和4支持16个节点)
- 可同时为多个应用提供高可用性
- NFS/CIFS故障切换:支持UNIX和WINDOWS环境下使用的高可用性文件
- 完全共享的存储子系统:所有集群成员都可以访问同一个存储子系统
- 综合数据完整性:使用最新的I/O屏障(barrier)技术,如可编辑的嵌入式和外部电源开关装置(powerswitches)
- 服务故障切换:它可以确保及时发现硬件停止运行或故障的发生并自动恢复系统,同时,它还可以通过监控应用来确保应用的正确运行并在其发生故障时进行自动重启
二、RHCS 集群组成
- 集群架构管理器
这是RHCS 集群的一个基础套件,提供您一个集群的基本功能,使各个节点组成的集群在一起工作,具体包含分布式集群管理器(CMAN),成员关系管理、锁管理(DLM)配置文件管理(CCS)、栅设备(FENCE)
- 高可用服务管理器
提供节点服务监控和服务故障转移,当一个节点服务出现故障时,将服务转移到另一个健康的节点上。
- 集群配置管理工具
通过LUCI 来管理和配置RHCS集群,LUCI是一个基于web的集群配置方式,通过luci可以轻松的搭建一个功能强大的集群系统,节点主机可以使用ricci来和luci 管理段进行通信
- Linux virtual server
LVS 是一个开源的负载均衡软件,利用LVS 可以将客户端的请求根据指定的负载策略和算法合理分配到各个节点,实现动态、智能的负载分担。
- RedHatGS(globalfilesystem)
GFS 是Redhat公司开发的一款集群文件系统,目前最新的版本是GFS2,GFS文件系统允许多个服务同时读写一个磁盘分区,通过GFS可以实现数据的集中管理,免去了数据同步和拷贝的麻烦,但GFS不能独立存在,需要RHCS的底层组件支持
- clusterlogicalvolumemanger
CLuster 逻辑卷管理,及CLVM,是LVM的扩展,这种允许cluster 中的机器使用LVM来管理共享存储
- ISCSI
是一种在Internet协议上,特别是以太网上进行数据传输的标准,他是一种基于IPstorage理论的新型存储技术,RHCS可以通过ISCSI技术来导出和分配共享存储的使用。
三、RHCS集群运行原理及功能介绍
- 分布式集群管理器(CMAN)
它运行在各个节点上,为RHCS提供集群管理任务
CMAN 用于管理集群成员、消息和通知。他通过监控每个节点的运行状态来了解节点成员之间的关系,当节点出现故障时,CMAN及时将这种改变通知底层,进而做出相应的调整
- 锁管理(DLM)
表示一个分布式锁管理器,他是RHCS的一个底层基础构建,同时也为集群提供了一个公用的锁运行机制,在RHCS中,DLM运行在集群的每个节点上,GFS通过锁管理机制来同步访问数据系统元数据,CLVM通过锁管理其来同步更新数据到LVM卷和逻辑卷, DLM 不需要设定锁骨哪里服务器,它采用对等的锁管理方式,大大提高了处理性能,同时,DLM避免了当单个节点失败需要整体恢复的性能瓶颈,另外,DLM的请求都是本地的,不需要网络请求,因而请求会立即生效,最后,DLM通过分层机制,可以实现多个锁空间的并行管理模式
- 配置文件管理(CCS)
ClusterConfigurationSystem,简称CCS,主要用于集群配置文件管理和配置文件在节点之间的同步。有时候,luci管理界面可能由于网络等方面的以素并不是那么畅快,CCS就显得很必要了。CCS运行在集群的每个节点上,监控每个集群节点上的单一配置文件/etc/cluster/cluster.conf的状态,当这个文件发生任何变化时,都将此变化更新到集群中的每个节点,时刻保持每个节点的配置文件同步。
例如:
管理员在节点A上更新了集群配置文件,CCS发现A节点的配置文件发生变化后,马上将此变化传播到其它节点上去。
rhcs的配置文件是cluster.conf,它是一个xml文件,具体包含集群名称、
集群节点信息、集群资源和服务信息、fence设备等
- 栅设备(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等
- 高可用服务管理器(rgmanager)
高可用性服务管理主要用来监督、启动和停止集群的应用、服务和资源。它提供了一种对集群服务的管理能力,当一个节点的服务失败时,高可用性集群服务管理进程可以将服务从这个失败节点转移到其它健康节点上来,并且这种服务转移能力是自动、透明的。RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。
在一个RHCS集群中,高可用性服务包含集群服务和集群资源两个方面,集群服务其实就是应用服务,例如apache、mysql等,集群资源有很多种,例如一个IP地址、一个运行脚本、ext3/GFS文件系统等。
在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的,所谓失败转移域是一个运行特定服务的集群节点的集合。在失败转移域中,可以给每个节点设置相应的优先级,通过优先级的高低来决定节点失败时服务转移的先后顺序,如果没有给节点指定优先级,那么集群高可用服务将在任意节点间转移。因此,通过创建失败转移域不但可以设定服务在节点间转移的顺序,而且可以限制某个服务仅在失败转移域指定的节点内进行切换。
- 集群配置管理工具(luci和ricci)
Conga是一种新的基于网络的集群配置工具,Conga是通过web方式来配置和管理集群节点的。Conga有两部分组成,分别是luci和ricci,luci安装在一台独立的计算机上,用于配置和管理集群,ricci安装在每个集群节点上,Luci通过ricci和集群中的每个节点进行通信。
RHCS也提供了一些功能强大的集群命令行管理工具,常用的有clustat、cman_tool、ccs_tool、fence_tool、clusvcadm等。
- RedhatGFS
GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群多个节点在块级别上共享存储,每个节点通过共享一个存储空间,保证了访问数据的一致性,更切实的说,GFS是RHCS提供的一个集群文件系统,多个节点同时挂载一个文件系统分区,而文件系统数据不受破坏,这是单一的文件系统不能实现的。
为了实现多个节点对于一个文件系统同时读写操作,GFS使用锁管理器来管理I/O操作,当一个写进程操作一个文件时,这个文件就被锁定,此时不允许其它进程进行读写操作直到这个写进程正常完成才释放锁,有当锁被释放后,其它读写进程才能对这个文件进行操作,另外,当一个节点在GFS文件系统上修改数据后,这种修改操作会通过RHCS底层通信机制立即在其它节点上可见
在搭建RHCS集群时,GFS一般作为共享存储,运行在每个节点上,并且可以通过RHCS管理工具对GFS进行配置和管理。这些需要说明的是RHCS和GFS之间的关系,一般初学者很容易混淆这个概念:运行RHCS,GFS不是必须的,只有在需要共享存储时,才需要GFS支持,而搭建GFS集群文件系统,必须要有RHCS的底层支持,所以安装GFS文件系统的节点,必须安装RHCS组件。
四、环境配置
两台redht6.5的虚拟机。
server1 配置luci集群管理界面,用来配置和管理集群。
server1、server2 集群节点,配置ricci。
五、搭建步骤
1).在server1和server2上配置更高级的yum源
[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.75.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[HighAvailability] ##高可用
name=HighAvailability
baseurl=http://172.25.75.250/rhel6.5/HighAvailability
gpgcheck=0
[LoadBalancer] ##负载均衡
name=LoadBalancer
baseurl=http://172.25.75.250/rhel6.5/LoadBalancer
gpgcheck=0
[ResilientStorage] ##存储
name=ResilientStorage
baseurl=http://172.25.75.250/rhel6.5/ResilientStorage
gpgcheck=0
[ScalableFileSystem] ##可扩展文件系统
name=ScalableFileSystem
baseurl=http://172.25.75.250/rhel6.5/ScalableFileSystem
gpgcheck=0
2).在server1上安装ricci、luci,启动服务,开机自启动
ricci:集群节点
luci:集群管理界面
yum install luci ricci -y #下载软件
id ricci #查看是否有ricci用户
passwd ricci #配置ricci用户的密码
/etc/init.d/ricci start #开启集群节点
/etc/init.d/luci start #开启集群管理界面
chkconfig ricci on #设置ricci开机自启动
chkconfig luci on
3).在server2上安装ricci,启动服务,开机自启动
yum install ricci -y
id ricci
passwd ricci
/etc/init.d/ricci start
chkconfig ricci on
chkconfig --list #查看服务状态
4).打开浏览器,输入https://172.25.75.1:8084
1、认证
2、登录
输入root用户及自己给ricci用户创建的密码
3、创建集群,并且将server1和server2添加进集群
集群创建成功,并且成功将节点server1、server2添加进集群。
cat /etc/cluster/cluster.conf ##查看集群及节点
clustat ##查看节点状态
cman 检测集群状态
rgmanager 集群管理器
ricci 管理资源
modclusterd 修改配置文件
clvmd 集群逻辑卷服务
5、配置fence:
FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的“脑裂”现象,FENCE设备的出现,就是为了解决类似这些问题,Fence设备主要就是通过服务器或存储本身的硬件管理接口,或者外部电源管理设备,来对服务器或存储直接发出硬件管理指令,将服务器重启或关机,或者与网络断开连接。
1、在真机上下载软件,制作钥匙
yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y
mkdir /etc/cluster
cd /etc/cluster
fence_virtd -c ##如果此方法没有生成钥匙,可以采用手动制作钥匙
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 ##手动制作钥匙
[root@foundation75 cluster]# fence_virtd -c
Module search path [/usr/lib64/fence-virt]:
Available backends:
libvirt 0.1
Available listeners:
multicast 1.2
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 all interfaces.
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 [virbr0]: br0 ##这里的网卡要是双IP的网卡
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]:
Backend modules are responsible for routing requests to
the appropriate hypervisor or management layer.
Backend module [libvirt]:
Configuration complete.
=== Begin Configuration ===
backends {
libvirt {
uri = "qemu:///system";
}
}
listeners {
multicast {
port = "1229";
family = "ipv4";
interface = "br0";
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
2、将生成的钥匙发送给server1、server2:
scp fence_xvm.key root@172.25.75.1:/etc/cluster/
scp fence_xvm.key root@172.25.75.2:/etc/cluster/
3、浏览器配置
添加设备Fence Devices
选择Fence virt(Multicas Mode)多伯模式
给节点添加vmfence
Domain输入server1的UUID,可以打开虚拟机的硬件管理界面可以看到。
server2的fence配置,以server1为例。
4、开启服务
systemctl start fence_virtd.service
systemctl status fence_virtd.service
5、测试
在server1上:
fence_node server2
server2重新启动,但是集群及节点没有被破坏
6、配置web高可用集群
添加集群服务
输入Name,例如webfile,
选中Prioritized、Restricted(只在指定节点跑)、No Failback(资源故障不回切),选中下方的server1和server2的Member并输入优先级,这里server1输入1,server2输入10,就是以server1为主节点,数字越小优先级越高;
添加集群资源
点击Resources,点击Add,选择模式IP Address,输入IP和NETMASK,IP不能被占用,这个IP就是VIP,点击Submit
点击Resources,点击Add,选择模式Script,输入Name”httpd“,并输入脚本路径”/etc/init.d/httpd“,点击Submit
添加服务组
点击ServiceGroups,点击Add,输入一个自定义名称,例如”apache“,选中”Automatically Start This Service“(集群自动开启)和”Run Exclusive“(运行独占),选中”FailoverDomain”下刚才创建的”webfile“,”Recovery Policy”选择”Relocate“,点击下方AddResource,选择之前创建的Resources,因为有两个,所以需要添加两次,完成后点击Submit;
4、server1、server2下载httpd,并编写默认发布页
5、启动apache服务组
6、测试
此时server1和server2都正常,但server1优先级高,所以httpd在server1开启
测试1: 将httpd服务切到server2,再模拟server2内核故障
server2:
echo c > /proc/sysrq-trigger
server2重启。
关闭网络服务后,fence控制server2的电源,强制关机,web服务切换到server1上,不会影响客户使用,server2重启后,web服务不回切,保证了最少的服务变动,提升用户体验。