一、简介

RHCS 即 RedHat Cluster Suite ,中文意思即红帽集群套件。红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足你的对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要。对于需要最大 正常运行时间的应用来说,带有红帽集群套件(Red Hat Cluster Suite)的红帽企业 linux 集群是最佳的选择。红帽集群套件专为红帽企业 Linux 量身设计,它提供有如下两种不同类型的集群:
1、应用/服务故障切换-通过创建n个节点的服务器集群来实现关键应用和服务的故障切换
2、IP 负载均衡-对一群服务器上收到的 IP 网络请求进行负载均衡利用红帽集群套件,可以以高可用性配置来部署应用,从而使其总是处于运行状态-这赋予了企业向外扩展(scale- out)linux 部署的能力。对于网络文件系统(NFS)、Samba 和Apache 等大量应用的开源应用来说,红帽集群套件提供了一个随时可用的全面故障切换解决方案。

二、术语

分布式集群管理器(CMAN)
Cluster Manager,简称CMAN,是一个分布式集群管理工具,它运行在集群的各个节点上,为RHCS提供集群管理任务。
CMAN用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的关系,当集群中某个节点出现故障,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。
锁管理(DLM)
Distributed Lock Manager, 简称DLM,表示一个分布式锁管理器,它是RHCS的一个底层基础构件,同时也为集群提供了一个公用的锁运行机制,在RHCS集群系统中,DLM运行在集 群的每个节点上,GFS通过锁管理器的锁机制来同步访问文件系统元数据。CLVM通过锁管理器来同步更新数据到LVM卷和卷组。
DLM不需要设定锁管理服务器,它采用对等的锁管理方式,大大的提高了处理性能。同时,DLM避免了当单个节点失败需要整体恢复的性能瓶颈,另外,DLM的请求都是本地的,不需要网络请求,因而请求会立即生效。最后,DLM通过分层机制,可以实现多个锁空间的并行锁模式。
配置文件管理(CCS)
Cluster Configuration System,简称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有IBM RSAII卡,HP的iLO卡,还有IPMI的设备等,外部fence设备有UPS、SAN SWITCH、NETWORK SWITCH等
高可用服务管理器
高可用性服务管理主要用来监督、启动和停止集群的应用、服务和资源。它提供了一种对集群服务的管理能力,当一个节点的服务失败时,高可用性集群服务管理进程可以将服务从这个失败节点转移到其它健康节点上来,并且这种服务转移能力是自动、透明的。RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。在一个RHCS集群中,高可用性服务包含集群服务和集群资源两个方面,集群服务其实就是应用服务,例如apache、mysql等,集群资源有很多种,例如一个IP地址、一个运行脚本、ext3/GFS文件系统等。在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的,所谓失败转移域是一个运行特定服务的集群节点的集合。在失败转移域中,可以给每个节点设置相应的优先级,通过优先级的高低来决定节点失败时服务转移的先后顺序,如果没有给节点指定优先级,那么集群高可用服务将在任意节点间转移。因此,通过创建失败转移域不但可以设定服务在节点间转移的顺序,而且可以限制某个服务仅在失败转移域指定的节点内进行切换。
集群配置管理工具
RHCS提供了多种集群配置和管理工具,常用的有基于GUI的system-config-cluster、Conga等,也提供了基于命令行的管理工具。
system-config-cluster是一个用于创建集群和配置集群节点的图形化管理工具,它有集群节点配置和集群管理两个部分组成,分别用于创建集群节点配置文件和维护节点运行状态。一般用在RHCS早期的版本中。Conga是一种web集群配置工具,与system-config-cluster不同的是,Conga是通过web方式来配置和管理集群节点的。Conga有两部分组成,分别是luci和ricci,luci安装在一台独立的计算机上,用于配置和管理集群,ricci安装在每个集群节点上,Luci通过ricci和集群中的每个节点进行通信。RHCS也提供了一些功能强大的集群命令行管理工具,常用的有clustat、cman_tool、ccs_tool、fence_tool、clusvcadm等。

三、环境准备:

服务器:

ansible server : 192.168.8.40
node2.chinasoft.com: 192.168.8.39
node3.chinasoft.com: 192.168.8.41
node4.chinasoft.com: 192.168.8.42

