rabbitmq 在 docker 下的集群設(shè)置

  • 本文實現(xiàn)在一個docker宿主機的環(huán)境下設(shè)置 rabbitmq 集群

RabbitMQ是基于高級消息隊列協(xié)議(AMQP)實現(xiàn)的開源消息代理軟件,主要提供消息隊列服務(wù)。

首先 pull rabbitmq 的docker鏡像

docker pull rabbitmq:management

首先我們要是設(shè)置docker 的網(wǎng)絡(luò)環(huán)境, 以便于容器之間進行通訊, 這里我們使用 docker network 來進行網(wǎng)絡(luò)設(shè)置,
現(xiàn)在創(chuàng)建一個網(wǎng)絡(luò)名為my_net且driver為bridge的網(wǎng)絡(luò):(默認創(chuàng)建的就是bridge)

docker network create my_net
docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
da6f92e9cb4f        bridge              bridge              local
1ce44ae321b6        host                host                local
f67c52c15141        my_net              bridge              local
7f8fe50b3756        none                null                local

網(wǎng)絡(luò)環(huán)境設(shè)置好之后,就開始準備創(chuàng)建容器了, 在創(chuàng)建之前有幾點需要注意的地方

  1. 如果要做集群的話 一定要注意erlang 的 cookie的一致性, 使用 rabbitmq鏡像里面RABBITMQ_ERLANG_COOKIE 這個來進行設(shè)置 (重要)
  2. 設(shè)置每個rabbitmq 的節(jié)點名稱 使用 RABBITMQ_NODENAME 來設(shè)置

所以我們的docker 容器的生成就是這樣的:
在同一個RabbitMQ集群中,節(jié)點之間并沒有主從之分,所有節(jié)點會同步相同的隊列結(jié)構(gòu)

某種意義上的主機

docker run -d --name=rabbitmq_master -e RABBITMQ_ERLANG_COOKIE=myerlangcookie -e RABBITMQ_NODENAME=mqmaster -p 5672:5672 -p 4369:4369 -p 25672 :25672 -p 15672:15672 --network my_net --network-alias network_mqmaster rabbitmq:management

某種意義上的從機 (留了端口的)

docker run -d --name=rabbitmq_slave1 -e RABBITMQ_ERLANG_COOKIE=myerlangcookie -e RABBITMQ_NODENAME=mqslave1 -p 5673:5672 -p 4370:7369 -p 25673 :25672 -p 15673:15672 --network my_net --network-alias network_mqslave1 rabbitmq:management

某種意義上的從機 (沒有留端口的)

docker run -d --name=rabbitmq_slave2 -e RABBITMQ_ERLANG_COOKIE=myerlangcookie -e RABBITMQ_NODENAME=mqslave2 --network my_net --network-alias network_mqslave2 rabbitmq:management

進入到rabbitmq_master當中 使用 rabbitmqctl cluster_status 查看集群狀態(tài)

docker exec -it rabbitmq_master bash

cd sbin
rabbitmqctl cluster_status

Cluster status of node mqmaster@28c2418baba1 ...
[{nodes,[{disc,[mqmaster@28c2418baba1]}]},
 {running_nodes,[mqmaster@28c2418baba1]},
 {cluster_name,<<"mqmaster@28c2418baba1">>},
 {partitions,[]},
 {alarms,[{mqmaster@28c2418baba1,[]}]}]

看到 nodes 里面 只有當前我們的這個節(jié)點并沒有其他的節(jié)點
現(xiàn)在我們進入到rabbitmq_slave1中配置加入到集群當中,

docker exec -it rabbitmq_slave1 bash
cd sbin
# 再添加集群之前首先要 關(guān)閉當前的節(jié)點
rabbitmqctl stop_app
# 開始添加到 集群當中, @前面是 節(jié)點名稱, 后面是 host, host 可以在 查看集群狀態(tài)的時候獲得
#--ram選項表示節(jié)點以內(nèi)存存儲方式運行,讀寫速度快,重啟后內(nèi)容會丟失;不加--ram選項,節(jié)點則以磁盤存儲方式運行,
 雖然讀寫速度慢,但是內(nèi)容一般可以持久保持

rabbitmqctl join_cluster --ram mqmaster@28c2418baba1

Clustering node mqslave1@0a038c6ae449 with mqmaster@28c2418baba1

#重新開啟節(jié)點
rabbitmqctl start_app

重新回到 rabbitmq_master容器里面查看集群狀態(tài)

root@28c2418baba1:/sbin# rabbitmqctl cluster_status
Cluster status of node mqmaster@28c2418baba1 ...
[{nodes,[{disc,[mqmaster@28c2418baba1]},
         {ram,[mqslave2@ddb963c55357,mqslave1@0a038c6ae449]}]},
 {running_nodes,[mqslave2@ddb963c55357,mqslave1@0a038c6ae449,
                 mqmaster@28c2418baba1]},
 {cluster_name,<<"mqmaster@28c2418baba1">>},
 {partitions,[]},
 {alarms,[{mqslave2@ddb963c55357,[]},
          {mqslave1@0a038c6ae449,[]},
          {mqmaster@28c2418baba1,[]}]}]

說明集群正常, 創(chuàng)建隊列, 發(fā)送數(shù)據(jù)測試

root@28c2418baba1:/sbin# rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
hello   2

每個節(jié)點里面數(shù)據(jù)正常,
一些運維操作
停止某個指定的節(jié)點,比如停止第2個節(jié)點:
./sbin/rabbitmqctl -n rabbitmq_slave1 stop
查看節(jié)點3的集群狀態(tài):

./sbin/rabbitmqctl -n rabbitmq_slave2 cluster_status

附一張截圖


QQ截圖20181024171009.png

參考:
docker network https://www.cnblogs.com/jsonhc/p/7823286.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 整體架構(gòu) 部署步驟 基于 Docker 基本概念內(nèi)存節(jié)點只保存狀態(tài)到內(nèi)存,例外情況是:持久的 queue 的內(nèi)容將...
    mvictor閱讀 12,915評論 5 30
  • 什么叫消息隊列? 消息(Message)是指在應(yīng)用間傳送的數(shù)據(jù)。消息可以非常簡單,比如只包含文本字符串,也可以更復(fù)...
    Agile_dev閱讀 2,444評論 0 24
  • 你不知道的RabbitMQ集群架構(gòu)全解 前言 本文將系統(tǒng)的介紹一下RabbitMQ集群架構(gòu)的特點、異常處理、搭建和...
    Java中文社群_老王閱讀 4,025評論 1 50
  • 關(guān)于消息隊列,從前年開始斷斷續(xù)續(xù)看了些資料,想寫很久了,但一直沒騰出空,近來分別碰到幾個朋友聊這塊的技術(shù)選型,是時...
    中v中閱讀 2,041評論 0 20
  • 士為知已報君仇, 不惜吞炭毀真容。 飛身對袍三怒劍, 血濺石橋感千秋!
    醫(yī)心小作閱讀 339評論 0 2

友情鏈接更多精彩內(nèi)容