从Pacemaker看高可用性的层次和思路
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
命令行将Cluster IP加入CIB
DC将CIB的修改同步到所有的crmd
DC上的PE计算如何部署这个Cluster IP,在哪个node上,做什么操作
DC将操作列表同步到所有的crmd
每个crmd调用本地的lrmd做真正的部署
lrmd调用resource agent来启动或者停止一些操作
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"
相关文章