一、RHCS
RHCS(Red Hat Cluster Suite,红帽集群套件)是Red Hat公司开发整合的一套综合集群软件组件,提供了集群系统中三种集群构架,分别是高可用性集群、负载均衡集群、存储集群,可以通过在部署时采用不同的配置,以满足你的对高可用性、负载均衡、可扩展性、文件共享和节约成本的需要。
1、高可用集群原理
高可用集群的各个硬件组成部分
2、红帽集群套件RHCS的工作原理
服务器集群:由两台以上服务器组成,加入到集群的服务器被称为”节点”。通常以私有网络作为”心跳”,当集群中tat的一台服务器出现故障时,其他服务器会按照集群中设定的接管机制实现”故障切换(Failover)”。为保证服务器网络及其与外部存储的连接,通常会对网卡进行”网卡绑定”,对外部存储的HBA卡链接进行”多路径绑定”。
心跳:服务器集群中的服务器通过”心跳”机制来判断自身及集群中的其他服务器是否存活,通常”心跳”会通过RJ45接口或COM接口实现。
虚拟IP及公共网络:集群软件或硬件通过TCP/IP协议对客户端可见的公共网络公开了一个虚拟的网络IP,此IP由集群机制管理,指向当前”活动”的集群服务器”节点”。对于客户端而言,集群就相当于一个服务器,可以实现透明访问。
2.1 cman集群管理器
cman是一个基于内核的对称通用集群管理器。它由两部分组成:连接管理器(cnxman),用于处理成员、消息、投票数、事件通知和过渡;服务管理器(SM),用于处理那些需要通过各种方式进行集群管理的应用及外部系统。cman是RHCS中最核心的服务,可通过系统中的serivce命令进行启/停操作;DLM、GFS、CLVM及Fence都依赖于cman群集管理器。
2.2 rgmanager资料组管理器
rgmanager(Resource Group Manager)基于cman并使用DLM动态锁管理机制。与cman一样, rgmanager也是RHCS中的一个核心服务,可通过系统中的serivce命令进行启/停操作;rgmanager 管理并为集群中的Service(服务)和Resources(资源)提供Failover错误切换功能。
2.3 Service(服务)
每个服务都被指定存在于一个Failover Domain中,并与多个Resources(资源)关联。每个服务可以理解为实际操作中的一个应用,如Web服务器、Java中间件、数据库、文件共享系统、邮件系统等。这些应用在运行时不但对应用程序本身有要求(如某个运行指令或多个运行脚本的组合),还要提供对诸如虚拟IP、文件系统等资源的支持。
2.4 Failover Domain(错误切换域)
每个Failover Domain都与两个或两个以上的Node(服务器节点)进行绑定,Failover Domain指定了集群中某个Service运行时的范围,也就是指定此Service将会由哪些服务器提供Failover错误切换功能。每个Node都允许与多个Failover Domain进行绑定,也就是说每个Node都可以为多个 Service服务,因此可以实现”主动/主动(双活动)”方式的集群配置。
2.5 Resources(资源)
Resources指的是组成一个应用所需的各种组件,通常包括:应用程序、虚拟IP、文件系统。 资源与Service组合时,往往还会体现出一定的层次关系,例如:通常系统都要求确认虚拟IP及文件 系统都已经正常连接及挂载后,才可以运行某个应用程序,这个顺序一旦调转,就会使应用程序运行出错。
2.6 Fence机制
在RHCS集群运行时,为了避免因出现不可预知的情况而造成的”脑裂”现象(如:心跳线断连, 此时两台服务器都无法找到对方,无法向对方发出操作指令,都各自认为自己是主节点;又或者主 服务器系统崩溃,系统能接收到备用服务器的操作指令,但无法返回运行情况的确认信号,导致备 用服务器无法获知系统资源的使用情况),系统要求通过Fence机制来保障系统切换时的I/O使用安全。
Fence主要通过服务器或存储本身的硬件管理接口,又或者是外部电源管理设 备,来对服务器或存储发起直接的硬件管理指令,控制服务器或存储链路的开关。因此,Fence机制也被称为”I/O屏障”技术。当”脑裂”发生时彻底断开问题服务器的所有I/O连接,保证问题服务器不 能对集群中的I/O资源(共享的文件系统资源)进行任何操作,严格保证集群环境中企业核心数据的完 整性。
二、实验环境的说明
以下操作server1和server4都要配置
1.虚拟机
server1 172.25.8.1(配置Nginx、ricci和luci)
server2 172.25.8.2(Apache)
server4 172.25.8.4(配置Nginx、ricci)
2.高可用yum源
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# vim rhel-source.repo
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.8.250/source6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.8.250/source6.5/HighAvailability
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.8.250/source6.5/LoadBalancer
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.8.250/source6.5/ResilientStorage
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.8.250/source6.5/ScalableFileSystem
gpgcheck=0
3.关闭selinux
vim /etc/sysconfig/selinux
Disabled
4.时间同步
ntpdate 172.25.8.4
5.关闭火墙
/etc/init.d/iptables stop
三、Nginx的部署
详细操作请看:
nginx系统安装及配置
编写一个nginx启动脚本,放在/etc/init.d/中:
[root@server1 ~]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"
start() {
echo -n $"Starting $prog: "
mkdir -p /dev/shm/nginx_temp
daemon $NGINX_SBIN -c $NGINX_CONF
RETVAL=$?
echo
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -TERM
rm -rf /dev/shm/nginx_temp
RETVAL=$?
echo
return $RETVAL
}
reload(){
echo -n $"Reloading $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -HUP
RETVAL=$?
echo
return $RETVAL
}
restart(){
stop
start
}
configtest(){
$NGINX_SBIN -c $NGINX_CONF -t
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
restart
;;
configtest)
configtest
;;
*)
echo $"Usage: $0 {start|stop|reload|
restart|configtest}"
RETVAL=1
esac
exit $RETVAL
[root@server1 ~]# chmod +x /etc/init.d/nginx #更改文件的执行权限
[root@server1 ~]# chkconfig --add nginx #加入系统服务启动列表
[root@server1 ~]# chkconfig nginx on #开机启动
[root@server1 ~]# /etc/init.d/httpd stop #nginx的端口为80,在开启nginx服务前一定要确保httpd服务是关的
Stopping httpd: [ OK ]
server进行相同操作,不再进行演示
四、配置高可用集群
1.安装软件包
Server1:
[root@server1 ~]# yum install ricci luci -y
[root@server1 ~]# passwd ricci #加密
Changing password for user ricci.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@server1 ~]# /etc/init.d/ricci start #开启ricci服务
Starting oddjobd: [ OK ]
generating SSL certificates... done
Generating NSS database... done
Starting ricci: [ OK ]
[root@server1 ~]# chkconfig ricci on #开机自启
[root@server1 ~]# /etc/init.d/luci start #开启luci服务
Adding following auto-detected host IDs (IP addresses/domain names), corresponding to `server1' address, to the configuration of self-managed certificate `/var/lib/luci/etc/cacert.config' (you can change them by editing `/var/lib/luci/etc/cacert.config', removing the generated certificate `/var/lib/luci/certs/host.pem' and restarting luci):
(none suitable found, you can still do it manually as mentioned above)
Generating a 2048 bit RSA private key
writing new private key to '/var/lib/luci/certs/host.pem'
Start luci... [ OK ]
Point your web browser to https://server1:8084 (or equivalent) to access luci
[root@server1 ~]# chkconfig luci on #开机自启
解析
[root@server1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.8.1 server1
172.25.8.2 server2
172.25.8.3 server3
172.25.8.4 server4
server4:
[root@server4 ~]# yum install ricci -y
[root@server4 ~]# passwd ricci
Changing password for user ricci.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@server4 ~]# /etc/init.d/ricci start
Starting system message bus: [ OK ]
Starting oddjobd: [ OK ]
generating SSL certificates... done
Generating NSS database... done
Starting ricci: [ OK ]
[root@server4 ~]# chkconfig ricci on
server4解析和server1相同
注意事项
1. 红帽高可用性附加组件最多支持的集群节点数为 16。
2. 使用 luci 配置 GUI。
3. 该组件不支持在集群节点中使用 NetworkManager。如果您已经在集群节点中安装了NetworkManager,您应该删除或者停止该服务。
4. 集群中的节点使用多播地址彼此沟通。因此必须将红帽高可用附加组件中的每个网络切换以及关联的联网设备配置为启用多播地址并支持 IGMP(互联网组管理协议)。请确定红帽高可用附加组件中的每个网络切换以及关联的联网设备都支持多播地址和 IGMP
5. 红帽企业版 Linux 6 中使用 ricci 替换 ccsd。因此必需在每个集群节点中都运行 ricci
6. 从红帽企业版 Linux 6.1 开始,您在任意节点中使用 ricci 推广更新的集群配置时要求输入密码。您在系统中安装 ricci 后,请使用 passwd ricci 命令为用户 ricci 创建密码。
7. 登陆luci的web界面的登陆为luci主机的root用户和密码
8. 创建添加Failover domain 时候 节点的值越小 ,越靠前。
9. 添加某种服务节点上都需要有该服务,创建完成后自动启动
2.创建集群
在浏览器访问https://172.25.7.1:8084
首次访问 luci 时,网页浏览器会根据显示的自我签名 SSL 证书( luci 服务器的证书)给出具体提示。确认一个或者多个对话框后,网页显示器会显示 luci 登录页面。
如果创建失败在server1和server4中执行 > /etc/cluster/cluster.conf清除掉
用root用户进行登陆:
创建集群:
创建后:
Failover Domains故障转移域设置:
server1的优先权高于server4,数字越小优先级越高
Resource设置:
添加nginx启动脚本
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
确保没有多余的函数
Service Group设置: