pacemaker+corosync/heartbeat 软件架构
& {' U7 [; K, S1、Pacemaker - 集群资源管理器(CRM),负责启动和停止服务,而且保证它们是一直运行着的以及某个时刻某服务只在一个节点上运行(避免多服务同时操作数据造成的混乱),利用集群基础构建提供的信息和成员管理能力,探测并恢复节点以及在其控制下的资源的失效切换,以实现高可用性。 2、Corosync - 消息层组件,管理成员关系、消息和仲裁。 3、Resource Agents - 资源代理,用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。任何资源代理都要使用同一种风格,接收四个参数:{start|stop|restart|status},包括配置IP地址的也是。 corosync和heartbeat对比 / {" ?2 p. i- w o! j: L3 A
(1)共同点:
* Y+ L# Z$ R+ A8 }: a 都属于消息网络层,对外提供服务和主机的心跳检测,在监控的主服务被发现当机之后,即时切换到从属的备份节点,保证系统的可用性.9 A+ s9 a. |/ \6 b& Z
(2)不同点:% b" N- _4 Y. T/ w' _" B' [
Heartbeat从2010年之后,就不再继续维护,而Corosync则仍然处于活跃期
, [( u" t: J3 M, B6 z- 配置复杂度:
6 w! _4 h a+ v8 M" E. m$ i Heartbeat非常容易进行配置,第一次配置可能只需要几分钟,而Corosync由于有一定的复杂度则需要一点耐心' N E4 s) |- x1 G3 W; x
- 管理资源的灵活性:
6 G% `; U: u& m& i# y1 }$ ~ Heartbeat只能为所有的资源配置一个主服务,而corosync则允许为不同的资源组配置不同的主服务。4 W7 T4 ?2 D2 p e/ r0 t
- Resource stickiness:8 s- H3 A! r, k% j5 n- P8 O
Heartbeat在主服务server1当机之后,切换到从服务节点server2;还会把之前的主节点server1继续放入从属节点列表之内。而corosync则不会存在这个情况。
* _8 O2 {# u) B) p- 配置文件的版本管理:% j- W7 K1 u( h+ O# n5 e
在corosync中,其会自行处理配置文件的同步问题,heartbeat则无此功能。, u s+ W1 t+ ]: Q. D$ C$ U
- 分组管理; I, {. ]: ~) Q3 |# O1 Y
Heartbeat只支持2个节点,而corosync则支持多个节点的集群,支持把资源进行分组,按照组进行资源的管理,设置主服务,自行进行启停
% J/ q6 l8 V8 j/ W9 U7 }" a 故此可见,一般来说都是选择corosync来进行心跳的检测,搭配pacemaker的资源管理系统来构建高可用的系统。+ g4 Y# ?: G3 X
% l% X( R( S7 D' h% y
Corosync
4 U' O- r4 m5 u$ `
* }2 e6 W1 m/ E+ y- u% [6 x1 C* T# P1 e
) a- D$ j7 C0 p) | 
2 s0 G7 ]- @* e! x/ i关于心跳的基本概念:
@% U7 O9 j& h4 {9 t- 心跳:就是将多台服务器用网络连接起来,而后每一台服务器都不停的将自己依然在线的信息使用很简短很小的通告给同一个网络中的其它主机,告诉它们自己依然在线,其它服务器收到这个心跳信息就认为它是在线的,尤其是主服务器。
- 心跳信息怎么发送,由谁来收,其实就是进程间通信。两台主机是没法通信的,只能利用网络功能,通过进程监听在某一套接字上,实现数据发送,数据请求,所以多台服务器就得运行同等的进程,这两个进程不停的进行通信,主节点(主服务器)不停的向对方同等的节点发送自己的心跳信息,那这个软件就叫高可用的集群的基准层次,也叫心跳信息传递层以及事物信息的传递层,这是运行在集群中的各节点上的进程,这个进程是个服务软件,关机后需要将其启动起来,主机间才可以传递信息的,一般是主节点传给备节点
$ v" D, I& V& i
资源代理(Resource Agent - RA) 一个 RA 是管理一个集群资源的可执行程序,没有固定其实现的编程语言,但是大部分RA都是用 shell 脚本实现的,Pacemaker 使用 RA 来和受管理资源进行交互,Pacemaker 支持三种类型的 RA: LSB Resource Agents、OCF Resource Agents、Legacy Heartbeat Resource Agents。 主流的 RA 都是 OCF 类型的。RA 支持的主要操作包括: start、stop、monitor、meta-data、status (CIB 是个分布式的XML 文件,有用户添加配置 Pacemaker 和 Corosync 根据 CIB 控制 LRMD 的行为 LRMD 通过调用 RA 的接口控制各资源的行为)
1 C7 k/ U# Y8 d1 d |