Docker搭建RabbitMQ集群
Docker搭建RabbitMQ集群
Docker安裝
見官網
RabbitMQ鏡像下載及配置
見此博文
集群搭建
首先,我們需要啟動運行RabbitMQ
docker run -d --hostname my-rabbit -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 -p 25672:25672 -p 4369:4369 -v $PWD/rabbitmq-data:/var/rabbitmq/lib --name my_rabbitmq rabbitmq:latest
參數說明:
? -d:後臺進程運行
? --hostname:主機名稱
? -p:端口映射
? 15672:http訪問端口
? 5672:AMQP訪問端口
? -v:文件映射
? --name:容器名稱
啟動多個RabbitMQ
docker run -d --hostname my-rabbit -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 -p 25672:25672 -p 4369:4369 -v $PWD/rabbitmq-data:/var/rabbitmq/lib --name my_rabbitmq1 rabbitmq:latest
docker run -d --hostname my-rabbit -p 5673:5672 -p 15673:15672 -v $PWD/rabbitmq-data:/var/rabbitmq/lib --name my_rabbitmq2 rabbitmq:latest
這樣我們就可以使用http://ip:15672 和 http://ip:15673 進行訪問,默認賬號密碼均為guest.
搭建RabbitMQ集群
步驟一:安裝RabbitMQ;
docker run -d --hostname my-rabbit1 --name my_rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie‘ rabbitmq:latest
參數說明:
? -e:設置環境變量
docker run -d --hostname my-rabbit2 --name my_rabbitmq2 -p 5673:5672 --link my_rabbitmq1:my-rabbit1 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie‘ rabbitmq:latest
docker run -d --hostname my-rabbit3 --name my_rabbitmq3 -p 5674:5672 --link my_rabbitmq1:my-rabbit1 --link my_rabbitmq2:my-rabbit2 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie‘ rabbitmq:latest
參數說明:
? --link:添加鏈接到另一個容器
***註意點:
? 多個容器之間使用"--link"連接,此屬性不能少;
? Erlang Cookie值必須相同,也就是RABBITMQ_ERLANG_COOKIE參數的值必須相同,原因見下文.
步驟二:加入RabbitMQ節點到集群;
設置節點1:
docker exec -it my_rabbitmq1 /bin/bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app exit
設置節點2:
docker exec -it my_rabbitmq2 /bin/bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@my-rabbit1 rabbitmqctl start_app exit
設置節點3:
docker exec -it my_rabbitmq3 /bin/bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@my-rabbit1 rabbitmqctl start_app exit
參數說明:
? --ram:表示設置為內存節點,忽略次參數默認為磁盤節點.
設置好之後,使用 http://ip:15672 進行訪問,默認賬號密碼是guest/guest.
配置相同Erlang Cookie
有些特殊的情況,比如已經運行一段時間的幾個單個物理機,我們在之前沒有設置過相同的Erlang Cookie值,現在我們要把單個的物理機部署成集群,實現我們需要同步Erlang的Cookie值.
1.為什麽要配置相同的Erlang Cookie?
因為RabbitMQ使用Erlang實現的,Erlang Cookie相當於不同節點之間相互通訊的秘鑰,Erlang節點通過交換Erlang Cookie獲得認證.
2.Erlang Cookie的位置
要想知道Erlang Cookie的位置,首先要取的RabbitMQ啟動日誌裏面的home dir路徑,作為根路徑.可使用:
docker logs 容器名稱
查看.
3.復制Erlang Cookie到其他RabbitMQ節點
獲取到第一個RabbitMQ的Erlang Cookie之後,只需要把這個文件復制到其他RabbitMQ節點即可.
物理機和容器之間復制命令如下:
? 容器復制文件到物理機:
docker cp 容器名稱:容器目錄 物理機目錄
? 物理機復制文件到容器:
docker cp 物理機目錄 容器名稱:容器目錄
設置Erlang Cookie文件權限:
chmod 600 /var/lib/rabbitmq/.erlang.cookie
註意事項
按照以上步驟搭建完成後,每個RabbitMQ服務器均需手動開啟rabbitmq_management插件,方可在瀏覽器中輸入http://localhost:15672進入RabbitMQ管理界面,在其中可看到相關節點的信息.
如何開啟插件
Docker搭建RabbitMQ集群