預設openstack使用rabbitmq做資訊佇列,如果想是雲高可用,那麼需要對每個涉及的元件都進行高可用配置,本文主要介紹如何使用rabbitmq做高可用。
高可用的方法為:
通過 Erlang 的分散式特性(通過 magic cookie 認證節點)進行 RabbitMQ 叢集,各 RabbitMQ 服務為對等節點,即每個節點都提供服務給客戶端連線,進行訊息傳送與接收。 這些節點通過 RabbitMQ HA 佇列(映象佇列)進行訊息佇列結構複製。本方案中搭建 3 個節點,並且都是磁碟節點(所有節點狀態保持一致,節點完全對等),只要有任何一個節點能夠工作,RabbitMQ 叢集對外就能提供服務。
環境為:
系統centos 7.1
rabbitmq版本是3.6.2
主機資訊
node1 10.10.33.163 node2 10.10.33.166 node3 10.10.33.167
/etc/hosts配置為
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
yum install -y epel-release yum install rabbitmq-server
啟動服務
systemctl enable rabbitmq-server.service systemctl start rabbitmq-server.service
二、配置
在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`,[]}]}]
三、叢集高可用配置
設計映象佇列策略
在任何一個節點執行
[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" ...