1、配置/etc/hosts文件,不使用DNS解析域名

192.168.8.39 node2.chinasoft.com node2
192.168.8.42 node4.chinasoft.com node4
192.168.8.41 node3.chinasoft.com node3

2、时间同步、在ansible服务器配置免密码访问node2、node3、node4
在ansible服务器中添加rhcs组
# vim /etc/ansible/hosts
加入如下内容:

[rhcs]
node2.chinasoft.com
node3.chinasoft.com
node4.chinasoft.com

时间同步

# ansible rhcs -a "ntpdate -u 192.168.8.102"
node2.chinasoft.com | success | rc=0 >>
29 Apr 12:05:30 ntpdate[26149]: step time server 192.168.8.102 offset 4.144328 sec node3.chinasoft.com | success | rc=0 >>
29 Apr 12:05:30 ntpdate[23829]: adjust time server 192.168.8.102 offset 0.208051 sec node4.chinasoft.com | success | rc=0 >>
29 Apr 12:05:30 ntpdate[4932]: step time server 192.168.8.102 offset 2.731589 sec # ansible rhcs -a "date"
node2.chinasoft.com | success | rc=0 >>
Fri Apr 29 12:05:35 CST 2016 node4.chinasoft.com | success | rc=0 >>
Fri Apr 29 12:05:35 CST 2016 node3.chinasoft.com | success | rc=0 >>
Fri Apr 29 12:05:35 CST 2016

/etc/hosts文件是否相同

# ansible rhcs -m shell -a "cat /etc/hosts"
node2.chinasoft.com | success | rc=0 >>
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.39 node2.chinasoft.com node2
192.168.8.42 node4.chinasoft.com node4
192.168.8.41 node3.chinasoft.com node3 node4.chinasoft.com | success | rc=0 >>
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.39 node2.chinasoft.com node2
192.168.8.42 node4.chinasoft.com node4
192.168.8.41 node3.chinasoft.com node3 node3.chinasoft.com | success | rc=0 >>
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.39 node2.chinasoft.com node2
192.168.8.42 node4.chinasoft.com node4
192.168.8.41 node3.chinasoft.com node3

3、使用centos6.5作为yum源
注意:如果启用了epel源,其会通过epel安装Luci依赖的rpm包,这会被rhcs认为是不安全的。因此,安装luci时要禁用epel源。
检查Yum源

# ansible rhcs -m shell -a "yum repolist"
node2.chinasoft.com | success | rc=0 >>
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
repo id repo name status
base localyum 3995
updates localyum 3995
repolist: 7990 node3.chinasoft.com | success | rc=0 >>
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
repo id repo name status
base localyum 3995
updates localyum 3995
repolist: 7990 node4.chinasoft.com | success | rc=0 >>
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
repo id repo name status
base localyum 3995
updates localyum 3995
repolist: 7990

4、关闭几台服务器上的防火墙和selinux(避免干扰)

具体可参考前面的博文:CentOS 6.5环境实现corosync+pacemaker实现DRBD高可用
http://blog.csdn.net/reblue520/article/details/51271281

四、安装ricci和luci工具

1、在各ha节点上安装ricci
# ansible rhcs -m yum -a "name=ricci state=present disablerepo=epel"
# ansible rhcs -m yum -a "name=ricci state=present"

管理机安装luci并启动luci服务(8.40 安装ansible服务的机器)实际使用中,如果没有专用的跳板机,也可以以三个节点中的某节点来替代
# yum install -y luci --disablerepo=epel
# service luci start

2、启动HA节点的ricci服务并设置为开机启动

# ansible rhcs -m service -a "name=ricci state=started enabled=yes"
node2.chinasoft.com | success >> {
"changed": true,
"enabled": true,
"name": "ricci",
"state": "started"
} node3.chinasoft.com | success >> {
"changed": true,
"enabled": true,
"name": "ricci",
"state": "started"
} node4.chinasoft.com | success >> {
"changed": true,
"enabled": true,
"name": "ricci",
"state": "started"
}

随便找一台ha节点机器执行netstat -tunlp 可以看到ricci服务已启动
# netstat -tunlp | grep ricci
tcp        0      0 :::11111                    :::*                        LISTEN      26995/ricci


