本文共 2511 字,大约阅读时间需要 8 分钟。
默认openstack使用rabbitmq做信息队列,如果想是云高可用,那么需要对每个涉及的组件都进行高可用配置,本文主要介绍如何使用rabbitmq做高可用。
高可用的方法为:
1 2 | 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。 这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建 3 个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务。 |
环境为:
系统centos 7.1
rabbitmq版本是3.6.2
主机信息
1 2 3 | node1 10.10.33.163 node2 10.10.33.166 node3 10.10.33.167 |
/etc/hosts配置为
1 2 3 | 10.10.33.163 ip-10-10-33-163 10.10.33.166 ip-10-10-33-166 10.10.33.167 ip-10-10-33-167 |
下面是开始安装
一、安装
安装第三方库与rabbitmq
1 2 | yum install -y epel-release yum install rabbitmq-server |
启动服务
1 2 | systemctl enable rabbitmq-server.service systemctl start rabbitmq-server.service |
二、配置
在node1里配置
1 | 将node1的 /var/lib/rabbitmq/ .erlang.cookie复制到node2与node3 |
修改权限(所有节点)
1 2 | chmod 400 /var/lib/rabbitmq/ .erlang.cookie chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/ .erlang.cookie |
在node2里配置
1 2 3 4 5 6 7 | [root@ip-10-10-33-166 my.cnf.d] # rabbitmqctl stop_app Stopping node 'rabbit@ip-10-10-33-166' ... [root@ip-10-10-33-166 my.cnf.d] # rabbitmqctl join_cluster rabbit@ip-10-10-33-163 Clustering node 'rabbit@ip-10-10-33-166' with 'rabbit@ip-10-10-33-163' ... You have new mail in /var/spool/mail/root [root@ip-10-10-33-166 my.cnf.d] # rabbitmqctl start_app Starting node 'rabbit@ip-10-10-33-166' ... |
在node3里配置
1 2 3 4 5 6 | [root@ip-10-10-33-167 my.cnf.d] # rabbitmqctl stop_app Stopping node 'rabbit@ip-10-10-33-167' ... [root@ip-10-10-33-167 my.cnf.d] # rabbitmqctl join_cluster rabbit@ip-10-10-33-163 Clustering node 'rabbit@ip-10-10-33-167' with 'rabbit@ip-10-10-33-163' ... [root@ip-10-10-33-167 my.cnf.d] # rabbitmqctl start_app Starting node 'rabbit@ip-10-10-33-167' ... |
查看集群状态
1 2 3 4 5 6 7 8 9 10 11 | [root@ip-10-10-33-166 my.cnf.d] # rabbitmqctl cluster_status Cluster status of node 'rabbit@ip-10-10-33-166' ... [{nodes,[{disc,[ 'rabbit@ip-10-10-33-163' , 'rabbit@ip-10-10-33-166' , 'rabbit@ip-10-10-33-167' ]}]}, {running_nodes,[ 'rabbit@ip-10-10-33-163' , 'rabbit@ip-10-10-33-167' , 'rabbit@ip-10-10-33-166' ]}, {cluster_name,<< "rabbit@ip-10-10-33-163" >>}, {partitions,[]}, {alarms,[{ 'rabbit@ip-10-10-33-163' ,[]}, { 'rabbit@ip-10-10-33-167' ,[]}, { 'rabbit@ip-10-10-33-166' ,[]}]}] |
三、集群高可用配置
设计镜像队列策略
在任何一个节点执行
1 2 | [root@ip-10-10-33-163 ~] # rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}' Setting policy "ha-all" for pattern "^(?!amq\\.).*" to "{\"ha-mode\": \"all\"}" with priority "0" ... |