Docker之部署RabbitMQ集群并實現(xiàn)Haproxy代理,你學會了嗎掉冶?

前言

本小節(jié)我們學習一下使用Docker部署RabbitMQ集群真竖。

RabbitMQ Docker Hub

目錄參考

[root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# pwd

/workspace/rabbitmq

[root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# tree

.

├── config

│ └── docker-compose.yml

├── data

│ ├── rabbitmq1

│ ├── rabbitmq2

│ └── rabbitmq3

└── haproxy-etc

└── haproxy.cfg

拉取rabbitmq鏡像

docker pull rabbitmq:3.8-rc-management

若不使用Rabbitmq的management功能,可以拉取鏡像:rabbitmq:3.8-rc

創(chuàng)建Rabbitmq共享網(wǎng)絡

docker network create rabbitmqnet

[root@iZ2ze8sm5upgi8z1dcazqeZ data]# docker network ls

NETWORK ID NAME DRIVER SCOPE

203f098f2ed7 bridge bridge local

901ab7f16e18 config_default bridge local

e5878362fd0d data_default bridge local

e16693f5cfb7 example_default bridge local

54da0f7e3311 host host local

6ad755fc1934 none null local

a4b8c1129340 rabbitmqnet bridge local

[root@iZ2ze8sm5upgi8z1dcazqeZ data]#

創(chuàng)建節(jié)點(三個節(jié)點)

注意這里使用相同的 RABBITMQ_ERLANG_COOKIE 值

```

#RabibitMQ Node1

docker run -d \

--name=rabbitmq1 \

-p 5672:5672 \

-p 15672:15672 \

-v /workspace/rabbitmq/data/rabbitmq1:/var/lib/rabbitmq:z \

-e RABBITMQ_DEFAULT_USER=Dustyone \

-e RABBITMQ_DEFAULT_PASS=bai5331359 \

-e RABBITMQ_NODENAME=rabbitmq1 \

-e RABBITMQ_ERLANG_COOKIE='Dustyone-Murex-cluster-cookie' \

-h rabbitmq1 \

--net=rabbitmqnet \

rabbitmq:3.8-rc-management

#RabibitMQ Node2

docker run -d \

--name=rabbitmq2 \

-p 5673:5672 \

-p 15673:15672 \

-v /workspace/rabbitmq/data/rabbitmq2:/var/lib/rabbitmq:z \

-e RABBITMQ_DEFAULT_USER=Dustyone \

-e RABBITMQ_DEFAULT_PASS=bai5331359 \

-e RABBITMQ_NODENAME=rabbitmq2 \

-e RABBITMQ_ERLANG_COOKIE='Dustyone-Murex-cluster-cookie' \

-h rabbitmq2 \

--net=rabbitmqnet \

rabbitmq:3.8-rc-management

#RabibitMQ Node3

docker run -d \

--name=rabbitmq3 \

-p 5674:5672 \

-p 15674:15672 \

-v /workspace/rabbitmq/data/rabbitmq3:/var/lib/rabbitmq:z \

-e RABBITMQ_DEFAULT_USER=Dustyone \

-e RABBITMQ_DEFAULT_PASS=bai5331359 \

-e RABBITMQ_NODENAME=rabbitmq3 \

-e RABBITMQ_ERLANG_COOKIE='Dustyone-Murex-cluster-cookie' \

-h rabbitmq3 \

--net=rabbitmqnet \

rabbitmq:3.8-rc-management

```

[root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

d15e8aecfa21 rabbitmq:3.8-rc-management "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5674->5672/tcp, 0.0.0.0:15674->15672/tcp rabbitmq3

ac5f2897f6de rabbitmq:3.8-rc-management "docker-entrypoint.s…" 9 seconds ago Up 8 seconds 4369/tcp, 5671/tcp, 15671/tcp, /tcp, 0.0.0.0:5673->5672/tcp, 0.0.0.0:15673->15672/tcp rabbitmq225672

5f7e538553cd rabbitmq:3.8-rc-management "docker-entrypoint.s…" 16 seconds ago Up 15 seconds 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbitmq1

組建rabbitmq集群

登陸Rabbitmq的后兩個節(jié)點厌小,執(zhí)行命令加入第一個Rabbitmq節(jié)點集群

### Disk Node

# docker exec rabbitmq2 bash -c \

"rabbitmqctl stop_app && \

rabbitmqctl reset && \

rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \

rabbitmqctl start_app"

### Ram Node

# docker exec rabbitmq3 bash -c \

"rabbitmqctl stop_app && \

rabbitmqctl reset && \

rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \

rabbitmqctl start_app"

登錄:http://你的公網(wǎng)IP:15672 恢共,使用

rabbitmq1-Dustyone/bai5331359登錄,登錄其他節(jié)點,訪問相應的端口并使用相應的用戶名/密碼登錄即可


退出集群

# docker exec rabbitmq3 bash -c \

"rabbitmqctl stop_app && \

rabbitmqctl reset && \

rabbitmqctl start_app"

拉取haproxy鏡像

docker pull haproxy

創(chuàng)建目錄

/workspace/rabbitmq/haproxy-etc,并在該路徑下創(chuàng)建haprox.cfg配置文件

[root@iZ2ze8sm5upgi8z1dcazqeZ haproxy-etc]# pwd

/workspace/rabbitmq/haproxy-etc

[root@iZ2ze8sm5upgi8z1dcazqeZ haproxy-etc]# tree

.

└── haproxy.cfg

0 directories, 1 file

[root@iZ2ze8sm5upgi8z1dcazqeZ haproxy-etc]#

haproxy.cfg配置信息如下:

#Simple configuration for an HTTP proxy listening on port 80 on all

# interfaces and forwarding requests to a single backend "servers" with a

# single server "server1" listening on 127.0.0.1:8000

global

daemon

maxconn 256

defaults

mode http

timeout connect 5000ms

timeout client 5000ms

timeout server 5000ms

listen rabbitmq_cluster

bind 0.0.0.0:5677

option tcplog

mode tcp

balance leastconn

server rabbit1 rabbitmq1:5672 check inter 2s rise 2 fall 3

server rabbit2 rabbitmq2:5672 check inter 2s rise 2 fall 3

server rabbit3 rabbitmq3:5672 check inter 2s rise 2 fall 3

listen http_front

bind 0.0.0.0:8002

stats uri /haproxy?stats

listen rabbitmq_admin

bind 0.0.0.0:8001

server rabbit1 rabbitmq1:15672

server rabbit2 rabbitmq2:15672

server rabbit3 rabbitmq3:15672

拉取haproxy鏡像

docker pull haproxy

啟動haproxy

docker run -d \

--name rabbitmq-haproxy \

-p 8002:8002 -p 5677:5677 -p 8001:8001 \

--net=rabbitmqnet \

-v /workspace/rabbitmq/haproxy-etc:/usr/local/etc/haproxy:ro \

haproxy:latest

啟動haproxy后璧亚,可以通過haproxy來訪問rabbitmq集群:http://你的公網(wǎng)IP:8001

獲取haproxy的狀態(tài):http://你的公網(wǎng)IP:8002/haproxy?stats

Docker 之 部署RabbitMQ集群并實現(xiàn)Haproxy代理

前言

本小節(jié)學習一下使用Docker-compose部署Rabbitmq集群讨韭。

目錄參考

[root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# pwd

/workspace/rabbitmq

[root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]# tree

.

├── config

│ └── docker-compose.yml

├── data

├── haproxy-etc

│ └── haproxy.cfg

├── rabbitmq1

├── rabbitmq2

└── rabbitmq3

6 directories, 2 files

[root@iZ2ze8sm5upgi8z1dcazqeZ rabbitmq]#

創(chuàng)建RabbitMQ集群共享網(wǎng)絡

docker network create rabbitmqnet

docker-compose.yml

version: '3.7'

services:

rabbitmq1:

image: rabbitmq:3.8-rc-management

container_name: rabbitmq1

restart: always

ports:

- 5672:5672

- 15672:15672

volumes:

- /workspace/rabbitmq/data/rabbitmq1:/var/lib/rabbitmq:z

environment:

RABBITMQ_DEFAULT_USER: 'Dustyone'

RABBITMQ_DEFAULT_PASS: 'bai5331359'

RABBITMQ_NODENAME: 'rabbitmq1'

RABBITMQ_ERLANG_COOKIE: 'Dustyone-Murex-cluster-cookie'

hostname: rabbitmq1

rabbitmq2:

image: rabbitmq:3.8-rc-management

container_name: rabbitmq2

restart: always

ports:

- 5673:5672

- 15673:15672

volumes:

- /workspace/rabbitmq/data/rabbitmq2:/var/lib/rabbitmq:z

environment:

RABBITMQ_DEFAULT_USER: 'Dustyone'

RABBITMQ_DEFAULT_PASS: 'bai5331359'

RABBITMQ_NODENAME: 'rabbitmq2'

RABBITMQ_ERLANG_COOKIE: 'Dustyone-Murex-cluster-cookie'

hostname: rabbitmq2

links:

- rabbitmq1

rabbitmq3:

image: rabbitmq:3.8-rc-management

container_name: rabbitmq3

restart: always

ports:

- 5674:5672

- 15674:15672

volumes:

- /workspace/rabbitmq/data/rabbitmq3:/var/lib/rabbitmq:z

environment:

RABBITMQ_DEFAULT_USER: 'Dustyone'

RABBITMQ_DEFAULT_PASS: 'bai5331359'

RABBITMQ_NODENAME: 'rabbitmq3'

RABBITMQ_ERLANG_COOKIE: 'Dustyone-Murex-cluster-cookie'

hostname: rabbitmq3

links:

- rabbitmq1

- rabbitmq2

rabbitmq-haproxy:

image: haproxy

container_name: rabbitmq-haproxy

restart: always

ports:

- 8002:8002

- 5677:5677

- 8001:8001

volumes:

- /workspace/rabbitmq/haproxy-etc:/usr/local/etc/haproxy:ro

links:

- rabbitmq1

- rabbitmq2

- rabbitmq3

networks:

default:

external:

name: rabbitmqnet

執(zhí)行docker-compose.yml

docker-compose up -d

[root@iZ2ze8sm5upgi8z1dcazqeZ config]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

cec0d4ee030d haproxy "/docker-entrypoint.…" 14 seconds ago Up 12 seconds 0.0.0.0:5677->5677/tcp, 0.0.0.0:8001-8002->8001-8002/tcp rabbitmq-haproxy

0d2d75c99c6a rabbitmq:3.8-rc-management "docker-entrypoint.s…" 14 seconds ago Up 13 seconds 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5674->5672/tcp, 0.0.0.0:15674->15672/tcp rabbitmq3

4e89fa1f2eba rabbitmq:3.8-rc-management "docker-entrypoint.s…" 15 seconds ago Up 14 seconds 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp, 0.0.0.0:15673->15672/tcp rabbitmq2

af6dfb7ca16c rabbitmq:3.8-rc-management "docker-entrypoint.s…" 15 seconds ago Up 15 seconds 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbitmq1

將rabbitmq2和rabbitmq3兩個節(jié)點加入rabbitmq1節(jié)點以形成集群。

### Disk Node

docker exec rabbitmq2 bash -c \

"rabbitmqctl stop_app && \

rabbitmqctl reset && \

rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \

rabbitmqctl start_app"

### Ram Node

# docker exec rabbitmq3 bash -c \

"rabbitmqctl stop_app && \

rabbitmqctl reset && \

rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \

rabbitmqctl start_app"

[root@iZ2ze8sm5upgi8z1dcazqeZ config]# docker exec rabbitmq2 bash -c \

> "rabbitmqctl stop_app && \

> rabbitmqctl reset && \

> rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \

> rabbitmqctl start_app"

Stopping rabbit application on node rabbitmq2@rabbitmq2 ...

Resetting node rabbitmq2@rabbitmq2 ...

Clustering node rabbitmq2@rabbitmq2 with rabbitmq1@rabbitmq1

Starting node rabbitmq2@rabbitmq2 ...

completed with 3 plugins.

[root@iZ2ze8sm5upgi8z1dcazqeZ config]# docker exec rabbitmq3 bash -c \

> "rabbitmqctl stop_app && \

> rabbitmqctl reset && \

> rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \

> rabbitmqctl start_app"

Stopping rabbit application on node rabbitmq3@rabbitmq3 ...

Resetting node rabbitmq3@rabbitmq3 ...

Clustering node rabbitmq3@rabbitmq3 with rabbitmq1@rabbitmq1

Starting node rabbitmq3@rabbitmq3 ...

completed with 3 plugins.

[root@iZ2ze8sm5upgi8z1dcazqeZ config]#

訪問http://你的公網(wǎng)IP:8002

如此便完成了使用docker-compose部署Rabbitmq集群

啟動停止Rabbitmq-Cluster建議使用如下Command

docker-compose up -d

docker-compose stop

此類方法部署RabbitMQ集群有很多細節(jié)癣蟋,便不一一說明了透硝,挑幾個重用的說一下

所有的節(jié)點最好共享一個網(wǎng)絡塊

執(zhí)行docker-compose.yml之前要創(chuàng)建好所有的配置文件

安全組規(guī)則

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疯搅,隨后出現(xiàn)的幾起案子濒生,更是在濱河造成了極大的恐慌,老刑警劉巖幔欧,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罪治,死亡現(xiàn)場離奇詭異,居然都是意外死亡礁蔗,警方通過查閱死者的電腦和手機觉义,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘦麸,“玉大人谁撼,你說我怎么就攤上這事∽趟牵” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵喊巍,是天一觀的道長屠缭。 經(jīng)常有香客問我,道長崭参,這世上最難降的妖魔是什么呵曹? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上奄喂,老公的妹妹穿的比我還像新娘铐殃。我一直安慰自己,他們只是感情好跨新,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布富腊。 她就那樣靜靜地躺著,像睡著了一般域帐。 火紅的嫁衣襯著肌膚如雪赘被。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天肖揣,我揣著相機與錄音民假,去河邊找鬼。 笑死龙优,一個胖子當著我的面吹牛羊异,可吹牛的內容都是我干的。 我是一名探鬼主播彤断,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼野舶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓦糟?” 一聲冷哼從身側響起筒愚,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菩浙,沒想到半個月后巢掺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡劲蜻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年陆淀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片先嬉。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡轧苫,死狀恐怖,靈堂內的尸體忽然破棺而出疫蔓,到底是詐尸還是另有隱情含懊,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布衅胀,位于F島的核電站岔乔,受9級特大地震影響,放射性物質發(fā)生泄漏滚躯。R本人自食惡果不足惜雏门,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一嘿歌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茁影,春花似錦宙帝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝇更,卻和暖如春沪编,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背年扩。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工蚁廓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厨幻。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓相嵌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親况脆。 傳聞我的和親對象是個殘疾皇子饭宾,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內容