基于RHCS的web双机热备集群搭建
RHCS集群运行原理及功能介绍
1、 分布式集群管理器(CMAN)
Cluster Manager,简称CMAN,是一个分布式集群管理工具,它运行在集群的各个节点上,为RHCS提供集群管理任务。CMAN用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的关系,当集群中某个节点出现故障,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。
2、锁管理(DLM)
Distributed Lock Manager,简称DLM,表示一个分布式锁管理器,它是RHCS的一个底层基础构件,同时也为集群提供了一个公用的锁运行机制,在RHCS集群系统中,DLM运行在集群的每个节点上,GFS通过锁管理器的锁机制来同步访问文件系统元数据。CLVM通过锁管理器来同步更新数据到LVM卷和卷组。 DLM不需要设定锁管理服务器,它采用对等的锁管理方式,大大的提高了处理性能。同时,DLM避免了当单个节点失败需要整体恢复的性能瓶颈,另外,DLM的请求都是本地的,不需要网络请求,因而请求会立即生效。最后,DLM通过分层机制,可以实现多个锁空间的并行锁模式。
3、配置文件管理(CCS)
Cluster Configuration System,简称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有IBM
RSAII卡,HP的iLO卡,还有IPMI的设备等,外部fence设备有UPS、SAN SWITCH、NETWORK SWITCH等
5、高可用服务管理器
高可用性服务管理主要用来监督、启动和停止集群的应用、服务和资源。它提供了一种对集群服务的管理能力,当一个节点的服务失败时,高可用性集群服务管理进程可以将服务从这个失败节点转移到其它健康节点上来,并且这种服务转移能力是自动、透明的。RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。在一个RHCS集群中,高可用性服务包含集群服务和集群资源两个方面,集群服务其实就是应用服务,例如apache、mysql等,集群资源有很多种,例如一个IP地址、一个运行脚本、ext3/GFS文件系统等。在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的,所谓失败转移域是一个运行特定服务的集群节点的集合。在失败转移域中,可以给每个节点设置相应的优先级,通过优先级的高低来决定节点失败时服务转移的先后顺序,如果没有给节点指定优先级,那么集群高可用服务将在任意节点间转移。因此,通过创建失败转移域不但可以设定服务在节点间转移的顺序,而且可以限制某个服务仅在失败转移域指定的节点内进行切换。
6、集群配置管理工具
RHCS提供了多种集群配置和管理工具,常用的有基于GUI的system-config-cluster、Conga等,也提供了基于命令行的管理工具。
system-config-cluster是一个用于创建集群和配置集群节点的图形化管理工具,它有集群节点配置和集群管理两个部分组成,分别用于创建集群节点配置文件和维护节点运行状态。一般用在RHCS早期的版本中。Conga是一种新的基于网络的集群配置工具,与system-config-cluster不同的是,Conga是通过web方式来配置和管理集群节点的。Conga有两部分组成,分别是luci和ricci,luci安装在一台独立的计算机上,用于配置和管理集群,ricci安装在每个集群节点上,Luci通过ricci和集群中的每个节点进行通信。RHCS也提供了一些功能强大的集群命令行管理工具,常用的有clustat、cman_tool、ccs_tool、fence_tool、clusvcadm等,这些命令的用法将在下面讲述。
7、 Redhat GFS
GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群多个节点在块级别上共享存储,每个节点通过共享一个存储空间,保证了访问数据的一致性,更切实的说,GFS是RHCS提供的一个集群文件系统,多个节点同时挂载一个文件系统分区,而文件系统数据不受破坏,这是单一的文件系统,例如EXT3、EXT2所不能做到的。
为了实现多个节点对于一个文件系统同时读写操作,GFS使用锁管理器来管理I/O操作,当一个写进程操作一个文件时,这个文件就被锁定,此时不允许其它进程进行读写操作,直到这个写进程正常完成才释放锁,只有当锁被释放后,其它读写进程才能对这个文件进行操作,另外,当一个节点在GFS文件系统上修改数据后,这种修改操作会通过RHCS底层通信机制立即在其它节点上可见。在搭建RHCS集群时,GFS一般作为共享存储,运行在每个节点上,并且可以通过RHCS管理工具对GFS进行配置和管理。这些需要说明的是RHCS和GFS之间的关系,一般初学者很容易混淆这个概念:运行RHCS,GFS不是必须的,只有在需要共享存储时,才需要GFS支持,而搭建GFS集群文件系统,必须要有RHCS的底层支持,所以安装GFS文件系统的节点,必须安装RHCS组件。
集群环境介绍
主节点,RealServer1: 192.168.10.121
备节点,RealServer2: 192.168.10.122
存储节点,Node1: 192.168.10.130
集群的浮动 IP: 192.168.10.254
配置主机之间的ssh互信
① 在每台主机上执行一下代码
/usr/bin/ssh-keygen -t rsa /usr/bin/ssh-keygen -t dsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
② 建立 RealServer1和RealServer2之间的ssh互信
在RealServer1上执行:
ssh server2 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys ssh server2 cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys
在RealServer2上执行:
ssh server1 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys ssh server1 cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys
配置target 存储
yum install iscsi-target-utils -y
service tgtd restart chkconfig tgtd on HOSTNAME="iqp.2014-08-25.edu.nuist.com:storage.disk" tgtadm --lld iscsi --mode target --op new --tid 1 --targetname $HOSTNAME tgtadm --lld iscsi --op new --mode logicalunit --lun 1 --tid 1 -b /dev/sdb tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL #tgtadm --lld iscsi --op show --mode target |grep Target tgt-admin -s
配置所有节点的initiator
yum install iscsi-initiator* -y service iscsi start service iscsid start chkconfig iscsid iscsiadm -m discovery -p 192.168.10.130:3260 -t sendtargets iscsiadm -m node --targetname iqp.2014-08-25.edu.nuist.com:storage.disk -p 192.168.10.130:3260 --login
创建一个GFS2文件系统(只在其中一个节点)(在192.168.10.121上创建)(创建一个lvm)
pvreate /dev/sdb vgcreate webvg /dev/sdb lvcreate -L 2G -n webvg_lv1 webvg
在每个节点上安装集群软件
yum -y install cman* yum -y install rgmanager* yum -y install gfs2-utils yum -y install system-config-cluster* yum -y install lvm2-cluster
格式化文件系统(格式化一次即可)
mkfs.gfs2 -p lock_dlm -t httpd_cluster:webvg_lv1 -j 2 /dev/webvg/webvg_lv1
使用 system-config-cluster 图形工具产生 cluster.conf配置文件
① 启动system-config-cluster,创建httpd_cluster
② 添加新节点
③ 添加fence
④ 将fence和节点绑定
⑤ 添加资源:添加 IP 资源
⑥ 添加资源:添加GFS资源
⑦ 添加资源:添加Script资源
⑧ 创建失效域
⑨ 创建集群服务
配置完成后的文件内容如下
<?xml version="1.0" ?> <cluster config_version="2" name="httpd_cluster"> <fence_daemon post_fail_delay="0" post_join_delay="3"/> <clusternodes> <clusternode name="RealServer1" nodeid="1" votes="1"> <fence> <method name="1"> <device name="fence1" nodename="RealServer1"/> </method> </fence> </clusternode> <clusternode name="RealServer2" nodeid="2" votes="1"> <fence> <method name="1"> <device name="fence2" nodename="RealServer2"/> </method> </fence> </clusternode> </clusternodes> <cman expected_votes="1" two_node="1"/> <fencedevices> <fencedevice agent="fence_manual" name="fence1"/> <fencedevice agent="fence_manual" name="fence2"/> </fencedevices> <rm> <failoverdomains> <failoverdomain name="httpd_fail" ordered="0" restricted="1"> <failoverdomainnode name="RealServer1" priority="1"/> <failoverdomainnode name="RealServer2" priority="1"/> </failoverdomain> </failoverdomains> <resources> <ip address="192.168.10.254" monitor_link="1"/> <script file="/etc/init.d/httpd" name="httpd"/> <clusterfs device="/dev/webvg/webvg_lv1" force_unmount="1" fsid="8669" fstype="gfs2" mountpoint="/var/www/html" name="docroot" options=""/> </resources> <service autostart="1" domain="httpd_fail" name="httpd_srv" recovery="relocate"> <ip ref="192.168.10.254"/> <script ref="httpd"/> <clusterfs ref="docroot"/> </service> </rm> </cluster>
将产生后的cluster.conf通过scp复制到其他节点上。(第一次需要手动复制,集群服务启动后可以通过system-config-cluster向所有节点分发配置文件。)
在RealServer1 和RealServer2 上安装apache
yum install httpd
配置RealServer1(RealServer2类似)
NameVirtualHost 192.168.10.121:80
ServerName www.example.com
<VirtualHost 192.168.10.121:80>
DocumentRoot /var/www/html
ServerName www.example.com
</VirtualHost>
设置apache开机不启动
chkconfig httpd off
启动集群服务
service cman start service rgmanager start lvmconf --enable-cluster service clvmd start
集群启动后,开启system-config-cluster后,如下图。可以对集群的配置文件进行修改,修改完成后可以通过Send to Cluster向所有节点分发配置文件。该工具内置版本控制的功能,每次修改配置文件后,会自动产生一个新版本。集群服务启动后,“Cluster Manager”才会出现,其内容如右图。分别显示集群中的节点,集群服务的状态,和集群中的主节点。
测试
至此集群搭建完毕
查看集群状态: clustat
查看挂载状态: mount
手动切换主被节点:clusvcadm -r httpd_srv 备用主机名称
查看浮点ip附着在那台主机上: ip addr
通过浏览器访问apache: http://192.168.10.254
参考
1. 51CTO朱伟宏老师的视频教程,地址:http://edu.51cto.com/course/course_id-2.html
2. 百度文库:红帽集群套件RHCS四部曲