1. 程式人生 > >【Linux】【Services】【IaaS】OpenStack-Pike(3.搭建高可用消息隊列)

【Linux】【Services】【IaaS】OpenStack-Pike(3.搭建高可用消息隊列)

mission 服務 guide lan nsis edit 錯誤 all scp

1. 簡介

1.1. 官方網站: https://www.rabbitmq.com/

2. 安裝與配置:

詳見:https://docs.openstack.org/ha-guide/shared-messaging.html#rabbitmq-configure

2.1. 安裝:在每個節點上都做

直接使用yum安裝,openstack的yum源中會提供安裝包

yum install rabbitmq-server

啟動服務(確認cookie文件已經生成)

[root@hctjoscontroller01 ~]# systemctl start rabbitmq-server
[root@hctjoscontroller01 ~]# ll /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 rabbitmq rabbitmq 20 Dec  6 00:00 /var/lib/rabbitmq/.erlang.cookie
[root@hctjoscontroller01 ~]# 

創建用戶

#前面的openstack是用戶名,後面的openstack是密碼
rabbitmqctl add_user openstack openstack
Creating user "openstack" ...

賦權限

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

Setting permissions for user "openstack" in vhost "/" ...

停止rabbitMQ

systemctl stop rabbitmq-server

2.2. 配置

在節點01上,把cookie文件scp到另外兩個節點上

scp /var/lib/rabbitmq/.erlang.cookie root@hctjoscontroller02:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@hctjoscontroller03:/var/lib/rabbitmq/.erlang.cookie

在節點02/03上分別修改權限

# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
# chmod 400 /var/lib/rabbitmq/.erlang.cookie

在節點01上啟動服務並查看集群狀態

技術分享圖片
[root@hctjoscontroller01 ~]# systemctl start rabbitmq-server.service
[root@hctjoscontroller01 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@hctjoscontroller01 ...
[{nodes,[{disc,[rabbit@hctjoscontroller01]}]},
 {running_nodes,[rabbit@hctjoscontroller01]},
 {cluster_name,<<"[email protected]">>},
 {partitions,[]},
 {alarms,[{rabbit@hctjoscontroller01,[]}]}]
技術分享圖片

在節點02和03上啟動服務,停止本機服務,加入01的集群(成功加入以後,再啟動服務就不用執行stop_app了)

技術分享圖片
[root@hctjoscontroller02 ~]# systemctl start rabbitmq-server

[root@hctjoscontroller02 ~]# rabbitmqctl stop_app
Stopping node rabbit@hctjoscontroller02 ...

[root@hctjoscontroller02 ~]# rabbitmqctl join_cluster --ram rabbit@hctjoscontroller01
Clustering node rabbit@hctjoscontroller02 with rabbit@hctjoscontroller01 ...
技術分享圖片 技術分享圖片
[root@hctjoscontroller03 ~]# systemctl stop rabbitmq-server
[root@hctjoscontroller03 ~]# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
[root@hctjoscontroller03 ~]# chmod 400 /var/lib/rabbitmq/.erlang.cookie
[root@hctjoscontroller03 ~]# systemctl start rabbitmq-server
[root@hctjoscontroller03 ~]# rabbitmqctl stop_app
Stopping node rabbit@hctjoscontroller03 ...
[root@hctjoscontroller03 ~]# rabbitmqctl join_cluster --ram rabbit@hctjoscontroller01
Clustering node rabbit@hctjoscontroller03 with rabbit@hctjoscontroller01 ...
技術分享圖片

在01節點上查看狀態

技術分享圖片
[root@hctjoscontroller01 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@hctjoscontroller01 ...
[{nodes,[{disc,[rabbit@hctjoscontroller01]},
         {ram,[rabbit@hctjoscontroller03,rabbit@hctjoscontroller02]}]},
 {running_nodes,[rabbit@hctjoscontroller02,rabbit@hctjoscontroller03,
                 rabbit@hctjoscontroller01]},
 {cluster_name,<<"[email protected]">>},
 {partitions,[]},
 {alarms,[{rabbit@hctjoscontroller02,[]},
          {rabbit@hctjoscontroller03,[]},
          {rabbit@hctjoscontroller01,[]}]}]
技術分享圖片

一定要保證能看見三個節點,我在配置過程中出現了下面的錯誤,多重啟幾遍就好了,以後再碰到再研究吧

[root@hctjoscontroller02 ~]# rabbitmqctl join_cluster --ram rabbit@hctjoscontroller01
Clustering node rabbit@hctjoscontroller02 with rabbit@hctjoscontroller01 ...
Error: {inconsistent_cluster,"Node rabbit@hctjoscontroller01 thinks it‘s clustered with node rabbit@hctjoscontroller02, but rabbit@hctjoscontroller02 disagrees"}

配置一下ha的模式,我沒太明白官方文檔中的意思,不過看起來是說這樣配置的話可以實現HA模式,消息可以鏡像到其他的節點

技術分享圖片

rabbitmqctl set_policy ha-all ‘^(?!amq\.).*‘ ‘{"ha-mode": "all"}‘

【Linux】【Services】【IaaS】OpenStack-Pike(3.搭建高可用消息隊列)