首页 > 其他分享 >Docker 安装 RabbitMQ

Docker 安装 RabbitMQ

时间:2025-01-17 09:59:23浏览次数:1  
标签:-- RabbitMQ mydata rabbitmqctl 集群 rabbitmq Docker 安装 节点

目录

1、下载镜像文件

docker pull rabbitmq:management

2、创建实例并启动

创建 Jenkins 工作目录

将容器内目录挂载到此目录上,这样我们可以在宿主机上对文件的修改同步到容器内。

mkdir -p /mydata/rabbitmq/data
mkdir -p /mydata/mydata/conf
mkdir -p /mydata/mydata/logs
chmod 777 /mydata/rabbitmq

创建实例并启动

docker run -d --name rabbitmq \
--privileged=true \
--restart=always \
-m 512m \
--cpus=0.5 \
-v /mydata/rabbitmq/data/:/var/lib/rabbitmq \
-v /mydata/rabbitmq/conf:/etc/rabbitmq \
-v /mydata/rabbitmq/logs:/var/log/rabbitmq \
-e RABBITMQ_MEMORY_HIGH_WATERMARK=0.6 \
-e RABBITMQ_DISK_FREE_LIMIT=50000000 \ 
--publish 5671:5671 \
--publish 5672:5672 \
--publish 4369:4369 \
--publish 25672:25672 \
--publish 15671:15671 \
--publish 15672:15672 \
rabbitmq:management
  • 参数说明
    • -d 后台运行容器;
    • --name 指定容器名;
    • -p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
    • -v 映射目录或文件;
    • --hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
    • -e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;
  • 注:
    • 4369, 25672 -- erlang 发现口 & 集群端口
    • 5671, 5672 --client 端通信口(RabbitMq 的编程语言客户端连接端口)(AMOP 端口)
    • 15672 -- 管理界面 ui 端口(RabbitMq 管理界面端口)
    • 25672 -- server 间内部通信口(RabbitMq 集群的端口)
    • 61613, 61614 -- STOMP 协议端口
    • 1883, 8883 -- MQTT 协议端口

3 测试

在web浏览器中输入地址:http://虚拟机ip:15672/
输入默认账号: guest : guest
TMesh : TMesh729

Docker 集群设置

集群形式

RabbiMQ 是用 Erlang 开发的,集群非常方便,因为 Erlang,天生就是一门分布式语言,但其本身并不支持负载均衡。需要 nginx
RabbitMQ 集群中节点包括内存节点(RAM)、磁盘节点(Disk,消息持久化),集群中至少有一个 Disk 节点。

  1. 由磁盘节点和内存节点组成
  2. 至少需要一个磁盘节点

1. 普通模式

  1. 普通模式中集群不会同步消息,只会同步 queue、exchange
    demo:3 个节点 A\B\C组成的集群,消费节点 C 上的队列,如果此时消息在节点 A的队列上,集群会将A的信息发送到C的队列上供于消费
    缺点:单点故障无法解决【高可用】
    对于普通模式,集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入 A 节点的 Queue 中,当从 B 节点拉取时, RabbitMQ 会将消息从 A 中取出,并经过 B 发送给消费者。应用场景:该模式各适合于消息无需持久化的场合,如日志队列。当队列非持久化,且创建该队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列。若为持久化.只能等故障节点恢复。

2.镜像模式

与普通模式不同之处是消息实体会主动在镜像节点间同步,而不是在取数据时临时拉取,高可用;该模式下,mirror queue 有一套选举算法,即 1 个 master、n 个 slaver,生产者、消费者的请求都会转至 master。应用场景:可靠性要求较高场合,如下单、库存队列。缺点:若镜像队列过多,且消息体量大,集群内部网络带宽将会被此种同步通讯所消耗。
优点:解决了高可用,当消息进入节点A的队列,会同步到 B\C。当 master A 节点宕机,B、C 会选择一个主节点

  1. 镜像模式由主节点接收 生产者和消费者的请求【代理】
  2. 镜像模式 依赖于 先搭建一个普通模式,再设置成镜像模式

搭建镜像集群

1. 创建文件夹

mkdir -p /mydata/rabbitmq/{rabbitmq01,rabbitmq02,rabbitmq03}

2. 启动3个 rabbitmq

--hostname 设置容器的主机名
RABBITMQ_ERLANG_COOKIE 节点认证作用,部署集成时需要同步该值

docker run -d --hostname rabbitmq01  --name rabbitmq01 \
-v /mydata/rabbitmq/rabbitmq01:/var/lib/rabbitmq \
-p 15673:15672 -p 5673:5672  \
--restart=always \
-e RABBITMQ_ERLANG_COOKIE='tmesh' \
--privileged=true \
rabbitmq:management
docker run -d --hostname rabbitmq02  --name rabbitmq02 \
-v /mydata/rabbitmq/rabbitmq02:/var/lib/rabbitmq \
-p 15674:15672 -p 5674:5672  \
--restart=always \
-e RABBITMQ_ERLANG_COOKIE='tmesh' \
--privileged=true \
--link rabbitmq01:rabbitmq01 \
rabbitmq:management
docker run -d --hostname rabbitmq03  --name rabbitmq03 \
-v /mydata/rabbitmq/rabbitmq03:/var/lib/rabbitmq \
-p 15675:15672 -p 5675:5672  \
--restart=always \
-e RABBITMQ_ERLANG_COOKIE='tmesh' \
--privileged=true \
--link rabbitmq01:rabbitmq01 \
--link rabbitmq02:rabbitmq02 \
rabbitmq:management

