1.高可用集群概念
高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转 移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务。高可用集群是用于单个节点发生故障时,能够自动将资源、服务进行切换,这样可以保证服务 一直在线。在这个过程中,对于客户端来说是透明的。
2.高可用集群组件
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).DC:事务协调员,其包括PE和TE两个子模块,DC负责收集每个组中集群的事务信息,并形成CIB,且同步到每一个集群节点上。同时DC还会统计每个组的法定票数(quorum),当该组的法定票数大于二分之一时,则表示启动该组节点上的服务;否则停止该节点上的服务。DC一般位于主节点上。
4).PE和TE:PE和TE是DC的子组件,PE(Policy Engine),策略引擎,来定义资源转移的一整套转移方式,但只是做策略者,并不亲自来参加资源转移的过程,而是让TE来执行自己的策略。TE(Transition Engine),事务引擎, 就是来执行PE做出的策略的。
5).LRM:Local Resource Messager,叫做本地资源管理器,它是CRM的一个子组件,用来获取某个资源的状态,并且管理本地资源的。例如:当检测到对方没有心跳信息时,则会启动本地相应服务。
6).RA:Resource Agent,资源代理,实际负责启动关闭资源的,LRM用来管理本地资源的,但是不能启动关闭资源,当需要启动关闭资源时会调用RA来启动,RA是一个个脚本文件,在一个节点上可能有多个RA。常见的RA风格有OCF和LSB。
7).stonith:如果备份节点在某一时刻不能收到主节点的心跳信息时,那么如果此时备份节点立刻抢占资源时,而此时主节点正好在执行写操作,备份节点一旦也执行相应的写操作,会导致文件系统错乱或者服务器崩溃,因此在抢占资源的时候可以使用资源隔离机制来防止此类事件发生。而我们常常 使用stonithd(即爆头)来使主节点不再抢占资源。
3.资源
资源就是启动一个服务需要的子项目。例如启动一个httpd服务,需要ip,也需要服务脚本、还需要文件系统(用来存储数据的),这些我们都可以统称为资源。
资源类型:
primitive:可以理解为主资源,有时候看到的会是native,都是一个意思,表示在某一时刻只能运行在某一结点上的资源。
group:组资源,将多个资源绑定在一个同一个组上面且运行在同一个节点上。
clone:是将primitive资源克隆n份且运行在多个节点上。
master/slave:也是将primitive克隆2份、其中master和slave节点各运行一份,且只能在这2个节点上运行。
资源粘性:资源是否倾向于留在当前节点。通常使用score来定义,当score为正数表示乐意留在当前节点,负数表示不乐意留在当前节点。
资源约束:
位置约束(location):资源对节点的倾向程度,通常可以使用一个分数(score)来定义,当 score为正值时,表示资源倾向与此节点;负值表示资源倾向逃离于此节点。也可以将score定义为-inf(负无穷大)和inf(正无穷大)。例如: 有三个节点rs1、rs2、rs3当rs1是主节点且发生故障时,则比较rs2和rs3的score值,谁是正值,则资源将会转移到哪个节点上去。
排列约束(colocation):用来定义资源是否可以在一起,通常也是使用一个score来定义的。当score是正值表示资源可以在一起;否则表示不可以在一起。通过定义资源类型为group也可以来将所有资源绑定在一起。
顺序约束(order):用来定义资源启动和停止的顺序。例如,首先应该先挂载共享存储,再启动httpd或mysqld服务才行吧。
资源隔离级别:资源隔离是为了集群产生脑裂时防止由于抢占共享存储导致文件系统崩溃。
节点级别:使用stonithd设备来实现。
资源级别:使用FC SAN switch可以实现在存储资源级别拒绝某节点的访问。
参考资料:
linux高可用集群原理详解:http://www.mamicode.com/info-detail-416675.html