本文主要是介绍集群之高可用集群,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么是高可用集群呢?以前我不知道的时候感觉这东西很高端的说,等明白了以后发现高可用集群也就是当一台主机出现故障(包括物理故障和服务故障)后,在很短时间内有其它服务器来接替它的工作,代它响应客户请求,就这么简单。显然我们只知道这个是不够的,我们必须得从内部原理上来理解高可用集群的实现机制。
信息层:有两个节点的webserver集群,RS1平时响应客户请求,RS2做备用在RS1节点故障的时候来取代它来响应客户请求,但是RS2怎么知道RS1故障了呢?第一种方法:每个几秒钟RS2去检测RS2的状态,如果检测不到RS2就取代它。第二种方法:两台主机用心跳线连接起来,大家相互传递着心跳信息(UDP时间很短所以解析度可以很高),如果在某一刻感受不到R1的心跳信息了,R2就去取代它响应客户请求。 我们知道第一种办法是有缺陷的:假如每5秒探测一下,假如恰好刚探测完R1挂点了,而剩下的5秒就出现了空白,所以高可用时我们一般采用第二种方法,所有集群用心跳线连接,平时在心跳线上传递着健康状态信息,当某台主机出现故障,其它节点随时可以知道它的情况,在逻辑上我们称之为信息层。来个图来表示:
逻辑上它是信息层,但是我们需要用程序来实现这个功能,而且这个程序运行在每一个节点上,平时他们通过心跳线传递着健康状态信息,常见的软件有:
1.Heartbeat
2.keepalived
3.ultramonkey
4.Corosync(openAIS的子项目)
Heartbeat 是比较常用的软件,Keepalived配置先对比较简单,而ultramonkey好像不怎么常用,Corosync比heartbeat功能还要强大,功能更加丰富。
但是我们需要知道的是信息层仅传递状态信息当服务或主机出现问题它不负责作出任何动作,但是它为其它程序提供了一个API接口,可以供其它程序调用,其它程序通过信息层传递过来的信息,来实现服务的转移,这个软件我们称之为集群资源管理器(Cluster Resource Manager),这个层次在逻辑上称之为资源管理层,实现这个层次的软件常见的有:
Heartbeat V1(legacy)
Heartbeat V2(CRM)
Heartbeat V3(Pacemaker) + Cluster-glue
Cman(Cluster manager)
web界面:RHCS:luci/ricci,SUSE:hawk
Heartbeat V1 版也就是legacy版可以提供配置文件haresource.cf来管理服务的转移。
Heartbeat V2 版名字就叫CRM,它提供了一个监听端口,可以用其它GUI工具来配置管理集群
Heartbeat V3 版后资源管理器独立出来,而不是作为Heartbeat的一部分了,它的名字叫Pacemaker功能异常强大,还提供了命令行工具来管理集群。
Cman 是红帽开发的一个资源管理器,在红帽5.X版本上可能遇到,6.x版本后红帽也开始使用强大的pacemaker
Luci/ricci红帽开发的web界面资源管理器,hawk SUSE他们开发的没接触过
资源管理器根据信息层传递的健康信息来决定节点服务的启动或者停止,总是说资源,下面我们来谈谈资源,资源说白了就是一个完整服务需要用到的子项目 如:要运行web服务,IP地址,http的进程得需要吧,我们把这些子项目称之为集群资源。这些资源也是有类型的,可以分这么几类:
primitive 也称之为local类型,同一时刻只能运行在一个节点
group 组资源,组资源运行在一个节点上
clone 需要在每个Node上运行的资源
Master-Slave 只能运行在两个节点,一主一从
资源管理器来决定集群资源的启动与停止,大家又知道资源之间是有相互关系的,比如我们的集群资源有:IP,httpd, 共享存储,显然httpd是需要先挂载共享存储,自己才运行的,否则自己运行起来也毫无意义的,所以我们又对资源定义了约束,常见约束有:
位置约束 它定义了某个资源流在哪个节点的倾向性,举个例子,三个节点RS1,RS2,RS3,假如RS1挂了,资源应该向哪个节点转移?也就是资源更倾向于谁
顺序约束 它定义了资源的启动顺序。比如:共享存储要先于httpd启动吧。
排列约束 它定义了资源间的排列关系。比如:IP资源与httpd资源能不能运行在一起,还是必须在一起。
我们知道资源管理器是来决定各个资源的启动与终止的,有这种情况,RS1,RS2平时用共享存储,平时RS1挂载着共享存储,来响应客户的请求,加入RS1出现了故障,RS不能检测它的状态信息,这个时候假如RS1还能正常工作只不过联系不上RS2了,假如这个时候RS2也挂载了共享存储,当他们同时在共享存储写同一个文件时文件系统会崩溃,而这个后果我们是不能接受的,所以资源转移之前需要先完成其他节点的隔离,隔离一般分为两种:资源隔离和主机隔离。
资源隔离 就是让被隔离资源不能能再使用这个资源。
主机隔离 就是直接让改主机关机。
比如出现了这种状况总共五个节点,由于某种原因分为了两个组,一个组3个节点,另一个组两个节点,那到底哪个组中节点启动服务呢?这个时候就要引入quorum,即法定票数。在一个集群中会有一个角色叫DC(事务协调员),它负责统计各整个集群的事务信息,然后形成CIB(集群信息库),然后同步集群信息库到各个节点上。当节点出现分裂后,每个组会推选出DC,由它来统计各个组的法定票数quorum,大于原来总票数的二分之一的一组继续运行服务,小于二分之一的停止服务。每个节点可投的票数可以使不一致的,比如2个节点的一组的某个机器性能异常强大,我们就可以给这个节点多分配几票,而那3个节点都是1票,出现这种分裂,那2个节点运行服务,而那3个节点的组终止服务。集群能否继续存在的一个策略就是看quorum是否大于总票数的二分之一。
我们继续往下进行,资源管理器来决定是否集群是否继续运行下去,如果满足策略,集群会继续运行,这个时候资源管理器会调用资源代理(RA)来实现资源的启动与停止,资源管理本身没有启动资源的能力。那RA又是什么呢?你想想什么东西能启动我们的资源?相信大家都用过,那就是平时在/etc/rc.d/init.d下的服务脚本,它也是RA的一种。我们来看看RA有几种类型:
LSB(Linux standard base):这个就是我们常见的/etc/rc.d/init.d下的标准Linux脚本
Heartbeat V1 :Heartbeat V1上提供的脚本
OCF(Open Cluster Framwork):OCF脚本是比LSB更强大的一种脚本,支持更多的参数
STONITH:直接终止主机的RA设备,比如电源交换机
资源管理器通过HA隔离故障的节点或者节点上的资源,转移这些资源到其它节点,有些同学开始问了,这个资源怎么转移过去?呵呵,其实是在另一个节点上启动一模一样的资源而已。比如:设置一个VIP,启动本机上的httpd,挂载原来的共享设备,这样整个服务有在一个节点宕机后无痛的重建起来,期间的间隔时间很短,在几秒之间,从而实现了高可用。
1.2 建立双机互信
ssh连接测试一下,是否输入密码,如果没有测表示成功
2.1 需要的软件包有:
2.7启用GUI界面,配置管理资源
三、配置集群资源 --Resource ID:WebIP(自定义),选择资源代理IPaddr,添加IP为172.16.1.1--Add 添加 3.2 新建资源httpd 右击WebService组 -- Add New item -- Native -- Resource ID:WebServer(自定义) -- 选择资源代理httpd -- Add 添加 3.3 启动资源 右击WebService组,start 显实 running on 某个节点,表示成功,测试访问VIP |
这篇关于集群之高可用集群的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!