docker 啟動rabbitmq
rabbitmq官方推薦的啟動方式是通過docker進行啟動。因為不用安裝Erlang語音等環境
rabbitmq官網:https://www.rabbitmq.com/download.html
啟動命令
單節點啟動
docker run -it --rm -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
這是官方的例子
多節點啟動
普通集群
#節點一,主節點,創建-v映射目錄
docker run -d --hostname rabbit_host1 --name rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie' --privileged=true -v /usr/local/rabbitmq/1/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/1/log:/var/log/rabbitmq rabbitmq:management
#節點二,創建-v映射目錄
docker run -d --hostname rabbit_host2 --name rabbitmq2 -p 15673:15672 -p 5673:5672 --link rabbitmq1:rabbit_host1 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie' --privileged=true -v /usr/local/rabbitmq/2/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/2/log:/var/log/rabbitmq rabbitmq:management
#節點三,創建-v映射目錄
docker run -d --hostname rabbit_host3 --name rabbitmq3 -p 15674:15672 -p 5674:5672 --link rabbitmq1:rabbit_host1 --link rabbitmq2:rabbit_host2 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie' --privileged=true -v /usr/local/rabbitmq/3/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/3/log:/var/log/rabbitmq rabbitmq:management
參數說明:
--hostname 自定義Docker容器的 hostname
--link 容器之間連接,link不可或缺,使得三個容器能互相通信
--privileged=true 使用該參數,container內的root擁有真正的root權限,否則容器出現permission denied
-v 宿主機和容器路徑映射
參數 RABBITMQ_NODENAME,缺省 Unix*: rabbit@$HOSTNAME
參數 RABBITMQ_DEFAULT_USER=admin
參數 RABBITMQ_DEFAULT_PASS=xdclass.net168
Erlang Cookie 值必須相同,也就是一個集群內 RABBITMQ_ERLANG_COOKIE 參數的值必須相同, 相當於不同節點之間通訊的密鑰,erlang.cookie是erlang的分布式token文件,集群內各個節點的erlang.cookie需要相同,才可以互相通信
上面是啟動了三個節點,就是三個rabbitmq,但仍沒有形成集群。
配置普通集群
節點一配置集群
docker exec -it rabbitmq1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
節點二加入集群,--ram是以內存方式加入,忽略該參數默認為磁盤節點。
docker exec -it rabbitmq2 bash
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbit_host1
rabbitmqctl start_app
exit
節點三加入集群,--ram是以內存方式加入,忽略該參數默認為磁盤節點。
docker exec -it rabbitmq3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit_host1
rabbitmqctl start_app
exit
#查看集群節點狀態,配置啟動了3個節點,1個磁盤節點和2個內存節點
rabbitmqctl cluster_status
上述步驟完成后就配置好普通集群了。
集群分為兩類:普通集群和鏡像集群。
相同點:都擁有各個節點的元數據信息。
不同點:鏡像集群會復制各個節點的交換機、隊列和信息。而普通集群僅僅擁有交換機和隊列,信息不會進行復制,即擁有信息的節點一旦宕機,集群內部就無法消費該信息。
配置鏡像集群
去到rabbitmq控制台,一般是:ip地址:15672

Admin->Policies

參數說明:
ha-mode:同步節點模式
- all:全部
- exactly:設置同步節點數
- nodes:設置特定同步節點,用配置ha-params說明
ha-sync-mode:同步模式
- manual:手動
- automatic:自動
一般如同所示設置即可
完成后,就完成rabbitmq多節點的部署了。
