linux高可用集群(HA)原理详解

高可用集群mysql

1、什么是高可用集群linux

        高可用集群就是当某一个节点或服务器发生故障时,另外一个节点可以自动且当即向外提供服务,即将有故障节点上的资源转移到另外一个节点上去,这样另外一个节点有了资源既能够向外提供服务。高可用集群是用于单个节点发生故障时,可以自动将资源、服务进行切换,这样能够保证服务一直在线。在这个过程当中,对于客户端来讲是透明的。sql

 

2、高可用集群的衡量标准服务器

高可用集群通常是经过系统的可靠性(reliability)和系统的可维护性(maintainability)来衡量的。一般用平均无端障时间(MTTF)来衡量系统的可靠性,用平均维护 时间(MTTR)来衡量系统的可维护性。所以,一个高可用集群服务能够这样来定义:HA=MTTF/(MTTF+MTTR)*100%。网络

通常高可用集群的标准有以下几种:架构

99%:表示 一年宕机时间不超过4天ide

99.9% :表示一年宕机时间不超过10小时工具

99.99%: 表示一年宕机时间不超过1小时性能

99.999% :表示一年宕机时间不超过6分钟spa

 

3、高可用集群的三种方式

实现高可用集群有三种方式:

(1)、主从方式(非对称)

这种方式组建的高可用集群一般包含2个节点和一个或多个服务器,其中一台做为主节点(active),另外一台做为备份节点(standy)。备份节点随时都在检测主节点的健康情况,当主节点发生故障时,服务会自动切换到备份节点上以保证服务正常运行。

这种方式下的高可用集群其中的备份节点平时不会启动服务,只有发生故障时才会有用,所以感受比较浪费。

 

(2)、对称方式

这种方式通常包含2个节点和一个或多个服务,其中每个节点都运行着不一样的服务且相互做为备份,两个节点互相检测对方的健康情况,这样当其中一个节点发生故障时,该节点上的服务会自动切换到另外一个节点上去。这样能够保证服务正常运行。

 

(3)、多机方式

这种集群包含多个节点和多个服务。每个节点均可能运行和不运行服务,每台服务器都监视着几个指定的服务,当其中的一个节点发生故障时,会自动切换到这组服务器中的一个节点上去。

 

 

4、高可用集群的组件

实现高可用集群须要用到以下组件:

一、Messaging  Layer:能够理解为信息层,主要的做用是传递当前节点的心跳信息,并告知给对方,这样对方就知道其余节点是否在线。若是不在线,则能够实现资源转移,这样另外一台节点就能够充当主节点,并正常提供服务。传递心跳信息通常使用一根心跳线链接,该线接口可使用串行接口也能够是以太网接口来链接。每个节点上都包含信息层。

能够提供该组件的软件有:

(1)、heartbeat

heartbeat有三个版本即heartbeat v一、heartbeat  v2和heartbeat  v3

heartbeat v1是比较老的版本,heartbeat v2是目前稳定的版本,在作实验的时候使用该版本。

(2)、corosync(openAIS的子项目)

(3)、keepalive

(4)、cman

Heartbeat 是比较经常使用的软件,Keepalived配置相对比较简单,而ultramonkey好像不怎么经常使用,Corosync比heartbeat功能还要强大,功能更加丰富
后续实验过程以上三种都会使用到

 

二、CRM:Cluster  Resource Messager,该组件叫作资源管理器,它主要是用来提供那些不具备高可用的服务提供高可用性的。它须要借助Messaging  Layer来实现工做,所以工做在Messaging Layer上层。资源管理器的主要工做是根据messaging Layer传递的健康信息来决定服务的启动、中止和资源转移、资源的定义和资源分配。在每个节点上都包含一个CRM,且每一个CRM都维护这一个CIB(Cluster Internet  Base,集群信息库),只有在主节点上的CIB是能够修改的,其余节点上的CIB都是从主节点那里复制而来的。在CRM中还包含LRM和DC等组件。

