rabbitmq镜像集群依赖于普通集群,所以需要先搭建rabbitmq普通集群。
- 环境
操作系统:ubuntu18.04
docker版本:1.13.1
- 搭建rabbitmq普通集群
docker拉取带management tag的最新版rabbitmq
docker pull rabbitmq:3.8.7-management
启动三个同样cookie的rabbitmq实例(同样的cookie才能加入集群)
docker run -d --hostname rabbit_1 --name myrabbit_1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.8.7-management
docker run -d --hostname rabbit_2 --name myrabbit_2 -p 15673:15672 -p 5673:5672 --link myrabbit_1:rabbit_1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.8.7-management
docker run -d --hostname rabbit_3 --name myrabbit_3 -p 15674:15672 -p 5674:5672 --link myrabbit_1:rabbit_1 --link myrabbit_2:rabbit_2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.8.7-management
这里注意使用--link将容器实例之前网络联系起来
-d 后台运行容器;
–name 指定容器名;
-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
-v 映射目录或文件;
–hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
上面命令可选加以下参数设置登录用户和密码
-e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456789
-e 指定环境变量(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)
- 设置第二和第三个实例,使他们加入集群
docker exec -it myrabbit_1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
docker exec -it myrabbit_2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit_1
rabbitmqctl start_app
exit
docker exec -it myrabbit_3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit_1
rabbitmqctl start_app
exit
进入控制台web界面查看http://ip:15672, 可以发现普通集群搭建成功
- 搭建rabbitmq镜像集群
搭建镜像集群是在web控制台完成的,主要操作就是在Admin界面添加一个Policy. 具体参数如下图所示:
pattern: 队列名字的通配符
ha-mode:镜像队列提供了三种模式:
all:全部的节点队列都做镜像;
exactly:指定镜像队列的节点最高镜像数量;
nodes:只为指定具体节点配置镜像队列;
ha-sync-mode :节点之前的同步模式。有自动和手动两种,默认是手动,这里设置为自动
设置完成并添加了这个策略后,新建的和已存在的队列默认会支持此策略
至此,rabbitmq镜像集群已搭建成功。