一、RHCS
什么是RHCS
RHCS即 RedHat Cluster Suite ,中文意思即红帽集群套件。 红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足你的对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要。
提供有如下两种不同类型的集群:
- 1.高可用性:应用/服务故障切换-通过创建n个节点的服务器集群来实现关键应用和服务的故障切换
- 2.负载均衡:IP 负载均衡-对一群服务器上收到的 IP 网络请求进行负载均衡
RHCS特点
- 最多支持128个节点(红帽企业Linux 3 和红帽企业Linux 4 支持 16 个节点
- 可同时为多个应用提供高可用性
- NFS/CIFS 故障切换:支持 Unix 和 Windows 环境下使用的高可用性文件。
- 完全共享的存储子系统:所有集群成员都可以访问同一个存储子系统
- 综合数据完整性:使用最新的 I/O 屏障(barrier)技术,如可编程的嵌入式和外部电源开关装置(power switches)
- 服务故障切换:红帽集群套件可以确保及时发现硬件停止运行或故障的发生并自动恢复系统,同时,它还可以通过监控应用来确保应用的正确运行并在其发生故障时进行自动重启
集群相关术语
- 节点(node):运行集群进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和集群软件服务,在集群中,节点有主次之分,分别称为主节点和备用/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘、文件系统、网络地址和应用服务等。主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。
- 资源(resource):资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管。
- 事件(event):也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。这些事件都会导致节点的资源发生转移,HA的测试也是基于这些事件来进行的。
- 动作(action):事件发生时HA的响应方式,动作是由shell脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动。进而接管故障节点的资源。
集群大致结构
二、搭建RHCS环境
基本环境搭建
操作系统:rhel6.5
准备五台主机:
物理机:172.25.54.250,作为fence, 暂时不用
server1:172.25.54.1, 下载ricci,luci(为了提供Conga配置用户界面),server1作为主节点
server2:172.25.54.2, 下载ricci,server2作为副节点
server3:172.25.54.3 后面作iscci共享存储,此时暂时用作RS进行负载均衡测试
server4:172.25.54.4 ,作为RS,负载均衡测试
注:
从红帽企业版 Linux 6.1 开始,您在任意节点中使用 ricci 推广更新的集群配置时要求输入密码。所以在前面两台主机安装完成ricci后需要修改ricci用户的密码,这个是后面节点设置的密码,并且要作时间同步;然后启动安装的服务
避免其他因素影响:关闭所有防火墙,禁用selinux
server1 和server2:配置高可用 yum 源
物理机添加本地解析
[root@foundation54 ~]# vim /etc/hosts
172.25.54.1 server1
172.25.54.2 server2
创建集群
- 浏览器访问
https://172.25.54.1:8084
在网页浏览器的地址栏中输入 cman 服务器的 URL
luci服务器的URL语法为https://172.25.54.1:luci_server_prot
luci_server_port 的默认值为 8084
首次访问时,需做以下操作:
[root@server1 ~]# clustat
Cluster Status for tutu1 @ Wed Aug 1 10:38:44 2018
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server1 1 Online, Local
server2 2 Online
[root@server1 ~]#
脚本制作
[root@server1 ~]# vim /etc/init.d/nginx
[root@server1 ~]# cat /etc/init.d/nginx
#!/bin/bash
#
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
[root@server1 ~]# chmod a+x /etc/init.d/nginx //使脚本有执行权限
查看server1 和 server2 的 nginx 服务状态
[root@server1 ~]# /etc/init.d/nginx status
nginx is stopped
[root@server1 ~]#
[root@server2 ~]# /etc/init.d/nginx status
nginx is stopped
[root@server2 ~]#
测试
[root@server1 ~]# cat /usr/local/nginx/html/test.html
<h1>www.westos.com server1</h1>
[root@server1 ~]#
[root@server2 ~]# cat /usr/local/nginx/html/test.html
<h1>www.westos.com server2</h1>
[root@server2 ~]#
[root@server1 ~]# /etc/init.d/nginx stop
Stopping nginx: [ OK ]
[root@server1 ~]#
负载均衡——加入RS:server3, server4
- 添加物理机本地解析
[root@foundation54 ~]# vim /etc/hosts
172.25.54.100 www.westos.org bbs.westos.org westos.org
172.25.54.1 server1
172.25.54.2 server2
[root@foundation54 ~]#
修改 server1 和 server2 的nginx配置文件
// vim /usr/local/nginx/conf/nginx.conf 内容如下:
2 user nginx nginx;
3 worker_processes 1;
4 worker_cpu_affinity 1;
13 events {
14 worker_connections 65535;
15 }
// 下面添加的内容在 http { } 中
19 upstream westos {
20 #ip_hash;
21 #server 172.25.54.2:80;
22 server 172.25.54.3:80;
23 server 172.25.54.4:80;
24 server 127.0.0.1:80 backup;
25 }
125 server {
126 listen 80;
127 server_name www.westos.org;
128
129 location / {
130 proxy_pass http://westos;
131 }
132 }
编辑 server3 和 server4 的网页发布内容
[root@server3 ~]# vim /var/www/html/index.html
[root@server3 ~]# cat /var/www/html/index.html
<h1>server3</h1>
[root@server3 ~]#
[root@server4 ~]# vim /var/www/html/index.html
[root@server4 ~]# cat /var/www/html/index.html
<h1>server4</h1>
[root@server4 ~]#
测试
[root@server1 ~]# clustat
Cluster Status for tutu @ Thu Aug 2 12:58:56 2018
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server1 1 Online, Local, rgmanager
server2 2 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:nginx server1 started
[root@server1 ~]# /etc/init.d/nginx status
nginx (pid 30422 30420) is running...
[root@server1 ~]#
[root@server2 ~]# /etc/init.d/nginx status
nginx is stopped
[root@server2 ~]#
[root@server1 ~]# /etc/init.d/nginx stop
Stopping nginx: [ OK ]
[root@server1 ~]#
[root@server2 ~]# clustat
Cluster Status for tutu @ Thu Aug 2 12:59:29 2018
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server1 1 Online, rgmanager
server2 2 Online, Local, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:nginx server12 started
[root@foundation54 ~]# curl www.westos.org
<h1>server3</h1>
[root@foundation54 ~]# curl www.westos.org
<h1>server4</h1>
[root@foundation54 ~]# curl www.westos.org
<h1>server3</h1>
[root@foundation54 ~]# curl www.westos.org
<h1>server4</h1>
[root@foundation54 ~]# curl www.westos.org
<h1>server3</h1>
[root@foundation54 ~]#