【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 以内存形式加入节点

  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 集群。打开浏览器:

至此,集群环境,搭建完毕!!!

发布了125 篇原创文章 · 获赞 43 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_42697074/article/details/104559089
今日推荐