【docker系列】阿里雲ECS上搭建 Docker 跨主機 rabbitmq集羣環境

三臺服務器如下:
100.100.0.1
100.100.0.2
100.100.0.3

先創建 overlay 跨主機通信網絡:
【docker系列】Docker Swarm 集羣,跨主機網絡通信環境搭建

這裏,先假設創建的 overlay網絡爲 :

cluster-overlay-software    子網段爲:18.0.0.0/24

1、創建簡單rabbitmq容器,用於拷貝 容器內的文件到宿主機,然後刪除容器

[root@slave2 server]# docker run -dit  -p 15672:5672  -p 25672:15672  rabbitmq:latest
ab31f1a92e1cff2614a7005ffd5b32c2d7b17b72679ae2c8745a125771aa0b27
[root@slave2 server]# docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                                                                                                 NAMES
ab31f1a92e1c        rabbitmq:latest                 "docker-entrypoint.s…"   5 seconds ago       Up 4 seconds        4369/tcp, 5671/tcp, 25672/tcp, 0.0.0.0:15672->5672/tcp, 0.0.0.0:25672->15672/tcp                                      inspiring_fermat
[root@slave2 server]# docker cp ab31f1a92e1c:/opt/rabbitmq/plugins /usr/docker/software/rabbitmq/
[root@slave2 server]# docker stop ab31f1a92e1c
ab31f1a92e1c
[root@slave2 server]# docker rm ab31f1a92e1c

2、3臺服務器,都是按這個步驟,先獲取插件包

3、選擇一臺做主服務器【主節點】

[root@master plugins]# docker run -dit \
> -m 8192M --memory-swap -1 \
> --net cluster-overlay-software \
> --ip 18.0.0.240 \
> --privileged=true \
> --name=keda-master-rabbitmq \
> --hostname=master_rabbitmq \
> -p 15672:5672 \
> -p 25672:15672 \
> -v /usr/docker/software/rabbitmq/data/:/var/lib/rabbitmq \
> -v /usr/docker/software/rabbitmq/plugins/:/opt/rabbitmq/plugins \
> -v /etc/localtime:/etc/localtime \
> -e TZ='Asia/Shanghai' \
> -e LANG="en_US.UTF-8" \
> -e RABBITMQ_ERLANG_COOKIE='keda_rabbitmq_cookie_123' \
> rabbitmq:latest
b4d08cc90e6d5a38156bae4f8a2c5e9e88da4a13262f467c5274b1b7a5b0b7ce
[root@master plugins]# docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED              STATUS              PORTS                                                                                                                 NAMES
b4d08cc90e6d        rabbitmq:latest                 "docker-entrypoint.s…"   About a minute ago   Up About a minute   4369/tcp, 5671/tcp, 25672/tcp, 0.0.0.0:15672->5672/tcp, 0.0.0.0:25672->15672/tcp                                      keda-master-rabbitmq

說明:
-e RABBITMQ_ERLANG_COOKIE='keda_rabbitmq_cookie_123'  
rabbitmq的集羣,必須保證所有節點的 RABBITMQ_ERLANG_COOKIE 都是一樣的。

4、從服務器 slave1【從節點1】

docker run -dit \
-m 8192M --memory-swap -1 \
--net cluster-overlay-software \
--ip 18.0.0.239 \
--privileged=true \
--name=keda-slave1-rabbitmq \
--hostname=slave1_rabbitmq \
-p 15672:5672 \
-p 25672:15672 \
-v /usr/docker/software/rabbitmq/data/:/var/lib/rabbitmq \
-v /usr/docker/software/rabbitmq/plugins/:/opt/rabbitmq/plugins \
-v /etc/localtime:/etc/localtime \
-e TZ='Asia/Shanghai' \
-e LANG="en_US.UTF-8" \
-e RABBITMQ_ERLANG_COOKIE='keda_rabbitmq_cookie_123' \
--link keda-master-rabbitmq:master_rabbitmq \
rabbitmq:latest

說明:

-e RABBITMQ_ERLANG_COOKIE='keda_rabbitmq_cookie_123'   
和主節點的必須一樣
--link keda-master-rabbitmq:master_rabbitmq       
 軟鏈到 主節點上,因爲在同一個網絡中,所以能通過 hostname識別

5、從服務器 slave2【從節點2】

docker run -dit \
-m 8192M --memory-swap -1 \
--net cluster-overlay-software \
--ip 18.0.0.238 \
--privileged=true \
--name=keda-slave2-rabbitmq \
--hostname=slave2_rabbitmq \
-p 15672:5672 \
-p 25672:15672 \
-v /usr/docker/software/rabbitmq/data/:/var/lib/rabbitmq \
-v /usr/docker/software/rabbitmq/plugins/:/opt/rabbitmq/plugins \
-v /etc/localtime:/etc/localtime \
-e TZ='Asia/Shanghai' \
-e LANG="en_US.UTF-8" \
-e RABBITMQ_ERLANG_COOKIE='keda_rabbitmq_cookie_123' \
--link keda-master-rabbitmq:master_rabbitmq \
--link keda-slave1-rabbitmq:slave1_rabbitmq \
rabbitmq:latest

說明:

-e RABBITMQ_ERLANG_COOKIE='keda_rabbitmq_cookie_123'   
和主節點的必須一樣
--link keda-master-rabbitmq:master_rabbitmq         
軟鏈到 主節點上,因爲在同一個網絡中,所以能通過 hostname識別
--link keda-slave1-rabbitmq:slave1_rabbitmq         
軟鏈到 從節點1

以上,只是配置了,3臺獨立的 rabbitmq服務器,之間還無法連接!!!

6、讓所有rabbitmq 節點,都加入到集羣中
     master:設置主節點

docker exec -it keda-master-rabbitmq bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
啓動rabbitMq管理模塊,
rabbitmq-plugins enable rabbitmq_management
exit

    slave1:

docker exec -it keda-slave1-rabbitmq bash
rabbitmqctl stop_app
rabbitmqctl reset
#加入 主節點
rabbitmqctl join_cluster rabbit@master_rabbitmq
啓動rabbitMq管理模塊,
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl start_app
exit

####rabbitmqctl join_cluster --ram rabbit@master_rabbitmq 以內存形式加入節點

 可能會報連接不到 4369端口,如下 

  解決方法:
 不要退出容器!!! 

  /etc/hosts 中把各個主機節點的hostname 加上,如下

 

  slave2:

docker exec -it keda-slave2-rabbitmq bash
rabbitmqctl stop_app
rabbitmqctl reset
#加入主節點
rabbitmqctl join_cluster rabbit@master_rabbitmq
啓動rabbitMq管理模塊,
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl start_app
exit

####rabbitmqctl join_cluster --ram rabbit@master_rabbitmq 以內存形式加入節點

說明:
參數“--ram”表示設置爲內存節點,忽略次參數默認爲磁盤節點。
注意:
若搭建的集羣需要用到延時隊列,則加入集羣的節點類型需要爲磁盤節點,不能以內存節點的形式加入集羣,否則無法啓動節點。

6、重啓 3個服務器上的 rabbitmq 集羣。打開瀏覽器:

至此,集羣環境,搭建完畢!!!

注意:rabbitmq,默認使用的內存大小,爲容器內存大小的40%。 可以通過配置 rabbitmq.conf 文件,來修改該值
loopback_users.guest = false
# 總的內存大小==容器內存大小 單位 b
total_memory_available_override_value = 8589934592
#rabiitmq最高使用的內存大小。這裏配置是跟容器大小一樣
vm_memory_high_watermark.absolute = 8589934592
#監聽連接數
listeners.tcp.default = 5672

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章