一.概念讲解
1.RHCS是red hat cluster suite的缩写。
2.三个核心功能:
自动快速切换到另一个节点。
负载均衡集群LVS(Linux Virtual Server),将客户端请求平均分配到各个服务节点。可以定义分配策略。
还会自动屏蔽故障节点。接着将失败节点从集群中剔除。
LVS还可以提供 存储集群功能。GFS(Global File System).
3.RHCS集群的组成:
1.集群构架管理器
2. 高可用服务管理器:
一个节点故障,将服务转移到另一个正常的节点。
3.集群配置管理工具
4.Linux virtual Server
根据负载策略和算法合理的分配到各个服务节点,实现动态,智能的负载分担。
==4.RHCS是Red Hat Cluster Suite的缩写,==也就是红帽子集群套件,RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合,它将集群系统中三大集群架构融合一体,可以给web应用、数据库应用等提供安全、稳定的运行环境。更确切的说,RHCS是一个功能完备的集群应用解决方案,它从应用的前端访问到后端的数据存储都提供了一个行之有效的集群架构实现,通过RHCS提供的这种解决方案,不但能保证前端应用持久、稳定的提供服务,同时也保证了后端数据存储的安全。RHCS提供了集群系统中三种集群构架,分别是高可用性集群、负载均衡集群、存储集群。
5.RHCS提供的三个核心功能具体介绍:
- 高可用集群: 是RHCS的核心功能。当应用程序出现故障,或者系统硬件、网络出现故障时,应用可以通过RHCS提供的高可用性服务管理组件自动、快速从一个节点切换到另一个节点,节点故障转移功能对客户端来说是透明的,从而保证应用持续、不间断的对外提供服务,这就是RHCS高可用集群实现的功能。
- 负载均衡集群: RHCS通过LVS来提供负载均衡集群,而LVS是一个开源的、功能强大的基于IP的负载均衡技术,LVS由负载调度器和服务访问节点组成,通过LVS的负载调度功能,可以将客户端请求平均的分配到各个服务节点,同时,还可以定义多种负载分配策略,当一个请求进来时,集群系统根据调度算法来判断应该将请求分配到哪个服务节点,然后,由分配到的节点响应客户端请求,同时,LVS还提供了服务节点故障转移功能,也就是当某个服务节点不能提供服务时,LVS会自动屏蔽这个故障节点,接着将失败节点从集群中剔除,同时将新来此节点的请求平滑的转移到其它正常节点上来;而当此故障节点恢复正常后,LVS又会自动将此节点加入到集群中去。而这一系列切换动作,对用户来说,都是透明的,通过故障转移功能,保证了服务的不间断、稳定运行。
- 存储集群: RHCS通过GFS文件系统来提供存储集群功能,GFS是Global File System的缩写,它允许多个服务同时去读写一个单一的共享文件系统,存储集群通过将共享数据放到一个共享文件系统中从而消除了在应用程序间同步数据的麻烦,GFS是一个分布式文件系统,它通过锁管理机制,来协调和管理多个服务节点对同一个文件系统的读写操作。
6.集群套件的作用: - 集群中luci的作用:
luci是用来配置和管理集群,监听在8084上
*集群中ricci的作用:
ricci是安装在每个后端的每个节点上的,luci管理集群上的各个节点就是通过和节点上的ricci进行通信,ricci监听在11111上 - 集群中fence的作用:
当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。并且有效的阻止了“脑裂"的发生。
实验环境:
主机 | ip | 服务 |
---|---|---|
server1 | 172.25.66.1 | ricci,luci,httpd |
server2 | 172.25.66.2 | ricci,httpd |
物理机 | 172.25.254.66 | 测试 |
二.搭建RHCS环境
1.配置server1和server2的环境
<1>在server1上配置高级yum源并将其传给server2并在server2进行检测
[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo
[root@server1 ~]# yum clean all
[root@server1 ~]# yum repolist
[root@server1 ~]# scp /etc/yum.repos.d/rhel-source.repo root@172.25.66.2:/etc/yum.repos.d/rhel-source.repo
配置的内容如下:
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.66.250/westos1
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.66.250/westos1/HighAvailability
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.66.250/westos1/LoadBalancer
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.66.250/westos1/ResilientStorage
gpgcheck=0
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.66.250/westos1/ScalableFileSystem
gpgcheck=0
server2中检测的结果如下:
<2>在真机中添加解析(server1和server2中如果没有做,最好做上)
[root@foundation66 ~]# vim /etc/hosts
文件中的内容如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.250 content.example.com
172.25.66.1 server1 www.westos.org bbs.westos.org
172.25.66.2 server2
172.25.66.3 server3
172.25.66.4 server4
172.25.66.5 server5
172.25.66.6 server6
<3>在server1中下载rhcs图形网页管理工具,更改密码为redhat后开启其服务
[root@server1 ~]# yum install ricci luci -y #此下载过程可能会比较慢,需要耐心等候,ricci是高可用节点布置,高可用的图形界面管理
[root@server1 ~]# /etc/init.d/ricci start
[root@server1 ~]# /etc/init.d/luci start
[root@server1 ~]# passwd ricci #会自动生成用户ricci,修改密码
[root@server1 ~]# chkconfig luci on #设置开机自启动
[root@server1 ~]# chkconfig ricci on #设置开机自启动
[root@server1 ~]# chkconfig --list #查看是否是开机自启
注意:
1.ricci:图形里的集群管理
2.luci:图形界面
<4>在server2中下载ricci,更改密码为redhat后开启其服务
[root@server2 ~]# yum install ricci -y
[root@server2 ~]# /etc/init.d/ricci start ##HA(高可用)节点
[root@server2 ~]# chkconfig ricci on
[root@server1 ~]# chkconfig luci on
[root@server2 ~]# chkconfig --list #查看是否是开机自启
[root@server2 ~]# passwd ricci
补充:
可以使用以下命令查看一些服务是否开机自启动(2,3,4中如果是on则说明此服务是开机自启动的)
[root@server2 ~]# chkconfig --list
三.创建高可用集群(之前用的是keepalived,这次用的是ricci)
1.在server1中重新启动luci服务,可以查看到其对应的段口号
[root@server1 ~]# /etc/init.d/luci restart
或者使用以下命令进行查看:
netstat -tnlp ##查看到图形界面服务的接口是8084
2.在物理机的浏览器中输入https://172.25.66.1:8084(也可以输入https://server1:8084,前提是必须在物理机中进行解析),依次进行点击
分析:
1.因为是https访问,所以需要添加信任网络,点击Adanced
2.8084是luci的端口,当开启luci服务时,便可以查看到其端口号,命令如下:/etc/init.d/luci restart
3.使用超级用户进行登陆(登陆帐号和密码是server1中的系统用户和密码,普通用户需要经过超级用户的审核才能登陆,所以一般使用超级用户登陆)
注意:
warning中的内容是害怕你对集群不了解,所以让你先去了解以下,ok即可
4.点击集群管理(Manage Clusters),->点击Create,创建集群,->填写以下内容,填写完后点击CreateCluster,会出现一个等待页,等待即可,
此过程相当慢,一定要耐心等待
节点添加成功后的连接之后的界面如下:
ssh远程连接被断开:
在浏览器中显示节点添加成功:
在两个主机中利用clustat命令可以查看到节点的工作状态(也可以查看文件/etc/cluster/cluster.conf)
[root@server1 ~]# clustat
[root@server1 ~]# cat /etc/cluster/cluster.conf
[root@server2 ~]# clustat
[root@server2 ~]# cat /etc/cluster/cluster.conf
注意:
1.Download Packages表示下载所用的包,因为之前在主机中已经下载了关于集群的包
2.Reboot Nodes Before Joining Cluster表示当加入集群后重启节点,在安装包下载完后自动重启
3.Enable Shared Storage Support表示是否激活集群存储,支持设备共享
4.在点击创建节点之后会出现等待页,此页表示正在创建节点到集群中,正在下载包,且server1和server2会重启,然后重新连接server1和server2,此过程可能会比较慢
5.在创建节点之前,在主机中一定要将集群相关的服务设置为自启动,否则将无法正常启动
6.保证物理机上的key是打开的,再传,否则会不统一
四.配置fence
“Fence技术”核心在于解决高可用集群在出现极端问题情况下的运行保障问题,在高可用集群的运行过程中,有时候会检测到某个节点功能不正常,比如在两台高可用服务器间的心跳线突然出现故障,这时一般高可用集群技术将由于链接故障而导致系统错判服务器宕机从而导致资源的抢夺,为解决这一问题就必须通过集群主动判断及检测发现问题并将其从集群中删除以保证集群的稳定运行,Fence技术的应用可以有效的实现这一功能。
1.在物理机中配置fence
<1>在物理主机中安装fence
[root@foundation66 ~]# yum search fence-virtd
[root@foundation66 ~]# yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y
<2>查看fence的相关信息(例如fence的安装包,状态,以及再查看网卡的名称)
[root@foundation66 ~]# rpm -qa | grep fence
[root@foundation66 ~]# systemctl status fence_virtd.service
[root@foundation66 ~]# ifconfig
<3>在物理机中使fence初始化
[root@foundation66 ~]# fence_virtd -c #config配置模块
注意:
1.此处需要修改:Interface [virbr0]: br0,此处应该修改为物理主机中的只是网卡名称
2.除了以上部分,其他全部按回车即可
3.br0不能和虚拟机通信,一定要填写br0
<4>建立一个密钥目录,并截取密钥
[root@foundation66 ~]# mkdir /etc/cluster
[root@foundation66 ~]# cd /etc/cluster
[root@foundation66 cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
[root@foundation66 cluster]# ls
<5>将修改好的密钥文件发送给节点server1和server2,确保server1和sever2用的是同一个密钥
[root@foundation66 cluster]# scp fence_xvm.key root@172.25.66.1:/etc/cluster
[root@foundation66 cluster]# scp fence_xvm.key root@172.25.66.2:/etc/cluster
<6>开启fence服务并查看
[root@foundation66 cluster]# systemctl start fence_virtd.service
[root@foundation66 cluster]# systemctl status fence_virtd.service
2.添加fence设备
<1>点击Fence Devices,之后点击Add
<2>选择多播模式的fence
<3>绑定节点(两个节点都要做以下操作)
点击server1->Add Fence Method->Add Fence instance->
注意:
在Add Fence Device中的Domain是要在虚拟机管理器中查看虚拟机的UUID的的
<4>两个节点绑定成功后的配置文件内容如下:
[root@server1 ~]# cat /etc/cluster/cluster.conf
<5>在server1中通过fence关闭server2,server2断电重启则表示成功
(我的这个没成功,谁能看出来我的问题在哪的话,请告诉我)
注意:
1.如果没有密钥,需要新建一个/etc/cluster(集群管理下)
2.fence server2会立马重启设备
五.高可用服务配置(httpd为例)----负载均衡
(1)配置高可用服务
1.首先添加故障转移域
将sevrer1和server2添加到域中,当server2或server2出现故障时,会自动切换到正常的节点上,当集群打开后,服务会落在优先级高的节点上
注意:
数字越小优先级越高
2.点击资源,将服务所要用到的资源添加进去
首先添加IP Address(集群对外的VIP),5表示切换主机的时间
然后添加Script,添加启动httpd服务的脚本
3.创建一个服务组(服务中需要用到的资源的集合)
4.向服务组中将上一步添加的资源都添加进去
5.在server1和server2中安装httpd服务,编写测试页
在server1中:
[root@server1 ~]# yum install httpd -y
[root@server1 html]# vim index.html
[root@server1 html]# cat index.html
在server2中:
[root@server2 ~]# yum install httpd -y
[root@server2 ~]# cd /var/www/html
[root@server2 html]# vim index.html
[root@server2 html]# cat index.html
(2)测试
1.在物理机中刷新浏览器,此时会显示httpd服务在server2中运行,因为其优先级高,所以默认会在servr2中运行
注意:
1.在网页中点击启动,如果不成功,多刷新几次即可,因为这个高可用是在网页上选的,所以比较慢
2.不要手动关掉某个服务,因为关掉后,可能在网页中无法启动,只要将两台主机重新启动才可以继续实验
2.使用clustat查看节点的状态,可以发现httpd服务在server2中运行
[root@server1 html]# clustat
3.在server2中查看ip,会发现可以看到自动添加上的VIP
[root@server2 html]# ip a
4.在物理机*问两台节点,会发现server1无法访问(因为其httpd服务是关闭的,如果想要访问server1中的内容,开启sever1的httpd服务即可)
[root@foundation66 ~]# curl 172.25.66.1
[root@foundation66 ~]# curl 172.25.66.2
5.在物理机*问VIP,显示的是server2中的内容
[root@foundation66 ~]# curl 172.25.66.100
6.测试高可用,在server2中手动宕掉服务器,再次访问VIP时,会发现访问的内容是server1中的内容,等server2重启成功之后,而server2中的内容是server2中的内容
错误界面(无论在server1中还是在server2中宕掉服务器,在规定的时间内都无法重启,应该是上一问的高可用没有设置好,感谢各路神仙指出问题):
7.当关掉server2上的httpd服务时,服务会自动转移到server1上,在网页中再次运行即可关掉server2中的httpd服务
在server1中查看httpd服务的状态,发现是活跃的,查看节点的状态时,发现server1的httpd服务是活跃的
[root@server1 ~]# /etc/init.d/httpd status
[root@server1 ~]# clustat
在物理主机中访问时发现server2中的内容无法正常访问(因为server2中的httpd服务是关闭的)
[root@foundation66 ~]# curl 172.25.66.1
[root@foundation66 ~]# curl 172.25.66.2
[root@foundation66 ~]# curl 172.25.66.100
注意:
1.一般在企业中,需要勾选No Failback(不会切故障),即当server2挂掉后,服务会自动漂移到server1上,并且VIP也会漂移过来,但是当server2重启成功后,服务不会再进行漂移
2.运行独占,这台服务器只能给一个服务使用的,其他的不能用