Docker搭建RabbitMQ集群的方法步骤

 更新时间:2022年01月17日 09:07:24   作者:万里顾—程  
本文主要介绍了Docker搭建RabbitMQ集群的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

集群模式介绍

RabbitMQ集群模式有两种:普通模式和镜像模式

  • 普通模式:默认模式,多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构、交换器结构、交换器与队列绑定关系、vhost。消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法消费消息,如果做了消息持久化,那么得等该节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。
  • 镜像模式:它是在普通模式的基础上,把需要的队列做成镜像队列,存在于多个节点来实现高可用(HA)。该模式解决了上述问题,Broker会主动地将消息实体在各镜像节点间同步,在consumer取数据时无需临时拉取。该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被大量消耗。通常地,对可靠性要求较高的场景建议采用镜像模式。

1、普通集群的搭建

1.1、普通集群架构介绍

架构图

在这里插入图片描述

1.2、环境准备

拉取RabbitMQ镜像

docker pull rabbitmq:3.7-management

在这里插入图片描述

创建并运行三个RabbitMQ容器节点,一主两从

命令如下:

#rabbitmqCluster01 主节点
docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -v `pwd`/rabbitmq01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:3.7-management

#rabbitmqCluster02 从节点
docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -v `pwd`/rabbitmq02:/var/lib/rabbitmq -p 7002:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie'  --link rabbitmqCluster01:rabbitmq01 rabbitmq:3.7-management

#rabbitmqCluster03 从节点
docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -v `pwd`/rabbitmq03:/var/lib/rabbitmq -p 8002:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie'  --link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02  rabbitmq:3.7-management

-d 后台运行容器;

–name 指定容器名;

-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号),控制台端口用于管理rabbitmq,应用访问端口号为rabbitclient等应用访问。;

-v 映射目录或文件,pwd 当前目录;

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

-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码,RABBITMQ_ERLANG_COOKIE 节点认证作用,部署集成时 需要同步该值)

–link 用于容器的链接

查看运行中的三个RabbitMQ容器:

在这里插入图片描述

登录 RabbitMQ 控制台界面:

rabbitmq01 节点:

在这里插入图片描述

rabbitmq02 节点:

在这里插入图片描述

rrabbitmq03 节点

在这里插入图片描述

1.3、集群搭建

将rabbitmqCluster02 节点和 rabbitmqCluster03 节点加入 rabbitmqCluster01 创建集群

进入 rabbitmqCluster02 节点和 rabbitmqCluster03 节点,在两个节点分别执行一下加入集群的命令:

rabbitmqctl stop_app

rabbitmqctl reset
#rabbitmq01为rabbitmqCluster01容器中的hostname
rabbitmqctl join_cluster --ram rabbit@rabbitmq01

rabbitmqctl start_app

rabbitmqCluster02 节点:

在这里插入图片描述

rabbitmq-slave1 节点:

在这里插入图片描述

执行完后在任意节点查看集群状态:

rabbitmqctl cluster_status

如果出现如下显示,集群搭建成功:

在这里插入图片描述

之后我们在主节点的web管理页可以看到两个从节点了:

在这里插入图片描述

2、镜像集群的搭建

镜像集群的结构图

在这里插入图片描述

2.1、配置镜像集群的策略

1、使用命令配置策略:

rabbitmqctl set_policy [-p Vhost] [--priority <priority>] [--apply-to <apply-to>] Name Pattern Definition

参数说明:

-p Vhost: 可选参数,针对指定 vhost 下的 queue 进行设置

Name: policy 的名称

Pattern: queue 的匹配模式(正则表达式)

Definition:镜像定义,包括三个部分 ha-mode, ha-params, ha-sync-mode

ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes

all:表示在集群中所有的节点上进行镜像

exactly:表示在指定个数的节点上进行镜像,节点的个数由 ha-params 指定

nodes:表示在指定的节点上进行镜像,节点名称通过 ha-params 指定

ha-params:作为参数,为 ha-mode 的补充

ha-sync-mode:进行队列中消息的同步方式,有效值为 automatic 和 manual

