預設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" ...