《OpenStack高可用集群(下册):部署与运维》—11.4.5 RabbitMQ消息队列高可用部署

举报
华章计算机 发表于 2019/05/29 21:40:55 2019/05/29
【摘要】 本书摘自《OpenStack高可用集群(下册):部署与运维》一书中的第11章,第11.4.5节,作者是山金孝。

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。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。