三台服务器如下:
100.100.0.1
100.100.0.2
100.100.0.3
这里,先假设创建的 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 集群。打开浏览器:
至此,集群环境,搭建完毕!!!