Linux-HA高可用集群
-
初识高可用集群
高可用集群,High Availability Cluster,简称HACluster。高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务。高可用集群是用于单个节点发生故障时,能够自动将资源、服务进行切换,这样可以保证服务 一直在线。在这个过程中,对于客户端来说是透明的。
高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。当一台服务器出现故 障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能, 更能满足用户不断出现的需求变化。
-
高可用集群的衡量标准
高可用集群一般是通过系统的可靠性(reliability)和系统的可维护性 (maintainability)来衡量的。通常用平均无故障时间(MTTF)来衡量系统的可靠性,用平均维护 时间(MTTR)来衡量系统的可维护性。因此,一个高可用集群服务可以这样来定义:HA=MTTF/(MTTF+MTTR)*100%。
一般高可用集群的标准有如下几种:
99%:表示 一年宕机时间不超过4天
99.9% :表示一年宕机时间不超过10小时
99.99%: 表示一年宕机时间不超过1小时
99.999% :表示一年宕机时间不超过6分钟
-
高可用集群的三种方式
(1)、主从方式(非对称)
这种方式组建的高可用集群通常包含2个节点和一个或多个服务器,其中一台作为主节点(active),另一台作为备份节点(standy)。备份节点随时都在检测主节点的健康状况,当主节点发生故障时,服务会自动切换到备份节点上以保证服务正常运行。
(2)、对称方式
这种方式一般包含2个节点和一个或多个服务,其中每一个节点都运行着不同的服务且相互作为备份,两个节点互相检测对方的健康状况,这样当其中一个节点发生故障时,该节点上的服务会自动切换到另一个节点上去。这样可以保证服务正常运行。
(3)、多机方式
这种集群包含多个节点和多个服务。每一个节点都可能运行和不运行服务,每台服务器都监视着几个指定的服务,当其中的一个节点发生故障时,会自动切换到这组服务器中的一个节点上去。
-
高可用集群的组件
实现高可用集群需要以下组件:
(1)Messaging Layer:可以理解为信息层,主要的作用是传递当前节点的心跳信息,并告知给对方,这样对方就知道其他节点是否在线。如果不在线,则可以实现资源转移, 这样另一台节点就可以充当主节点,并正常提供服务。传递心跳信息一般使用一根心跳线连接,该线接口可以使用串行接口也可以是以太网接口来连接。每一个节点 上都包含信息层。
(2)CRM:Cluster Resource Messager,该组件叫做资源管理器,它主要是用来提供那些不具有高可用的服务提供高可用性的。它需要借助Messaging Layer来实现工作,因此工作在Messaging Layer上层。资源管理器的主要工作是根据messaging Layer传递的健康信息来决定服务的启动、停止和资源转移、资源的定义和资源分配。在每一个节点上都包含一个CRM,且每个CRM都维护这一个 CIB(Cluster Internet Base,集群信息库),只有在主节点上的CIB是可以修改的,其他节点上的CIB都是从主节点那里复制而来的。在CRM中还包含LRM和DC等组件。
(3)LRM:Local Resource Messager,叫做本地资源管理器,它是CRM的一个子组件,用来获取某个资源的状态,并且管理本地资源的。例如:当检测到对方没有心跳信息时,则会启动本地相应服务。
(4)DC:可以理解为事务协调员,这个是当多个节点之间彼此收不到对方的心跳信息时,这样各个节点都会认为对方发生故障 了,于是就会产尘分裂状况(分组)。并且都运行着相关服务,因此就会发生资源争夺的状况。因此,事务协调员在这种情况下应运而生。事务协调员会根据每个组 的法定票数来决定哪些节点启动服务,哪些节点停止服务。DC一般位于主节点上。
(5)PE和TE:都是DC的子组件。PE(Policy Engine),策略引擎,来定义资源转移的一整套转移方式,但只是做策略者,并不亲自来参加资源转移的过程,而是让TE来执行自己的策略。TE(Transition Engine),就是来执行PE做出的策略的并且只有DC上才运行PE和TE。
(6)stonithd组件,“爆头”:这种方式直接操作电源开关,当一个节点发生故障时,另 一个节点如果能侦测到,就会通过网络发出命令,控制故障节点的电源开关,通过暂时断电,而又上电的方式使故障节点被重启动或者直接断电, 这种方式需要硬件支持。
(7)共享存储:对于某些服务如http、mysql等服务,需要将某些数据共享,这样当使用不同的节点来访问存储设备时,都可以返回正确的信息。使用共享存储设备,将相关的数据放在共享设备上,这样无论那一台服务器挂了,都不会影响用户的访问。
常用的共享存储设备有如下三种:
DAS:Direct Attached Storage,直接附加存储
NAS:Network Attached Storage,网络附加存储
SAN:Storage Area Network,存储区域网络
(8)资源:启动一个服务需要的子项目。例如,ip、服务(脚本)和文件系统(存储数据)等。
(9)资源转移:将有故障节点的VIP设置到另一个节点上去,并在另一个节点启用相应的服务。
(10)资源代理(Resource Agent):RA实际负责启动资源的,LRM用来管理本地资源的,但是不能启动资源,当需要启动资源时会调用RA来启动,RA是一个脚本文件,在一个节点上可能有多个RA。
因此,一个高可用集群服务的组件架构大概是这样子的:
5.以下的实验,用来加深大家对高可用集群的认识和理解:
实验环境:
物理主机:172.25.254.26
虚拟主机:server3、server4、server5
server3.example.com:172.25.26.3
server4.example.com:172.25.26.4
server5.example.com:172.25.26.5
实验配置:
server3和server4配置相同,以下以server3为例:
##server3:
[[email protected] ~]# cd /etc/yum.repos.d/
[[email protected] yum.repos.d]# ls
yum.repo ##此处将替他源删除,以免干扰
[[email protected] yum.repos.d]# vim yum.repo ##yum源配置
-
# repos on instructor for cla***oom use
# Main rhel6.5 server
[base]
name=Instructor Server Repository
baseurl=http://172.25.26.254/rhel6.5
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# HighAvailability rhel6.5
[HighAvailability]
name=Instructor HighAvailability Repository
baseurl=http://172.25.26.254/rhel6.5/HighAvailability
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# LoadBalancer packages
[LoadBalancer]
name=Instructor LoadBalancer Repository
baseurl=http://172.25.26.254/rhel6.5/LoadBalancer
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# ResilientStorage
[ResilientStorage]
name=Instructor ResilientStorage Repository
baseurl=http://172.25.26.254/rhel6.5/ResilientStorage
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# ScalableFileSystem
[ScalableFileSystem]
name=Instructor ScalableFileSystem Repository
baseurl=http://172.25.26.254/rhel6.5/ScalableFileSystem
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release[[email protected] yum.repos.d]# yum clean all
[[email protected] yum.repos.d]# yum repolist
[[email protected] yum.repos.d]# cd
[[email protected] ~]# yum install ricci -y
[[email protected] ~]# echo westos | passwd --stdin ricci
[[email protected] ~]# vim /etc/hosts
172.25.26.3 server3.example.com
172.25.26.4 server4.example.com
172.25.26.5 server5.example.com[[email protected] ~]# /etc/init.d/ricci start
[[email protected] ~]# chkconfig ricci on ##开机自启
[[email protected] ~]# cd /etc/cluster/
[[email protected] cluster]# ls
cluster.conf cman-notify.d##server4:配置同server3
##server5:
[[email protected] ~]# cd /etc/yum.repos.d/
[[email protected] yum.repos.d]# ls
yum.repo
[[email protected] yum.repos.d]# vim yum.repo
yum源配置同server3[[email protected] yum.repos.d]# yum clean all
[[email protected] yum.repos.d]# yum repolist
[[email protected] ~]# yum install luci -y
[[email protected] ~]# vim /etc/hosts
172.25.26.3 server3.example.com
172.25.26.4 server4.example.com
172.25.26.5 server5.example.com[[email protected] ~]# /etc/init.d/luci start
最后一行会出现链接https://server5.example.com:8084,访问即可
##物理主机
[[email protected] ~]# vim /etc/hosts
解析同server3
-
##物理主机
[[email protected] ~]# yum install fence-virtd-* -y
[[email protected] ~]# mkdir /etc/cluster
[[email protected] ~]# fence_virtd -c ##生成key,注意:桥接需选br0
[[email protected] 9-14]# cd /etc/cluster/
[[email protected] cluster]# ls
fence_xvm.key
[[email protected] cluster]# cd
[[email protected] cluster]# systemctl restart fence_virtd
[[email protected] cluster]# systemctl status fence_virtd.service
[[email protected] cluster]# netstat -anulp | grep 1229
udp 0 0 0.0.0.0:1229 0.0.0.0:* 31537/fence_virtd
[[email protected] cluster]# dd if=/dev/random of=/etc/cluster/fence_xvm.key bs=128 count=1
[[email protected] cluster]# file fence_xvm.key
fence_xvm.key: data
[[email protected] cluster]# systemctl restart fence_virtd.service
[[email protected] cluster]# scp fence_xvm.key [email protected]:/etc/cluster/
[[email protected] cluster]# scp fence_xvm.key [email protected]:/etc/cluster/server3:
[[email protected] ~]# cd /etc/cluster/
[[email protected] cluster]# ls
cluster.conf cman-notify.d fence_xvm.key[[email protected] cluster]# /etc/init.d/ricci restart
server4:
[[email protected] ~]# cd /etc/cluster/
[[email protected] cluster]# ls
cluster.conf cman-notify.d fence_xvm.key[[email protected] cluster]# /etc/init.d/ricci restart
server5:[[email protected] ~]# /etc/init.d/luci restart
https://server5.example.com:8084
以下在图形界面做相应的配置
Nodes模块,server3与server4相同,此处以server3为例
Fence Devices模块:
Failover Domains模块:
Resources模块:
Service Groups模块:
Conligure模块:
完成以上配置后,可用以下命令检测:
[[email protected] cluster]# cat cluster.conf ##可以发现刚才图形界面的配置,都会在server3和server4这个文件中体现,并且两个内容相同,表示成功
[[email protected] cluster]# clustat ##检验健康状况
Cluster Status for zyz_123 @ Sat Sep 17 03:01:47 2016
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server3.example.com 1 Online, Local
server4.example.com 2 Online
[[email protected] cluster]# fence_node server4.example.com ##down掉server4,再次检测,会发现server4关机后又重启
读者也可启动http服务,然后进行相应的验证。
以上就是小编对Linux高可用集群的初步小结,期待着读者提出宝贵的意见和建议!
转载于:https://blog.51cto.com/12035595/1853292