pririty:可选参数,policy的优先级

在任意节点上添加策略:

#^hello 匹配hello开头的队列
rabbitmqctl set_policy ha-all "^hello" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

在所有节点的以hello开头的队列上都添加了策略:以后当主节点宕机时,hello队列里未消费的消息也不会丢失,会复制到其他节点上。

在这里插入图片描述

删除策略:

#rabbitmqctl clear_policy 策略名称
rabbitmqctl clear_policy ha-all

2、管理界面配置策略

登录 rabbitmq 管理页面 ——> Admin ——> Policies ——> Add / update a policy

在这里插入图片描述

name:策略名称

Pattern:^匹配符,只有一个^代表匹配所有。^message指同步“message”开头的队列名称

Definition:ha-mode=all 为匹配类型,分为3种模式:all(表示所有的queue)

Priority:优先级,首先根据priority排序,值越大的优先级越高;相同priority则根据创建时间排序,越晚创建的优先级越高。

Operator Policy 和 User Policy 的区别:

  • Operator Policy 是给服务提供商或公司基础设施部门用来设置某些需要强制执行的通用规则
  • User Policy 是给业务应用用来设置的规则

到此这篇关于Docker搭建RabbitMQ集群的方法步骤的文章就介绍到这了,更多相关Docker搭建RabbitMQ集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker容器中的OpenCV如何轻松构建可移植的计算机视觉环境

    Docker容器中的OpenCV如何轻松构建可移植的计算机视觉环境

    计算机视觉是一门涉及图像和视频处理的领域,可以应用于目标检测、图像识别、人脸识别等各种任务,本文给大家介绍Docker容器中的OpenCV如何轻松构建可移植的计算机视觉环境,感兴趣的朋友一起看看吧
    2023-12-12
  • 修改Docker镜像(images)的存储路径的多种实现方式

    修改Docker镜像(images)的存储路径的多种实现方式

    本文介绍了如何修改Docker数据根目录以解决磁盘空间不足或希望使用更大/更快磁盘的问题,推荐通过修改daemon.json配置来实现,并提供了详细的步骤,需要的朋友可以参考下
    2026-01-01
  • Jenkins + Docker完整部署指南(附详细步骤)

    Jenkins + Docker完整部署指南(附详细步骤)

    Jenkins作为目前持续集成中使用较为广泛的工具,在实际生产过程中通过结合众多的插件,从而实现工程的持续构建、持续部署,这篇文章主要介绍了Jenkins + Docker完整部署的相关资料,需要的朋友可以参考下
    2026-01-01
  • Docker部署nnunetv2的实现步骤

    Docker部署nnunetv2的实现步骤

    本文主要介绍了Docker部署nnunetv2的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • 如何通过Jenkins定期清理为None的镜像详解

    如何通过Jenkins定期清理为None的镜像详解

    这篇文章主要给大家介绍了关于如何通过Jenkins定期清理为None的镜像的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • docker初识之五分钟认识docker

    docker初识之五分钟认识docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。通过本文学习可以快速了解docker,本文介绍的非常不错具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-10-10
  • docker常用命令操作方法

    docker常用命令操作方法

    最近几天都在研究docker,今天给大家分享docker一些常用的命令,需要的朋友可以参考下
    2017-11-11
  • Docker 清理的常用方法及问题

    Docker 清理的常用方法及问题

    这篇文章主要介绍了Docker 清理的常用方法及问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Docker 部署分布式搜索引擎 Elastic Search的详细过程

    Docker 部署分布式搜索引擎 Elastic Search的详细过程

    Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容,这篇文章主要介绍了Docker 部署分布式搜索引擎 Elastic Search,需要的朋友可以参考下
    2023-02-02
  • 通过Docker Compose部署MySQL的详细教程

    通过Docker Compose部署MySQL的详细教程

    Docker Compose 作为 Docker 官方的容器编排工具,为 MySQL 数据库部署带来了显著优势,下面小编就来为大家详细介绍一下具体的流程吧
    2025-03-03

最新评论