1. 程式人生 > >Docker搭建RabbitMQ集群

Docker搭建RabbitMQ集群

star href man des 情況 cookie值 說明 沒有 環境變量

Docker搭建RabbitMQ集群

Docker安裝

見官網


RabbitMQ鏡像下載及配置

見此博文


集群搭建

  1. 首先,我們需要啟動運行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:容器名稱

  2. 啟動多個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:15672http://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值.

    因為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集群