一、RHCS简介
RHCS是Red Hat Cluster Suite的缩写,也就是红帽子集群套件,RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合,,它将集群系统中三大集群架构(高可用性集群、负载均衡集群、存储集群)融合一体,可以给web应用、数据库应用等提供安全、稳定的运行环境。
二、RHCS的三大功能
1、高可用集群是RHCS的核心功能。当正使用的节点出现故障时,RHCS提供的高可用管理组件自动、快速的将应用使用的当前服务节点切换到另一个节点,保证应用的正常进行,而且节点转移功能对客户来说是透明的,所以也能实现应用持续、不间断的对外提供服务!
2、负载均衡集群是RHCS通过使用LVS(Linux Virtual Server)实现的。LVS是 一个开源的且功能强大的基于IP的负载均衡技术,LVS 由调度器和服务器节点组成,通过LVS的负载调度功能,可以将客户端请求平均的分配到各服务器节点上,当然,还可以自定义多种负载均衡策略,当客户请求进来时,调度器根据负载均衡策略来判断应该将请求分配到哪个服务器节点上,然后由分配的服务器节点去响应客户请求。不仅如此,LVS 还提供了服务节点故障转移功能,简单来说就是当某个服务节点出故障后,LVS 会自动屏蔽这个节点,并将它从集群踢除,同时将新来此节点的请求平滑的转移到其它正常节点上,当故障节点恢复正常后,LVS 又会自动将此节点加入集群中。这所有操作对客户而言都是透明的,从而保证了服务的不间断,稳定运行!
3、储存集群功能是由GFS文件系统实现的。GFS(Global File System)是一个分布式文件系统,通过锁管理机制,来协调和管理多个服务节点对同一文件系统的读写操作,允许多个服务同时去读写一个单一的共享文件系统;储存集群通过将共享数据放到一个共享文件系统中,从而消除了在应用程序间同步的麻烦。
三、实验环境
server1 172.25.64.1 luci,ricci RHEL6.5
server2 172.25.64.2 ricci RHEL6.5
四、RHCS高可用
server1和server2
1、配置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.64.250/rhel6.5
enabled=1
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.64.250/rhel6.5/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.64.250/rhel6.5/LoadBalancer
enabled=1
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.64.250/rhel6.5/ResilientStorage
enabled=1
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.64.250/rhel6.5/ScalableFileSystem
enabled=1
gpgcheck=0
2、安装软件
server1
[root@server1 ~]# yum install ricci luci -y #安装ricci、luci
[root@server1 ~]# passwd ricci #给ricci用户设置密码
[root@server1 ~]# /etc/init.d/ricci start #启动ricci
[root@server1 ~]# /etc/init.d/luci start #启动luci
[root@server1 ~]# chkconfig ricci on #开机自启
[root@server1 ~]# chkconfig luci on
[root@server1 ~]# vim /etc/hosts #编写本地解析,后面通过web添加集群需要
172.25.64.1 server1
172.25.64.2 server2
[root@server1 ~]# yum install httpd -y #阿帕奇用来测试
[root@server1 ~]# vim /var/www/html/index.html
server1
[root@server1 ~]# /etc/init.d/httpd start
server2
[root@server2 ~]# yum install ricci -y #只安装ricci即可
[root@server2 ~]# /etc/init.d/ricci start
[root@server2 ~]# chkconfig ricci on
[root@server2 ~]# passwd ricci
[root@server2 ~]# vim /etc/hosts
172.25.64.1 server1
172.25.64.2 server2
3、浏览器访问https://172.25.64.1:8084
可以看到luci的管理界面:
root用户登陆!
创建个集群看看!
还记得刚在写的本地解析吗?Node Name用的就是解析名,不是IP!
稍等片刻~
喝杯茶回来,看到创建好了
[root@server1 ~]# cat /etc/cluster/cluster.conf #可看到创建好的集群
[root@server1 ~]# clustat #这样看集群状态更直观
4、配置fence
物理机
[root@allen ~]# yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y
[root@allen ~]# mkdir /etc/cluster
[root@allen ~]# fence_virtd -c #fence配置
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 <<<< 注意
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 <<<<注意
钥匙处理:
[root@allen ~]# cd /etc/cluster/
[root@allen cluster]# ls #什么都没有,那就手动生成钥匙
手动生成钥匙
[root@allen cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
1+0 records in
1+0 records out
128 bytes (128 B) copied, 0.000210386 s, 608 kB/s
将钥匙传送给server1和server2
[root@allen cluster]# scp fence_xvm.key server1:/etc/cluster/
fence_xvm.key 100% 128 0.1KB/s 00:00
[root@allen cluster]# scp fence_xvm.key server2:/etc/cluster/
fence_xvm.key 100% 128 0.1KB/s 00:00
[root@allen cluster]# systemctl start fence_virtd.service
浏览器添加fence设备
去Nodes下给集群成员fence关联,用UUID一一对应
Domain处写UUID
UUID
弄好后是这个样子
-
同理,对server2也这样操作一遍
-
测试
[root@server2 ~]# fence_node server1 #将server1关掉
fence server1 success
可看到server1重启,则说名前面配置的fence其作用了!
5、添加失败回切(Failover domains)
选中Prioritized:对服务故障转移到的节点进行排序、Restricted:服务只能在指定的节点上运行、No Failback(资源故障不回切),选中下方的server1和server2的Member并输入优先级,这里server1输入1,server2输入10,就是以server1为主节点,数字越小优先级越高
6、添加集群资源(Resource)
-
运行服务的脚本资源
-
IP地址
-
可以看到还没有被使用
7、添加服务组
-
将刚才添加的集群资源添加进服务组
-
可以看到刚添加的资源正在被使用
7、测试
[root@server2 ~]# clustat
- 可以看到服务在server1上
[root@server1 ~]# echo c > /proc/sysrq-trigger #破坏内核
- server1出故障后服务自动漂移到了server2上