一,高可用集群概念
1,什么是高可用性?
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性;
主要是避免软件、硬件、人为造成的故障对业务的影响降低到最小程度,以保证服务不间断地运行;
2,高可用性知识点
(1)计算机的高可用性
计算机系统的可用性用平均无故障时间(MTTF)来度量,即计算机系统平均能够正常运行多长时间,才发生一次故障。系统的可用性越高,平均无故障时间越长。
可维护性用平均维修时间(MTTR)来度量,即系统发生故障后维修和重新恢复正常运行平均花费的时间。系统的可维护性越好,平均维修时间越短。
计算机系统的可用性定义为:MTTF/(MTTF+MTTR) * 100%。由此可见,计算机系统的可用性定义为系统保持正常运行时间的百分比。
描述 可用性级别 年度停机时间
基本可用性 99% 87.6小时
较高可用性 99.9% 8.8小时
具有故障自动恢复能力的可用性 99.99% 53分钟
极高可用性 99.999% 5分钟
(2)负载均衡服务器的高可用性
为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行High Availability监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主管理器就开始再次进行集群管理的工作了。为在主服务器失效的情况下系统能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,保持二者系统的基本一致。
(3)HA的容错备援运作过程
自动侦测(Auto-Detect)阶段由主机上的软件通过冗余侦测线,经由复杂的监听程序。逻辑判断,来相互侦测对方运行的情况,所检查的项目有:主机硬件(CPU和周边)、主机网络、主机操作系统、数据库引擎及其它应用程序、主机与磁盘阵列连线。为确保侦测的正确性,而防止错误的判断,可设定安全侦测时间,包括侦测时间间隔,侦测次数以调整安全系数,并且由主机的冗余通信连线,将所汇集的讯息记录下来,以供维护参考。
(4)自动切换(Auto-Switch)阶段 某一主机如果确认对方故障,则正常主机除继续进行原来的任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续的程序及服务。
(5)自动恢复(Auto-Recovery)阶段在正常主机代替故障主机工作后,故障主机可离线进行修复工作。在故障主机修复后,透过冗余通讯线与原正常主机连线,自动切换回修复完成的主机上。整个恢复过程完成由EDI-HA自动完成,亦可依据预先配置,选择回复动作为半自动或不恢复。
(6)高可用集群资源(HA Resource)和集群资源类型
集群资源是集群中使用的规则、服务和设备等,如VIP、httpd服务、STONITH设备等。类型如下:
Primitive:主资源,在某一时刻只能运行在某个节点上,如VIP。
group:组,使得多个资源同时停/启等,一般只包含primitive资源。
clone:克隆,可以在多个节点运行的资源
master/slave:特殊的clone资源,运行在两个节点上,一主一从
(7)自动切换选择规则
根据资源的倾向(资源粘性、位置约束的分数比较)进行转移;
资源的倾向(资源定位的依据):
A、资源粘性:资源对节点倾向程度,资源是否倾向于当前节点。score,正值倾向于当前节点(还要和位置约束结合)。
B、资源约束(Constraint):资源和资源之间的关系
a、排列约束 (colocation):资源间的依赖/互斥性,定义资源是否运行在同一节点上。score,正值表示要运行在同一节点上,负值则不可。
b、位置约束(location):每个节点都有一个score值,正值则倾向于本节点,负值倾向于其他节点,所有节点score比较,倾向于最大值的节点。
c、顺序约束(order):定义资源执行动作的次序,例如vip应先配置,httpd服务后配置。特殊的score值,-inf 负无穷,inf 正无穷。
也就是说资源粘性定义资源对资源当前所在节点的倾向性,而位置约束定义资源对集群中所有节点的倾向性。如webip的资源粘性为100,位置约束对node1为200,当webip在node2上时,node2上线资源会转移到node1,因为当前节点node2粘性100小于对node1的位置约束200;如webip的资源粘性为200,位置约束对node1为100,当webip在node2上时,node1上线资源不会转移到node1,继续留在node2上,因为当前节点node2粘性200大于对node1的位置约束100。
(8)处理不合法的集群节点
如果集群没有对其进行Fecning/Stonith隔离前,可以进行相关配置(without_quorum_policy),有如下配置选项:
stop:直接停止服务;
ignore:忽略,以前运行什么服务现在还运行什么(双节点集群需要配置该选项);
Freeze:冻结,保持事先建立的连接,但不再接收新的请求;
suicide:kill掉服务。
(9)集群脑裂(Split-Brain)和资源隔离(Fencing)
脑裂是因为集群分裂导致的,集群中有节点因为处理器忙或者其他原因暂时停止响应时,与其他节点间的心跳出现故障,但这些节点还处于active状态,其他节点可能误认为该节点"已死",从而争夺共享资源(如共享存储)的访问权,分裂为两部分独立节点。
脑裂后果:两个节点争抢共享资源,结果会导致系统混乱,数据损坏。
脑裂解决:直接停止服务,或者忽略,但完全解决还需要资源隔离(Fencing)。
资源隔离(Fencing):
当不能确定某个节点的状态时,通过fencing把对方干掉,确保共享资源被完全释放
节点级别:
STONITH(shoot the other node in the head,爆头。硬件方式),直接控制故障节点的电源。
资源级别:
例如:FC SAN switch(软件方式)可以实现在存储资源级别拒绝某节点的访问
3,工作方式
(1)主从方式 (非对称方式)
工作原理:主机工作,备机处于监控准备状况;当主机宕机时,备机接管主机的一切工作,待主机恢复正常后,按使用者的设定以自动或手动方式将服务切换到主机上运行,数据的一致性通过共享存储系统解决。
(2)双机双工方式(互备互援)
工作原理:两台主机同时运行各自的服务工作且相互监测情况,当任一台主机宕机时,另一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在共享存储系统中。
(3)集群工作方式(多服务器互备方式)
工作原理:多台主机一起工作,各自运行一个或几个服务,各为服务定义一个或多个备用主机,当某个主机故障时,运行在其上的服务就可以被其它主机接管。
4,高可用结构图
(1)Messaging and Membership Layer 信息传递层,传递集群信息的一种机制,通过监听UDP 694号端口,可通过单播、组播、广播的方式,实时快速传递信息,传递的内容为高可用集群的集群事务,例如:心跳信息,资源事务信息等等
(2)成员关系(Membership)层,这层最重要的作用是主节点(DC)通过Cluster Consensus Menbership Service(CCM或者CCS)这种服务由Messaging层提供的信息,来产生一个完整的成员关系。这层主要实现承上启下的作用,承上,将下层产生的信息生产成员关系图传递给上层以通知各个节点的工作状态;启下,将上层对于隔离某一设备予以具体实施。
(3)CRM(Cluster Resource Manager)集群资源管理器层,它主要是用来提供那些不具有高可用的服务提供高可用性的。它需要借助Messaging Layer来实现工作,因此工作在Messaging Layer上层。
资源管理器的主要工作是收集messaging Layer传递的节点信息,并负责信息的计算和比较,并做出相应的动作,如服务的启动、停止和资源转移、资源的定义和资源分配。
在每一个节点上都包含一个CRM,且每个CRM都维护这一个CIB(Cluster Information Base,集群信息库),只有在主节点上的CIB是可以修改的,其他节点上的CIB都是从主节点那里复制而来的。
CRM会推选出一个用于计算和比较的节点,叫DC(Designated coordinator)指定协调节点,计算由PE(Policy Engine)策略引擎实现,计算出结果后的动作控制由TE(Transition Engine)事务引擎实现。
在每个节点上都有一个LRM(local resource manager)本地资源管理器,是CRM的一个子功能,接收TE传递过来的事务,在节点上采取相应动作,如运行RA脚本等。
(4)LRM(Local Resource Manager)本地资源管理层
(5)RA(Resource Rgent)资源代理层,简单的说就是能够集群资源进行管理的脚本,如启动start,停止stop、重启restart和查询状态信息status等操作的脚本。LRM本地资源管理器负责运行。
资源代理分为:
Legacy heartbeat(heatbeat v1版本的资源管理);
LSB(Linux Standard Base),主要是/etc/init.d/*目录下的脚,start/stop/restart/status;
OCF(Open Cluster Famework),比LSB更专业,更加通用,除了上面的四种操作,还包含monitor、validate-all等集群操作
STONITH:实现节点隔离
5,高可用常用组合案例
heartbeat v2+haresource(或crm) (说明:一般常用于CentOS 5.X)
heartbeat v3+pacemaker (说明:一般常用于CentOS 6.X)
corosync+pacemaker (说明:现在最常用的组合)
cman + rgmanager (说明:红帽集群套件中的组件,还包括gfs2,clvm)
keepalived+lvs (说明:常用于lvs的高可用)
相关链接:
http://www.linux-ha.org/wiki/Main_Page
百度百科介绍:
https://baike.baidu.com/item/%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7/909038?fr=aladdin
高可用集群:
http://blog.csdn.net/tjiyu/article/details/52643096
https://www.cnblogs.com/rwxwsblog/p/6652872.html