能够提供CRM的软件有:

heartbeat v1自带的资源管理为haresource

heartbeat v2自带的资源管理有haresource和crm

其中crm因为配置文件是XML格式的,大多数人若是不懂其语法格式的话,可能会出现配置错误。所以crm提供了一个监听端口,能够用其它GUI工具来配置管理集群

Heartbeat V3 版后资源管理器独立出来,而不是做为Heartbeat的一部分了,它的名字叫Pacemaker功能异常强大,还提供了命令行工具来管理集群。

Cman 是红帽开发的一个资源管理器,在红帽5.X版本上可能遇到,6.x版本后红帽也开始使用强大的pacemaker

 

三、LRM:Local Resource  Messager,叫作本地资源管理器,它是CRM的一个子组件,用来获取某个资源的状态,而且管理本地资源的。例如:当检测到对方没有心跳信息时,则会启动本地相应服务。

 

四、DC:能够理解为事务协调员,这个是当多个节点之间彼此收不到对方的心跳信息时,这样各个节点都会认为对方发生故障了,因而就会产尘分裂情况(分组)。而且都运行着相关服务,所以就会发生资源争夺的情况。所以,事务协调员在这种状况下应运而生。事务协调员会根据每一个组的法定票数来决定哪些节点启动服务,哪些节点中止服务。 例如高可用集群有3个节点,其中2个节点能够正常传递心跳信息,与另外一个节点不能相互传递心跳信息,所以,这样3个节点就被分红了2组,其中每个组都会推选一个DC,用来收集每一个组中集群的事务信息,并造成CIB,且同步到每个集群节点上。同时DC还会统计每一个组的法定票数(quorum),当该组的法定票数大于二分之一时,则表示启动该组节点上的服务;不然中止该节点上的服务。对于某些性能比较强的节点来讲,它能够投多张票,所以每一个节点的法定票数并非只有一票,须要根据服务器的性能来肯定。DC通常位于主节点上。

 

五、PE和TE

PE和TE也是DC的子组件,其中:

PE(Policy Engine):策略引擎,来定义资源转移的一整套转移方式,但只是作策略者,并不亲自来参加资源转移的过程,而是让TE来执行本身的策略。

 

TE(Transition Engine): 就是来执行PE作出的策略的而且只有DC上才运行PE和TE。


 

 六、stonithd组件
STONITH(Shoot The Other Node in the Head,”爆头“), 这种方式直接操做电源开关,当一个节点发生故障时,另 一个节点若是能侦测到,就会经过网络发出命令,控制故障节点的电源开关,经过暂时断电,而又上电的方式使故障节点被重启动或者直接断电, 这种方式须要硬件支持。

若是备份节点在某一时刻不能收到主节点的心跳信息时,那么若是此时备份节点马上抢占资源时,而此时主节点正好在执行写操做,备份节点一旦也执行相应的写操做,会致使文件系统错乱或者服务器崩溃,所以在抢占资源的时候可使用资源隔离机制来防止此类事件发生。而咱们经常使用stonithd(即爆头)来使主节点不在抢占资源。

其中资源隔离包括:

(1)、节点级别

使用stonithd设备来实现

(2)、资源级别

例如:使用FC SAN switch能够实如今存储资源级别拒绝某节点的访问

 

七、共享存储

对于某些服务如http、mysql等服务,须要将某些数据共享,这样当使用不一样的节点来访问存储设备时,均可以返回正确的信息。若是不使用存储设备,假设http服务为例,当某个客户想访问某个图片时,若是这个图片只放在某个指定的服务器上时,一旦该服务器挂了,http服务就会切换到另外一台设备上去,而另外一台设备上面没有该图片,那么该用户此时就不能访问该图片了,固然这种状况是咱们不想看到了。为了解决这类事件发生,可使用共享存储设备,将相关的数据放在共享设备上,这样不管那一台服务器挂了,都不会影响用户的访问。

