Docker 部署 RabbitMQ集群(普通队列、镜像队列、仲裁队列)

一、安装docker(本文不讲,可查看:https://www.cnblogs.com/zhouganqing/p/docker.html

二、准备工作,准备三台Linux服务器(或者一台也行,记住修改docker端口即可),本文使用三台虚拟机部署集群

三、下载带管理界面的镜像(本文使用3.8.14版本)

#下载镜像
docker pull rabbitmq:3.8.14-management

#查看镜像是否下载成功
docker images rabbitmq

四、运行镜像

#第一台服务器
docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 15692:15692  -p 5672:5672 -p 4369:4369 -p 25672:25672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --restart always --add-host=rabbit1:192.168.79.50 --add-host=rabbit2:192.168.79.51 --add-host=rabbit3:192.168.79.52 rabbitmq:3.8.14-management

#第二台服务器
docker run -d --hostname rabbit2 --name myrabbit2 -p 15672:15672 -p 15692:15692  -p 5672:5672 -p 4369:4369 -p 25672:25672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --restart always --add-host=rabbit1:192.168.79.50 --add-host=rabbit2:192.168.79.51 --add-host=rabbit3:192.168.79.52 rabbitmq:3.8.14-management

#第三台服务器
docker run -d --hostname rabbit3 --name myrabbit3 -p 15672:15672 -p 15692:15692  -p 5672:5672 -p 4369:4369 -p 25672:25672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --restart always --add-host=rabbit1:192.168.79.50 --add-host=rabbit2:192.168.79.51 --add-host=rabbit3:192.168.79.52 rabbitmq:3.8.14-management

#参数说明


说明:

-d 后台运行容器;

--hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);

--name 指定容器名;

-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号;15692:Prometheus指标(需要启用插件)通讯端口;4369:Erlang映射守护程序启动端口;25672:节点之间通讯的端口);(宿主:容器)

-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

--restart 出现故障后自动重启方式,no 不自动重启,on-failure:重启次数 指定自动重启的失败次数,到达失败次数后不再重启,always 自动重启

--add-host 添加hosts映射

-v 映射目录或文件;

 

验证是否安装成功

访问:http://192.168.79.50:15672

用户名密码默认为:guest / guest,登录后今入下图界面即成功

 

注:记住这个名字,下面创建集群时需要用到

 

五、集群普通队列

#查询容器ID 
docker ps 

#进入容器
docker exec -it [容器ID] /bin/bash 

#停止MQ服务
rabbitmqctl stop_app  

#加入rabbit1集群
rabbitmqctl join_cluster rabbit@rabbit1 

#启动MQ服务
rabbitmqctl start_app  

执行后出现下面结果代表成功

 

 查看mq管理界面的变化

 六、集群镜像队列

先部署普通集群,基于普通集群配置镜像队列,有两种配置方式

1、命令行模式

随便进入集群中的一台服务器,执行下面的命令:

#查询容器ID 
docker ps

#进入容器
docker exec -it [容器ID] /bin/bash 

#-p静默输出,减少信息输出;"ha-mode":"all"代表所有队列;"ha-sync-mode":"automatic"代表自动同步,默认需要手动同步
rabbitmqctl set_policy -p ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

#查看
rabbitmqctl list_policies

#清除(需要加上vhost的信息)
rabbitmqctl clear_policy -p / ha-all

 

 

 

 

2、界面操作

 

 

参数说明:

Name:为策略名称,可以是任何名称,但建议使用不带空格的基于 ASCII 的名称。

Pattern:与一个或多个 queue(exchange) 名称匹配的正则表达式,可以使用任何正则表达式。只有一个 ^ 代表匹配所有,^test 为匹配名称为 "test" 的 exchanges 或者 queue。

Apply to:Pattern 应用对象。

Priority:配置多个策略时的优先级,值越大,优先级越高。没有指定优先级的消息会以 0 优先级对待,对于超过队列所定最大优先级的消息,优先级以最大优先级对待。

Definition:键/值对,将被插入匹配 queues and exchanges 的可选参数映射中。

ha-mode:策略键,分为 3 种模式:

  1. all :所有的 queue。
  2. exctly :部分(需配置 ha-params 参数,此参数为 int 类型。比如 3,众多集群中的随机 3 台机器)。
  3. nodes :指定(需配置 ha-params 参数,此参数为数组类型。比如 ["rabbit@rabbit2", "rabbit@rabbit3"] 这样指定为 rabbit2 与 rabbit3 这两台机器)。

ha-sync-mode:队列同步:

  1. manual:手动(默认模式)。新的队列镜像将不会收到现有的消息,它只会接收新的消息。
  2. automatic:自动同步。当一个新镜像加入时,队列会自动同步。队列同步是一个阻塞操作。

 七、仲裁队列

先部署普通集群,基于普通集群配置仲裁队列

界面化配置:

 

 Type选择为Quorum即可

 

posted @ 2021-05-26 17:28  夜空中的萤火虫  阅读(1282)  评论(0编辑  收藏  举报