docker搭建rabbitmq集羣

一、簡介

最近項目中又開始使用rabbitmq了,此處簡單記錄一下如何使用docker來搭建一個rabbitmq集羣

二、需求

在一個雲服務器上,使用docker搭建2個節點的集羣,此處搭建基於鏡像模式集羣,而不是一般集羣模式。

節點 主機名 容器名 數據卷 用戶名 密碼 management port amqp port 磁盤類型
節點一 node1 rabbitmq01 rabbitmq-01 rabbitmq rabbitmq 15672:15672 5672:5672 disc
節點二 node2 abbitmq02 rabbitmq-02 rabbitmq rabbitmq 15673:15672 5673:5672 ram

其中: 節點2加入節點1,構成集羣

三、集羣注意事項

1、節點(nodes)的名稱定義

在 rabbitmq 集羣中,節點的名稱一般是有前綴主機名這2部分組成,在一個集羣中,節點的名稱不可重複,必須是唯一的。
eg:

rabbit@node1
	|-   rabbit ===> 前綴
	|-   node1 ===> 主機名

2、集羣中,節點的主機名必須要能互相都能訪問

3、rabbitmq集羣是基於erlang的,而erlang集羣是通過magic cookie來通訊的,在 rabbitmq 中,需要保證 .erlang.cookie 的文件裏面的值必須是一致的,且該文件的權限是600。該cookie文件的生成應該是在集羣部署階段。

4、端口訪問

1、15672:一般是訪問控制檯或http api 的端口

2、5672, 5671: used by AMQP 0-9-1 and 1.0 clients without and with TLS

5、集羣節點類型

在集羣中存在2中類型的節點,磁盤(disc)節點和內存(ram)節點。

1、磁盤節點所有的數據都是存在磁盤上

2、內存節點的數據是存在內存中,但不是所有的數據都是存在內存中的,比如:消息只會存在索引等。

3、在一個集羣中至少需要一個磁盤(disc)節點

6、新的節點加入已經存在的集羣時,節點必須要reset

7、使用docker建rabbitmq集羣注意事項

  1. 容器中的數據是保存在 /var/lib/rabbitmq 目錄中,因此爲了容器中的數據不丟失,需要自建創建數據掛在目錄,或數據卷(volume)。
  2. --hostname 指定docker容器的主機名
  3. RABBITMQ_DEFAULT_USER 指定rabbitmq用戶名
  4. RABBITMQ_DEFAULT_PASS 指定rabbitmq密碼
  5. RABBITMQ_ERLANG_COOKIE 指定cookie的值,集羣中該值必須要一致

四、使用docker構建集羣步驟

1、創建數據卷

docker volume create rabbitmq-01
docker volume create rabbitmq-02

2、啓動2個rabbitmq容器

1、節點一啓動命令

docker run -d --hostname node1 --name rabbitmq-01 -p 15672:15672 \
 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=rabbitmq -e \
 RABBITMQ_DEFAULT_PASS=rabbitmq -e RABBITMQ_ERLANG_COOKIE='aabbccddeeffgg' \
 -v rabbitmq-01:/var/lib/rabbitmq rabbitmq:3.8.0-management

2、節點二啓動命令

docker run -d --hostname node2 --name rabbitmq-02 -p 15673:15672 \
-p 5673:5672 -e RABBITMQ_DEFAULT_USER=rabbitmq \
-e RABBITMQ_DEFAULT_PASS=rabbitmq \
-e RABBITMQ_ERLANG_COOKIE='aabbccddeeffgg' --link rabbitmq-01:node-1 \
-v rabbitmq-02:/var/lib/rabbitmq rabbitmq:3.8.0-management

3、將 node2 加入到 node1 集羣中

1、node1 下執行如下命令

docker exec -it rabbitmq-01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

2、node2 下執行如下命令

ocker exec -it rabbitmq-02 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@node1
rabbitmqctl start_app

4、配置鏡像隊列

在任何一個節點上執行如下命令:
rabbitmqctl set_prolich ha-all "^" '{"ha-mode":"all"}'
表示在默認的vhout(/)上隊列/交換機/綁定等數據都是同步的。

5、鏡像隊列配置規則參考

https://www.rabbitmq.com/ha.html

到此我們的集羣搭建完畢。

發佈了104 篇原創文章 · 獲贊 22 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章