五、通过HA WEB配置集群
访问https://192.168.8.40:8084 可以看到HA节点的web控制台
输入root用户和密码即可登录


1、为HA节点添加ricci的密码,配置集群要用到

# ansible rhcs -m shell -a "echo centos | passwd --stdin ricci"
node2.chinasoft.com | success | rc=0 >>
Changing password for user ricci.
passwd: all authentication tokens updated successfully. node3.chinasoft.com | success | rc=0 >>
Changing password for user ricci.
passwd: all authentication tokens updated successfully. node4.chinasoft.com | success | rc=0 >>
Changing password for user ricci.
passwd: all authentication tokens updated successfully.

依次点击Manager Clusters/create创建一个名为mycluster的集群,创建会自动重新启动HA节点,需要等几分钟生效

2、故障转移域配置,如我们当前配置:故障后下线又上线不自动切换,优先级分别为node2、node3、node4

定义节点启动的优先级,数字越小级别越高

3、定义资源

添加一个VIP:地址为192.168.8.77

在HA节点上安装apache软件
# ansible rhcs -m yum -a "name=httpd state=present"
删除默认欢迎主页
# ansible rhcs -m shell -a "rm -rf /etc/httpd/conf.d/welcome.conf"

添加一个编辑各自节点主页内容为当前主机名的脚本
# vim setindex.sh
#!/bin/bash
#
echo "<h1>`uname -n`" > /var/www/html/index.html

# chmod +x setindex.sh 
将脚本拷贝到各节点
# for i in {2..4}; do scp -p setindex.sh node$i.chinasoft.com:/tmp/; done

执行脚本
# ansible rhcs -m shell -a "/tmp/setindex.sh"

验证主页是否修改成功
# ansible rhcs -a "cat /var/www/html/index.html"
node2.chinasoft.com | success | rc=0 >>
<h1>node2.chinasoft.com

node3.chinasoft.com | success | rc=0 >>
<h1>node3.chinasoft.com

node4.chinasoft.com | success | rc=0 >>
<h1>node4.chinasoft.com

4、定义服务
添加一个名为webservice的服务,并关联之前定义的webdomain

添加资源如:VIP和SCRIPTS(httpd服务)

启动服务

通过访问http://192.168.8.77/
可以看到服务运行在了node3上面,通过nodes使node3下线,此时转移到了node4上,因为将node4的优先级调整为了1
让node3重新上线此时服务依旧运行在node4上面

通过在任意HA节点上运行clustat、cman_tool status及cman_tool services命令可以看到集群的状态

通过rpm命令可以看到rhcs集群底层是把cman和corosync以插件的方式运行的

最新文章

  1. 高大上的微服务可以很简单,使用node写微服务
  2. 火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题
  3. css3径向渐变详解-遁地龙卷风
  4. Validate US Telephone Numbers
  5. CAT XQX --- 省市三级级联实现说明
  6. DSp寄存器“是怎么和板子上的”具体地址“一一对应起来的
  7. Linux中修改环境变量及生效方法
  8. EditText 密码属性
  9. 基于Spring开发的一个BIO-RPC框架(对新人很友好)
  10. 看不到git远程分支
  11. day21.模块和包
  12. Android 7.0及以上使用OpenCL
  13. 52-python 画图二维
  14. 【模板】倍增LCA
  15. JetBrains PyCharm 专业版激活
  16. 通过指定的 url 去网络或者文件服务器下载文件到本地某个文件夹
  17. Java获取当前类名的两种方法
  18. Timeout in android httpclient
  19. TraceSource记录程序日志
  20. tensorflow reduction_indices理解

热门文章

  1. Redis我想入门——启动
  2. (转)使用 Spring缓存抽象 支持 EhCache 和 Redis 混合部署
  3. Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭
  4. 使用electron为贪吃蛇游戏创建全局快捷键
  5. 跟我一起使用electron搭建一个文件浏览器应用吧(四)
  6. java基础基础总结----- 关键字、标识符、注释、常量和变量、运算符、语句、函数、数组(三)
  7. xgboost应用
  8. cas单点登陆。就这一篇就够了!!!!!
  9. JAVA记录-java代码优化策略
  10. JAVA 动态代理学习记录