默認openstack使用rabbitmq作信息隊列,若是想是雲高可用,那麼須要對每一個涉及的組件都進行高可用配置,本文主要介紹如何使用rabbitmq作高可用。node
高可用的方法爲:centos
經過 Erlang 的分佈式特性(經過 magic cookie 認證節點)進行 RabbitMQ 集羣,各 RabbitMQ 服務爲對等節點,即每一個節點都提供服務給客戶端鏈接,進行消息發送與接收。 這些節點經過 RabbitMQ HA 隊列(鏡像隊列)進行消息隊列結構複製。本方案中搭建 3 個節點,而且都是磁盤節點(全部節點狀態保持一致,節點徹底對等),只要有任何一個節點可以工做,RabbitMQ 集羣對外就能提供服務。
環境爲:
bash
系統centos 7.1cookie
rabbitmq版本是3.6.2app
主機信息分佈式
node1 10.10.33.163 node2 10.10.33.166 node3 10.10.33.167
/etc/hosts配置爲
ide
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
下面是開始安裝設計
1、安裝server
安裝第三方庫與rabbitmqrabbitmq
yum install -y epel-release yum install rabbitmq-server
啓動服務
systemctl enable rabbitmq-server.service systemctl start rabbitmq-server.service
2、配置
在node1裏配置
將node1的/var/lib/rabbitmq/.erlang.cookie複製到node2與node3
修改權限(全部節點)
chmod 400 /var/lib/rabbitmq/.erlang.cookie chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
在node2裏配置
[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裏配置
[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' ...
查看集羣狀態
[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',[]}]}]
3、集羣高可用配置
設計鏡像隊列策略
在任何一個節點執行
[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" ...