3. 节点加入集群

1. 进入个节点完成初始化

docker exec -it rabbitmq01 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset  #【恢复出厂设置】
rabbitmqctl start_app
exit

2. 将节点 2 和 3 加入到集群

docker exec -it rabbitmq02 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
docker exec -it rabbitmq03 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

3. 访问 192.168.56.131:15675 查看集群

随便访问一个就可以 15673、15674、15675 都可以

4. 实现镜像集群

1. 随便进入一个容器

docker exec -it rabbitmq01 /bin/bash

设置一个策略,/: 当前主机,策略名字是 ha,^ 指的是当前所有主机都是高可用模式[^hello 指 hello 开头的所有主机],自动同步

rabbitmqctl set_policy -p / ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'     

查看 vhost/ 下面的所有 policy

rabbitmqctl  list_policies -p /

5. 验证集群

  1. 创建一个 queue
  2. 生产一个消息【3 个节点都能看到该消息】
  3. 消费消息【3 个节点的 queue 上消息都不存在了】

标签:--,RabbitMQ,mydata,rabbitmqctl,集群,rabbitmq,Docker,安装,节点
From: https://www.cnblogs.com/TMesh/p/18676342

相关文章

  • Origin2018软件安装详细步骤(百度网盘)
    软件简介:Origin2018是由OriginLab公司开发等我,一款功能强大的科学绘图与数据分析软件,具有丰富的绘图模板、全面的数据分析功能以及便捷的操作方式。安装环境:Win11/Win10/Win8/Win7 百度网盘链接:https://pan.baidu.com/s/1Yxu6Iuo8LoQ685QD6TKHKQ 提取码:63e3安装......
  • Docker 安装 Oracle
    目录oracle10g1、拉取镜像2、重新tag镜像3、启动容器4、进入容器5、修改oracle相关配置oracle11g1、拉取镜像2、创建数据目录并设置权限3、启动容器4、进入容器5、修改oracle相关配置oracle12c1、拉取镜像2、创建数据目录并设置权限3、启动容器4、进入容器5、修改oracle相......
  • [docker逃逸] notify_on_release 逃逸
    本文作者CVE-柠檬iCSDN:https://blog.csdn.net/weixin_49125123博客园:https://www.cnblogs.com/CVE-Lemon微信公众号:Lemon安全分析1.简介Cgroups(ControlGroups)是Linux内核的功能,用于限制、隔离和监控进程组的资源使用。每个Cgroup都有一个release_agent文件和一个no......
  • [docker逃逸] Privileged 特权模式逃逸复现
    本文作者CVE-柠檬iCSDN:https://blog.csdn.net/weixin_49125123博客园:https://www.cnblogs.com/CVE-Lemon微信公众号:Lemon安全简述在Docker中,Privileged特权模式赋予容器几乎与宿主机相同的权限,允许其访问所有设备和内核功能。这种模式虽然提供了灵活性,但也带来了安全风险,......
  • Microsoft Office 2024 下载安装教程 ,超详细教程(建议新手收藏)
    MicrosoftOffice2024安装教程|办公不再单调,高效新体验!大家好,我是你们的效率小专家!今天给大家带来一篇非常实用的教程——如何安装MicrosoftOffice2024ProfessionalPlus!这款软件升级不仅让我们平时常用的Word、Excel、PowerPoint等工具变得更加强大,还新增了很多酷炫的......
  • Docker Shrink实战:AI驱动的Docker镜像优化工具
    引言在容器化应用主导的现代开发范式中,有效处理Docker容器是开发者和组织的主要关注点之一。随着项目规模的增长,我们经常会遇到Docker镜像体积过大的问题,这不仅增加了存储成本和构建时间,还可能在生产环境中引发其他问题。DockerShrink应运而生,它是一款利用AI技术来......
  • Ubuntu等各类Linux系统安装配置Docker详细教程(全网最详细,步骤简洁,看完包懂)
    文章目录前言详细步骤1.安装相关依赖2.安装阿里云的DockerGPG密钥3.设置stable仓库4.安装Docker5.启动服务6.验证测试常见问题及对应解决方案Ubuntu22.04配置Docker-速通版前言Docker是一个非常常用的工具,但是由于其涉及到的知识点较多,所以网上的教程大部分非......
  • 在kubernates中安装安卓模拟器
    1.检测环境root@xx:~#aptinstallcpu-checkerroot@xx:~#kvm-okINFO:/dev/kvmexistsKVMaccelerationcanbeusedroot@xx:~#ll/dev/kvmcrw-rw----1rootkvm10,232Jan1516:38/dev/kvm确认/dev/kvm设备存在即可。如果是ESXi虚拟机服务器,则需要在虚拟机配置......
  • 告别虚拟机!WSL2安装配置教程!!!
    作者:SkyXZCSDN:SkyXZ~-CSDN博客博客园:SkyXZ-博客园        由于Linux的系统的稳定以及在环境管理方面的优越性,同时Linux对于ROS系统的独占,很多时候我们都乐意在Linux系统下开发我们机器人的算法,但是由于Windows和Linux系统的存在内核方面的天壤之别,在我们手边没有Lin......
  • k8s 安装
    k8s安装master172.18.32.225AnolisOSrelease8.8node172.18.32.226AnolisOSrelease8.8k8sv1.32.0配置宿主机#将SELinux设置为permissive模式(相当于将其禁用)sudosetenforce0sudosed-i's/^SELINUX=enforcing$/SELINUX=permissive/'/etc/selinux/config......