高可用集群系列之基础篇2

基础概念

心跳

  1. 什么是心跳
    就是将多台服务器用网络连接起来,而后每一台服务器都不停的将自己依然在线的信息很简短很小的通告给同一个网络中的备用服务器的主机,告诉其实主机自己依然在线,其它服务器收到这个心跳信息就认为本机是在线的。所谓心跳就是一群人在深夜行走,相互看不见对方,每个人隔一段时间呼唤一声,告诉同伴自己的状况.

  2. 心跳信息怎么传递
    其实就是进程中的通信两台主机是没法通信的,只能利用网络功能,通过进程监听在某一套接字上,实现数据发送,数据请求,所以多台服务器就得运行同等的进程,这两个进程不停的进行通信,主节点(主服务器)不停的向对方同等的节点发送自己的心跳信息,那这个软件就叫高可用的集群的基准层次,也叫心跳信息传递层以及事物信息的传递层,这是运行在集群中的各节点上的进程,这个进程是个服务软件,关机后需要将其启动起来,主机间才可以传递信息的,一般是主节点传给备节点。

资源

什么是资源

其实资源就是启动一个服务需要的子项目
以web服务为例子,ip是资源,web服务是资源,共享存储是资源,网页,图片,session是资源.
如果主节点挂了,多个备节点怎么样来选择一个备节点来做为提供服务的一个节点呢,而这种应该选择哪个备用节点来做为提供服务的机制就叫做 集群事物决策 的过程。
因此,实现一个高可用集群一般需要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(正无穷大)。例如:有三个节点rs1、rs2、rs3当rs1是主节点且发生故障时,则比较rs2和rs3的score值,谁是正值,则资源将会转移到哪个节点上去。
  2. 排列约束(colocation):用来定义资源是否可以在一起,通常也是使用一个score来定义的。当score是正值表示资源可以在一起;否则表示不可以在一起。通过定义资源类型为group也可以来将所有资源绑定在一起。
  3. 顺序约束(order):用来定义资源启动和停止的顺序。web为例子,备用节点上线后,VIP必须先转移到本地,其次共享存储到位,最后才是开启web服务器.

资源转移

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

HA实现原理

  1. 在高可用集群的各节点中定义了一个抽象层,信息传递层(Messaing Layer),用来传递集群之间的事务(Transaction)信息.事务信息中包含了节点的心跳信息(是否在线),节点的主机名、IP等一系列信息
  2. 通过一个程序获取信息传递层的信息,进行服务调配,资源管理.(资源管理层)
  3. 服务代理,通过策略代理各节点服务。(资源代理层)
    信息层传递信息,资源管理层通过监听信息层的信息进行相应规则的资源调配和服务迁移。

Messaging Layer(信息传递层)

  • 主要的作用是传递当前节点的心跳信息,并告知给对方,这样对方就知道其他节点是否在线。如果不在线,则可以实现资源转移,这样另一台节点就可以充当主节点,并正常提供服务。传递心跳信息一般使用一根心跳线连接,该线接口可以使用串行接口也可以是以太网接口来连接。每一个节点上都包含信息层。
    常见软件:
    1. hearbeat
    2. keepalived
    3. ultramonkey
    4. Corosync
    5. cman

ha-aware/CRM (资源管理层)

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

CIB

  • 集群信息库 XML文档
    集群资源管理器必须借助于Messageing Layer通告给每一个节点,自动的广播或组播给每一个节点,这样就保证了每一个节点上的信息都是一样的,而这些数据在计算机中又怎么样来交互数据的呢,这里就要基于扩展标记语言来实现数据的格式传递的,这种叫半结构化数据基于XML的,所以在各节点之间实现配置信息保存都是通过XML文件保存的,而要能够理解这个XML文件保存的信息使用到一个工具叫CIB(Cluster Information Base集群信息库);只要能连接到CRM上都可以去配置这个XML文件,首先它会先保存到DC的XML中,然后再由DC同步支每个节点上的XML文件中去的;
    对于CIB,只有工作在DC(主节点)上的文档是可以修改的,其他CIB都是复制DC上的那个文档而来的。

LRM

  • Local Resource Messager,叫做本地资源管理器,它是CRM的一个子组件,用来获取某个资源的状态,并且管理本地资源的。
    对于LRM,是执行CRM传递过来的在本地执行某个资源的执行和停止的具体执行人,当某个节点发生故障之后,是由DC通过PE(策略引擎)和TE(实施引擎)来决定是否抢夺资源。

DC

  • 事务调节员.当DC所在的主机挂了就会先选出一个DC,再由DC做出事物的决策。
    任何DC上会额外运行两个进程,一个叫PE(Policy Engine策略引擎),所谓策略引擎就是将底层信息层收集整个集群中所有节点上的信息在本地生成一个大图big pic来策略节点运行在哪个节点上,并通知其实节点上的资源管理器来实现资源的启动和关闭等操作;一个叫TE(Transition Engine 实施引擎),它主要是把PE做出的决策通告给对应节点的CRM;

PE和TE是DC的子组件

PE(策略引擎)

来定义资源转移的一整套转移方式,但只是做策略者,并不亲自来参加资源转移的过程,而是让TE来执行自己的策略。

TE (实施引擎)

执行PE做出的策略的并且只有DC上才运行PE和TE。

实施软件

  • 可以提供CRM的软件有:
    • heartbeat v1自带的资源管理为haresource
    • heartbeat v2自带的资源管理有haresource和crm
    • Pacemaker
    • Cman 是红帽开发的一个资源管理器,是红帽开发的一个资源管理器,6.x版本后红帽也开始使用强大的pacemaker

资源代理层(Resource Agents)

集群资源代理(能够管理本节点上的属于集群资源的某一资源的启动,停止和状态信息的脚本)

LSB

常见的如/etc/init.d/下的标准linux脚本风格。

OCF

比LSB更高级

Legacy heartbeat

heartbeat自带的