Docker 安装 RabbitMQ
1.Docker 安装 Jenkins2.Docker 安装 Jenkins-jdk173.Docker 安装 nginx4.Docker 安装 MySql5.Docker 安装 Oracle
6.Docker 安装 RabbitMQ
7.Docker 安装 Redis8.Docker 安装 Kubernetes9.Docker 中安装 ElasticSearch10.Docker 安装 Nacos11.Docker 安装 Seata12.Docker Desktop13.DockerUI14.Portainer15.Docker 笔记16.Docker Compose 笔记17.Dockerfile 笔记18.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. 普通模式
- 普通模式中集群不会同步消息,只会同步 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. 创建文件夹
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. 验证集群
- 创建一个 queue
- 生产一个消息【3 个节点都能看到该消息】
- 消费消息【3 个节点的 queue 上消息都不存在了】
合集:
Docker
分类:
Docker / Docker安装软件
, RabbitMq
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了