RabbitMQ集群 - 普通集群搭建、宕机情况
发布日期:2025-05-04 06:37:17
浏览次数:9
分类:精选文章
本文共 1838 字,大约阅读时间需要 6 分钟。
RabbitMQ 普通集群搭建与使用
普通集群概述
在 RabbitMQ 的普通集群模式中,所有节点具有完全的一致性,元数据(如交换机、队列、绑定等)在所有节点上保持一致。以下是该模式的核心特点:
元数据一致性:只要有任意一个节点新增交换机、队列或绑定,其他节点会自动复制这些元数据。
消息存储特点:队列中的消息只保存在创建它的节点上。其他节点仅保存队列的元数据和指针(指向消息来源节点)。
消息传输机制:
- 如果生产者向包含多个节点的队列发送消息,RabbitMQ 会将消息转发给对应节点。
- 消息的最终存储位置取决于生产者的连接目标节点。
集群搭建
数据准备
启动容器:
- 使用 Docker 启动 RabbitMQ 容器:
docker run -d --name mq --restart=always \ -e RABBITMQ_DEFAULT_USER=root \ -e RABBITMQ_DEFAULT_PASS=1111 \ -p 15672:15672 \ -p 5672:5672 \ rabbitmq:3.8-management
配置共享密钥:
- RabbitMQ 基于 Erlang 实现,节点间通信依赖于共享密钥(.erlang.cookie)。
- 可自定义密钥值并挂载到各节点。
配置文件:
- 创建
~/.erlang.cookie并设置密钥值:echo "FQXBTQJMJLRUGFPIECYG" > ~/.erlang.cookiechmod 600 ~/.erlang.cookie
- 创建
rabbitmq.conf并配置集群参数:touch rabbitmq.conf
配置示例:
listener.tcp.default = 5672cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_configcluster_formation.classic_config.nodes.1 = rabbit@mq1cluster_formation.classic_config.nodes.2 = rabbit@mq2cluster_formation.classic_config.nodes.3 = rabbit@mq3
节点文件结构:
- 创建三个节点目录:
mkdir -p ~/mq_cluster/mq1 ~/mq_cluster/mq2 ~/mq_cluster/mq3
- 将配置文件复制到各节点:
cp rabbitmq.conf ~/mq_cluster/mq1 ~/mq_cluster/mq2 ~/mq_cluster/mq3cp ~/.erlang.cookie ~/mq_cluster/mq1 ~/mq_cluster/mq2 ~/mq_cluster/mq3
启动节点:
- 启动三个节点并挂载配置文件:
docker run -d --net mq-net \ -v ~/mq_cluster/mq1/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \ -v ~/mq_cluster/mq1/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \ -e RABBITMQ_DEFAULT_USER=root \ -e RABBITMQ_DEFAULT_PASS=1111 \ --name mq1 --hostname mq1 -p 5672:5672 -p 15672:15672 rabbitmq:3.8-management
类似地启动 mq2 和 mq3。
验证集群:
- 在 mq1 控制台创建队列,确认 mq2 和 mq3 也显示该队列。
宕机情况
在节点宕机时,消息丢失的情况如下:
非持久化队列:
- 队列数据仅存在于创建它的节点。
- 如果 mq1 宕机,mq2 无法访问 mq1 的消息。
持久化队列:
- 消息持久化时,消息存储在磁盘上。
- mq1 恢复后,其他节点可通过指针重新获取消息。
注意事项:
- 非持久化队列在 mq1 恢复前不可重建。
- mq1 恢复后,其他节点可创建与 mq1 相同的队列。
通过以上步骤,可以实现一个高可用性的 RabbitMQ 集群,确保消息的安全存储和传输。
发表评论
最新留言
很好
[***.229.124.182]2026年05月29日 16时38分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP获取图片宽度高度、大小尺寸、图片类型、用于布局的img属性
2023-03-01
PHP获取当前文件的绝对路径
2023-03-01
PHP获取当前时间、时间戳的各种格式写法汇总
2023-03-01
PHP获取当前页面的完整URL
2023-03-01
php获取数据库中数据生成json,中文乱码问题的解决方案
2023-03-01
php获取文件夹中文件的两种方法
2023-03-01
PHP获取日期的一些方法总结
2023-03-01
R2学习记录
2023-03-01
PHP获取本周的每一天的时间
2023-03-01
php获取用户真实IP和防刷机制
2023-03-01
php获取网页内容的三种方法
2023-03-01
R-CNN算法优化策略
2023-03-01
PHP规范PSR0和PSR4的理解
2023-03-01
php解析ipa包,获取logo
2023-03-01
R&Rstudio安装各种包
2023-03-02
php设置cookie,在js中如何获取
2023-03-02
php设置socket超时时间
2023-03-02
php设计模式 萨莱 pdf,PHP设计模式 建造者模式
2023-03-02
PHP设计模式之----观察者模式
2023-03-02
php设计模式之装饰器模式
2023-03-02