从Pacemaker看高可用性的层次和思路

2020-06-01 00:00:00 操作 都是 配置 状态 文件系统

Pacemaker是一个通过管理多台机器的资源来实现系统的高可用性框架。


虽然你不一定用Pacemaker,但是其中的一些层次和思路还是会经常能够见到的,例如虚拟机的高可用性,容器的高可用性,HDFS的NameNode的高可用性,都能看到这些思路的影子。


一、Pacemaker的架构



底层是通信层corosync/openais,负责cluster中node之间的通信。


上一层是Resource Allocation Layer,包含下面的组件:


  • CRM Cluster Resouce Manager:是总管,对于resource做的任何操作都是通过它。每个机器上都有一个CRM。

  • CIB Cluster Information Base:CIB由CRM管理,是在内存中的XML数据库,保存了cluster的配置和状态。我们查询出来的configuration都是保存在CIB里面的。nodes, resources, constraints, relationship.

  • DC Designated Coordinator:每个node都有CRM,会有一个被选为DC,是整个Cluster的大脑,这个DC控制的CIB是master CIB,其他的CIB都是副本。

  • PE Policy Engine:当DC需要进行一些全局配置的时候,首先由PE根据当前的状态和配置,计算出将来的状态,并生成一系列的action,使得cluster从初始状态变为结果状态。PE仅仅在DC上运行。

  • LRM Local Resource Manager:本地的resource管理,调用resource agent完成操作,启停resource,将结果返回给CRM


再上一层是Resource Layer:包含多个resource agent。resource agent往往是一些shell script,用来启动,停止,监控resource的状态。


接下来我们来查看pacemaker的进程状态。


root@pacemaker01:~# ps aux | grep pace
root      3363  0.0  0.1  81812  3748 ?        Ss   Jul28   0:06 /usr/lib/pacemaker/lrmd
haclust+  3365  0.0  1.1 114428 23808 ?        Ss   Jul28   0:03 /usr/lib/pacemaker/pengine
root     20103  0.0  0.2 107496  4532 pts/2    S    10:06   0:00 pacemakerd
haclust+ 20105  0.0  0.6 110244 12560 ?        Ss   10:06   0:00 /usr/lib/pacemaker/cib
root     20106  0.0  0.3 107248  6680 ?        Ss   10:06   0:00 /usr/lib/pacemaker/stonithd
haclust+ 20107  0.0  0.2  96640  4148 ?        Ss   10:06   0:00 /usr/lib/pacemaker/attrd
haclust+ 20108  0.0  0.4 166536  9172 ?        Ss   10:06   0:00 /usr/lib/pacemaker/crmd


二、Pacemaker如何管理资源从而实现高可用


通过上述架构我们可以指定,Pacemaker需要管理一种资源,通过对这种资源的保存,同步,脚本操作,从而达到高可用。


Pacemaker都管理什么资源呢,如何管理呢,有以下几种模式:


方式一是主备模式。


从图中可以看出高可用主要分四个层次:


Pacemaker管理这两个物理节点。


下面一层是块存储层,如果是DRBD,则采取的是块设备级别的同步,也即写入一个块的数据会同步到另外一台机器上的一个块。使用DRBD块设备,只能有一台机器是主,可以写入,另外一台是备,不能写入,否则会出现脑裂。


再上面一层是普通文件系统,而非集群文件系统,只有主上面的文件系统可以写入。


再上面一层是数据库层,多通过主备复制实现高可用。


再上面一层是应用层,如果是无状态,可以实现主备切换


上层是IP层,一般是VIP,则可以根据主备切换到不同的机器。


方式二:是N+1,其实原理和主备是一样的,但是为了提高效率,多个应用混合部署,我这台主,你备,另一台你主,我备。


方式三:是N-N,也即主主模式,主要依赖于集群文件系统OCFS2,而非普通的文件系统,这种文件系统的特点是多台机器都可以同时写。

再网上有数据库层,应用层,负载均衡层,IP层。


三、Pacemaker配置资源的过程


比如要添加一个Cluster IP


  1. 命令行将Cluster IP加入CIB

  2. DC将CIB的修改同步到所有的crmd

  3. DC上的PE计算如何部署这个Cluster IP,在哪个node上,做什么操作

  4. DC将操作列表同步到所有的crmd

  5. 每个crmd调用本地的lrmd做真正的部署

  6. lrmd调用resource agent来启动或者停止一些操作

  7. lrmd操作完,将结果返回给DC


四、Pacemaker在OpenStack中的应用


配置VIP


crm configure primitive vip ocf:heartbeat:IPaddr2 \
  params ip="10.0.0.11" cidr_netmask="24" op monitor interval="30s"


配置负载均衡器


$ crm cib new conf-haproxy
$ crm configure primitive haproxy lsb:haproxy op monitor interval="1s"
$ crm configure clone haproxy-clone haproxy
$ crm configure colocation vip-with-haproxy inf: vip haproxy-clone
$ crm configure order haproxy-after-vip mandatory: vip haproxy-clone


配置Keystone


# crm configure
clone p_keystone ocf:openstack:keystone \
params config="/etc/keystone/keystone.conf" os_password="secretsecret" \
os_username="admin" os_tenant_name="admin" \
os_auth_url="http://10.0.0.11:5000/v2.0/" \
op monitor interval="30s" timeout="30s"


相关文章