经常使用的共享存储设备有以下三种:

DAS:Direct  Attached  Storage,直接附加存储

NAS:Network Attached Storage,网络附加存储

SAN:Storage  Area  Network,存储区域网络

 

所以,一个高可用集群服务的组件架构大概是这样子的:

wKiom1SxYbjT9fBkAADA1XIVAJI184.jpg

 

八、资源

在上面好多地方都讲到了资源,那么什么是资源呢?实现一个高可用性须要那些资源呢?

其实资源就是启动一个服务须要的子项目。例如启动一个httpd服务,须要ip,也须要服务脚本、还须要文件系统(用来存储数据的),这些咱们均可以统称为资源。所以,实现一个高可用集群通常须要

ip、服务(脚本)和文件系统(存储数据),固然有些高可用集群不须要存储设备的。

资源也是有类型的,能够分为这样几类:

(1)、primitive:能够理解为主资源,有时候看到的会是native,都是一个意思,该资源只在主节点上有。(固然备份节点一旦将资源夺过来了,也就成了主节点,所以,主节点是相对来讲的)

(2)、group:组资源,将多个资源绑定在一个同一个组上面且运行在同一个节点上。

(3)、clone:是将primitive资源克隆n份且运行在每个节点上

(4)、master/slave:也是将primitive克隆2份、其中master和slave节点各运行一份,且只能在这2个节点上运行。

 

对于某些集群服务来讲,启动相关的资源是有前后顺序的。例如启动一个mysql集群服务,首先应该先挂载共享存储设备,不然即时mysql服务启动起来了,用户也访问不了数据。所以,通常说来,咱们须要将资源进行约束。资源约束有以下几类:

(1)、位置约束(location):资源对节点的倾向程度,一般可使用一个分数(score)来定义,当score为正值时,表示资源倾向与此节点;负值表示资源倾向逃离于此节点。也能够将score定义为-inf(负无穷大)和inf(正无穷大)。例如:有三个节点rs一、rs二、rs3当rs1是主节点且发生故障时,则比较rs2和rs3的score值,谁是正值,则资源将会转移到哪一个节点上去。

(2)、排列约束(colocation):用来定义资源是否能够在一块儿,一般也是使用一个score来定义的。当score是正值表示资源能够在一块儿;不然表示不能够在一块儿。经过定义资源类型为group也能够来将全部资源绑定在一块儿。

(3)、顺序约束(order):用来定义资源启动和中止的顺序。例如,首先应该先挂载共享存储,在启动httpd或mysqld服务才行吧。

 

资源粘性:用来定义资源是否倾向留在该节点。一般使用score来定义,当score为正数表示乐意留在当前节点,负数表示不乐意留在当前节点。

当某个高可用集群即包含资源粘性又包含位置约束,一旦该节点发生故障后,资源就会转移到另外一个节点上去。可是当以前的节点恢复正常时,须要比较全部的资源粘性之和与全部位置约束之和谁大谁小,这样资源才会留在大的一方。

 

 

资源转移

将有故障节点的VIP设置到另外一个节点上去,并在另外一个节点启用相应的服务,挂载相应的存储设备等等均可以叫作资源转移。

 

九、资源代理(Resource Agent)

RA实际负责启动资源的,LRM用来管理本地资源的,可是不能启动资源,当须要启动资源时会调用RA来启动,RA是一个脚本文件,在一个节点上可能有多个RA。一般在rhel上,启动系统服务的不也都是一些脚本文件吗。常见的RA有以下风格:

(1)、LSB(Linux  Standard  Base),这是一种咱们常见的如/etc/init.d/下的标准linux脚本风格。

(2)、OCF(Open Cluster Framwork):OCF脚本是比LSB更强大的一种脚本,支持更多的参数

 

通常说来,构建一个高可用集群服务须要以上组件才能完成。

接下来关于实验部分将在后文介绍

相关文章
相关标签/搜索