前文讲了OpenStack虚拟机高可用,使用最多的高可用监控工具是Pacemaker和Corosync,但Pacemaker集群中允许的计算节点数目上限为16个,即使对于一般规模的OpenStack私有云集群环境,这一限制不现实的,因此Redhat提出解决节点受限问题的方法: Pacemaker_remote。
Pacemaker集群对计算节点的瓶颈是集群通信机制Corosync。在基本的Pacemaker高可用集群中,每个集群节点都运行Corosync全集群栈(Full cluster stack)和Pacemaker全组件,这种方式虽然为集群带来了灵活性,但集群节点可扩展性限制在16个节点之内。为了允许集群扩展更多节点,Pacemaker允许未运行全集群栈的节点集成到集群中,并允许Pacemaker像管理正常节点一样管理这些节点上的资源,这样的节点通常称为Remote节点或者部分Pacemaker节点,因为它们不运行Corosync进程,而只运行Pacemaker_remote进程。
在有Pacemaker_remote进程的Pacemaker集群中,节点划分为三种类型:集群节点,Remote节点和Guest节点。其中,集群节点是运行全部Pacemaker组件和Corosync集群栈的节点,集群节点可以运行集群资源、运行Pacemaker集群命令行工具(crm_mon、crm_resource等)、执行Fencing操作、统计集群Quorum和作为集群DC(Designated Controller)节点。Remote节点是运行Pacemaker_remote进程的物理主机(Pacemaker_remote是在Pacemaker集群中部分管理节点上允许未运行全栈集群软件节点的服务进程),运行Pacemaker_remote进程的节点可以运行集群资源和大部分命令行工具,但是不具备全栈集群节点的其他功能:执行Fencing操作、Quorum投票和DC功能等。Pacemaker_remote进程是Pacemaker本地资源管理进程(LRMD,Local Resource Management Daemon)的增强版本。运行Pacemaker_remote的虚拟机称为Guest节点。Pacemaker集群允许虚拟机节点存在,即虚拟机节点资源通过Pacemaker集群资源管理器进行管理。Guest节点与Remote节点的主要区别在于Guest节点本身就是Pacemaker所管理的资源。对于OpenStack虚机高可用部署,主要用到的是集群节点和Remote节点。在OpenStack高可用环境中,Remote节点通常是计算节点,而Pacemaker的策略引擎(Policy Engine,PE)能够自动处理对Remote节点的Fencing操作,用户所要确定的是Remote节点具有Fencing设备。
要使计算节点成为Remote节点,只需在计算节点上安装Pacemaker_remote软件包并启动Pacemaker_remote服务,之后将其加入Pacemaker集群即可(基于修复的Bug考虑,如果使用Pacemaker_remote,建议安装的Pacemaker为1.12或更高的版本)。
安装完成之后,创建一个存放Pacemaker集群共享授权Key的本地目录:
# mkdir -p --mode=0750 /etc/pacemaker
# chgrp haclient /etc/pacemaker
在Pacemaker集群中,所有节点(包括集群节点和Remote节点)必须共享同一个授权Key。如果集群节点已经存在授权Key,只需将其拷贝到Remote节点,如果还没有授权Key,则通过如下命令创建授权Key:# dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1
在Remote节点上启动Pacemaker_remote服务并设置其为开机自启动:
# systemctl enable pacemaker_remote.service
# systemctl start pacemaker_remote.service
Pacemaker_remote启动完成之后,验证是否可以远程连接到Remote节点的3121端口。通过SSH即可连接测试,如果执行SSH连接在断开前有如下输出说明连接正常:
//假设Remote节点主机名为remote1
# ssh -p 3121 remote1
ssh_exchange_identification: read: Connection reset by peer
Remote节点配置启动完成后,便可将其加入Pacemaker集群(假设Pacemaker集群已经存在)。Remote节点加入Pacemaker集群的过程等同于创建远程连接资源(Remote Connection Resource)。定义远程连接资源的操作需要在Pacemaker集群节点上进行(定义远程连接资源本质上属于Pacemaker的crmd组件),Pacemaker_remote安装包并没有提供ocf:pacemaker:remote资源代理,而是提供了一个可以使用哪些选项的元数据文件/usr/lib/ocf/resource.d/pacemaker/remote。在Pacemaker任一集群节点上执行如下命令,便可分别将多个计算节点(Remote节点)加入Pacemaker集群,在集群中看到集群节点和Remote节点命令: pcs status。
//以for循环形式将全部计算节点加入Pacemaker集群
for node in $(echo $compute_node|cut -d " " -f -$nodes_num)
do
pcs resource create $node ocf:pacemaker:remote\
reconnect_interval=60 op monitor interval=20
done
一旦Remote节点加入Pacemaker集群,则Remote节点上的资源就可以像正常集群节点一样被Pacemaker管理,包括Remote节点资源的创建、启动和停止等。//创建资源并将neutron-openvswitch资源限制在计算节点上运行以及在neutron-api后启动的约束
# pcs resource create neutron-openvswitch-agent-compute systemd:neutron-openvswitch-agent --clone interleave=true --disabled --force
# pcs constraint location neutron-openvswitch-agent-compute-clone rule resource-discovery=exclusive score=0 osprole eq compute
# pcs constraint order start neutron-server-api-clone then neutron-openvswitch-agent-compute-clone require-all=false
通过Pacemaker和Pacemaker_remote,计算节点服务运行状况被Pacemaker监控管理。为了实现对计算节点的远程Fencing和虚拟机的Evacuate功能,还需创建Fencing和Evacuate相关的资源。在Redhat的RDO方案中,Fencing和Evacuate资源创建如下:
pcs resource create nova-evacuate ocf:openstack:NovaEvacuate auth_url=http://$vip_keystone:35357 username=admin password=admin tenant_name=admin
pcs stonith create fence-nova fence_compute auth-url= http://$vip_keystone:35357 login=admin passwd=admin tenant-name=admin record-only=1 action=off --force
为了正常使用ocf:openstack:NovaEvacuate和fence_compute资源代理,用户需要安装满足如下条件的软件包:
❑fence-agents-4.0.11-13.e17_1.1或更高版本。
❑resource-agents-3.9.5-40.e17_1.5.x86_64或更高版本。
❑pacemaker-1.1.12-22.e17_1.4.x86_64或更高版本。
Pacemaker和Pacemaker_remote的引入,解决了一套openstack中所能管理的计算节点个数的瓶颈,计算节点的增多,可以部署到虚拟机更多了,这个方案是openstack+Corosync计算节点高可用的增强版,也是虚机高可用的增强版。
笔记整理来自山金孝的《OpenStack高可用集群(上册):原理与架构》8.8.3章节,如有侵权请通知删除