《OpenStack高可用集群(下册):部署与运维》—11.4.5 RabbitMQ消息队列高可用部署
11.4.5 RabbitMQ消息队列高可用部署
消息队列是OpenStack高可用集群各个服务组件之间彼此通信的基础,消息队列中存储了组件之间进行远程过程调用(RPC)的数据信息,因此消息队列系统的高可用是OpenStack集群能够提供高可用服务的核心基础。在OpenStack社区,消息队列系统可以由RabbitMQ或ZeroMQ等开源软件实现,而RabbitMQ是使用最多的高级消息队列系统,关于RabbitMQ更详细的工作原理和使用配置方法请参考第5章,本节主要介绍RabbitMQ在Pacemaker集群中的高可用配置。在Pacemaker中创建RabbitMQ资源时,资源代理RA的选择可以有两种方案:其一为使用Clusterlabs网站提供的OCF脚本rabbitmq-cluster,RedHat的OpenStack高可用方案所采用的RabbitMQ资源控制脚本就是此OCF脚本;其二为RabbitMQ官方网站提供的资源代理OCF脚本rabbitmq-server-ha,要使用rabbitmq-server-ha资源代理脚本,至少需要安装rabbitmq-server3.6以上版本。本节OpenStack高可用集群采用的RabbitMQ资源代理OCF脚本为官方推荐的rabbitmq-server-ha,安装的RabbitMQ软件包版本为rabbitmq-server-3.6.0-1。此外,RabbitMQ集群由三个控制节点构成,消息的高可用通过队列在三个节点之间进行镜像来实现。RabbitMQ资源在Pacemaker集群中的配置过程如下。
在全部控制节点上安装RabbitMQ-Server-3.6软件包:
yum install -y rabbitmq-server
将每个控制节点的管理IP地址设置为RabbitMQ绑定的本地监听IP地址,设置命令参考如下:
echo "NODE_IP_ADDRESS=${bind_ip}" > /etc/rabbitmq/rabbitmq-env.conf
这里的变量${bind_ip}表示控制节点的管理IP地址,如对于controller1-vm,则bind_ip变量值为192.168.142.110。安装rabbitmq-server-3.6.0-1软件包后,在RabbitMQ的OCF脚本目录/usr/lib/ocf/resource.d/rabbitmq中会生成一个名为set_rabbitmq_policy.sh.example的参考脚本,该脚本内容主要用以配置RabbitMQ集群策略,其内容如下:
# This script is called by rabbitmq-server-ha.ocf during RabbitMQ
# cluster start up. It is a convenient place to set your cluster
# policy here, for example:
# ${OCF_RESKEY_ctl} set_policy ha-all "." '{"ha-mode":"all",\
"ha-sync-mode":"automatic"}' --apply-to all --priority 0
可以看到,set_rabbitmq_policy.sh.example脚本的目的便是配置RabbitMQ集群的高可用策略,即队列镜像模式。该脚本由RabbitMQ-Server提供的rabbitmq-server-ha资源代理脚本自动调用,无须用户干预。为了进一步初始化符合OpenStack集群使用的RabbitMQ集群环境,这里将该参考脚本进行适当的自定义更改,使其在设置RabbitMQ集群策略的同时添加OpenStack客户端用户并设置用户权限。更改后的set_rabbitmq_policy.sh内容如下:
# This script is called by rabbitmq-server-ha.ocf during RabbitMQ
# cluster start up. It is a convenient place to set your cluster
# policy here, for example:
# ${OCF_RESKEY_ctl} set_policy ha-all "." '{"ha-mode":"all",\
"ha-sync-mode":"automatic"}' --apply-to all --priority 0
${OCF_RESKEY_ctl} set_policy ha-all "." '{"ha-mode":"all", \
"ha-sync-mode":"automatic"}' --apply-to all --priority 0
${OCF_RESKEY_ctl} add_user openstack openstack
${OCF_RESKEY_ctl} set_permissions openstack ".*" ".*" ".*"
更改set_rabbitmq_policy.sh脚本的执行权限:
chmod 755 /usr/lib/ocf/resource.d/rabbitmq/set_rabbitmq_policy.sh
现在即可在Pacemaker集群中创建RabbitMQ资源。根据RabbitMQ官方文档,使用的资源代理RA为ocf:rabbitmq:rabbitmq-server-ha,RabbitMQ资源以Master/Slave形式运行。资源创建过程如下:
pcs resource create rabbitmq-cluster ocf:rabbitmq:rabbitmq-server-ha\
--master erlang_cookie=DPMDALGUKEOMPTHWPYKC node_port=5672 \
op monitor interval=30 timeout=120 \
op monitor interval=27 role=Master timeout=120 \
op monitor interval=103 role=Slave timeout=120 OCF_CHECK_LEVEL=30 \
op start interval=0 timeout=120 \
op stop interval=0 timeout=120 \
op promote interval=0 timeout=60 \
op demote interval=0 timeout=60 \
op notify interval=0 timeout=60 \
meta notify=true ordered=false interleave=false master-max=1 \
master-node-max=1
资源创建完成之后,检查Pacemaker集群中RabbitMQ多状态资源的运行情况,正常情况下,对于三节点的RabbitMQ集群,应该存在一个Master节点和两个Slave节点。Pacemaker集群资源信息如下:
[root@controller1-vm ~]# pcs resource
……
Master/Slave Set: galera-master [galera]
Masters: [ controller1-vm controller2-vm controller3-vm ]
Clone Set: memcached-clone [memcached]
Started: [ controller1-vm controller2-vm controller3-vm ]
Master/Slave Set: rabbitmq-cluster-master [rabbitmq-cluster]
Masters: [ controller2-vm ]
Slaves: [ controller1-vm controller3-vm ]
从Pacemaker集群的资源状态信息来看,RabbitMQ集群Master节点为controller2-vm,更详细的集群信息可以通过rabbitmqctl命令来查看,具体如下:
[root@controller1-vm ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@controller1-vm' ...
[{nodes,[{disc,['rabbit@controller1-vm','rabbit@controller2-vm',
'rabbit@controller3-vm']}]},
{running_nodes,['rabbit@controller3-vm','rabbit@controller2-vm',
'rabbit@controller1-vm']},
{cluster_name,<<"rabbit@controller2-vm">>},
{partitions,[]}]
前文曾提及rabbitmq-server-ha资源代理会自动调用与其位于相同目录的集群策略设置脚本set_rabbitmq_policy.sh。该脚本功能被自定义为设置RabbitMQ队列镜像、添加RabbitMQ用户OpenStack和设置该用户使用权限。RabbitMQ集群策略是否已经如预期设置,可以通过如下命令来验证:
//查看集群队列镜像策略
[root@controller1-vm ~]# rabbitmqctl list_policies
Listing policies ...
/ ha-all all . {"ha-mode":"all","ha-sync-mode":"automatic"} 0
//查看集群用户
[root@controller1-vm ~]# rabbitmqctl list_users
Listing users ...
openstack []
guest [administrator]
//查看集群用户权限
[root@controller1-vm ~]# rabbitmqctl list_permissions
Listing permissions in vhost "/" ...
openstack .* .* .*
guest .* .* .*
可以看到,Pacemaker管理下的RabbitMQ集群已经正常运行,同时RabbitMQ集群已经按预期进行了初始化,后续OpenStack相关组件可以直接使用RabbitMQ所提供的高可用消息队列服务。本节介绍的RabbitMQ高可用部署源代码可参考笔者位于Github上的开源项目(https://github.com/ynwssjx/Openstack-HA-Deployment),对应的部署脚本为5_create_rabbitmq_resource_on_pacemaker.sh。
- 点赞
- 收藏
- 关注作者
评论(0)