RabbitMQ高可用Ubuntu怎么配置
导读:Ubuntu 上搭建 RabbitMQ 高可用 一 架构与前置准备 架构建议:部署至少 3 个节点 的集群,包含 至少 1 个磁盘节点(disc),其余可为内存节点(ram);队列层面启用 镜像队列(HA) 实现消息多副本,避免单点故障。...
Ubuntu 上搭建 RabbitMQ 高可用
一 架构与前置准备
- 架构建议:部署至少 3 个节点 的集群,包含 至少 1 个磁盘节点(disc),其余可为内存节点(ram);队列层面启用 镜像队列(HA) 实现消息多副本,避免单点故障。普通集群仅同步元数据,队列本体只存于一个节点,不满足高可用诉求。为便于节点互联,建议固定 主机名 并在各节点配置 /etc/hosts 解析;集群节点间需保持 Erlang Cookie 一致(文件为 /var/lib/rabbitmq/.erlang.cookie,权限建议 400)。端口规划建议:AMQP 5672、管理插件 15672、集群通信端口范围 4369/25672 放通。生产环境建议启用管理插件与合理的资源水位告警。
二 安装与基础配置
- 安装 RabbitMQ(Ubuntu 20.04/22.04 示例,使用官方 Cloudsmith 仓库,生产建议选择稳定版如 3.12.x):
- 添加仓库与密钥:
- echo “deb https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) main” | sudo tee /etc/apt/sources.list.d/rabbitmq.list
- wget -O- https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.E495BB49CC4BBE5B.key | sudo apt-key add -
- sudo apt-get update & & sudo apt-get install -y rabbitmq-server
- 添加仓库与密钥:
- 基础配置(/etc/rabbitmq/rabbitmq.conf,按需调整):
- listeners.tcp.default = 5672
- management.tcp.port = 15672
- vm_memory_high_watermark.relative = 0.7
- disk_free_limit.absolute = 50MB
- 启用管理插件并创建管理员(默认 guest/guest 仅本地可登录,远程需新建用户):
- sudo rabbitmq-plugins enable rabbitmq_management
- sudo rabbitmqctl add_user admin
- sudo rabbitmqctl set_user_tags admin administrator
- sudo rabbitmqctl set_permissions -p / admin “." ".” “.*”
- 主机名与 hosts 示例(三节点:node01/node02/node03,IP 示例 10.0.1.21/22/23):
- 编辑 /etc/hosts:10.0.1.21 node01;10.0.1.22 node02;10.0.1.23 node03
- 同步 Erlang Cookie(仅示例从 node01 同步到 node02/node03,执行于目标节点):
- sudo systemctl stop rabbitmq-server
- sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie
- sudo cp /var/lib/rabbitmq/.erlang.cookie node02:/var/lib/rabbitmq/.erlang.cookie
- sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
- sudo systemctl start rabbitmq-server
- 验证:
- sudo rabbitmqctl status
- sudo rabbitmqctl cluster_status
- 访问管理控制台:http://< 节点IP> :15672(使用新建管理员登录)
三 构建集群
- 方式 A 多机集群(推荐)
- 在 node02、node03 上依次执行(以 node01 为种子节点):
- sudo rabbitmqctl stop_app
- sudo rabbitmqctl reset
- sudo rabbitmqctl join_cluster rabbit@node01 # 不加 --ram 为磁盘节点
- sudo rabbitmqctl start_app
- 在任一节点查看集群状态:sudo rabbitmqctl cluster_status(应看到 3 个节点,含 1+ 个 disc 节点)
- 在 node02、node03 上依次执行(以 node01 为种子节点):
- 方式 B 单机多节点(测试/演示)
- 启动三个节点(指定不同节点名与端口,避免冲突):
- sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit rabbitmq-server -detached
- sudo RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached
- sudo RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
- 将 rabbit1/rabbit2 加入 rabbit(示例将 rabbit2 设为内存节点):
- rabbitmqctl -n rabbit1 stop_app & & rabbitmqctl -n rabbit1 reset & & rabbitmqctl -n rabbit1 join_cluster rabbit@ & & rabbitmqctl -n rabbit1 start_app
- rabbitmqctl -n rabbit2 stop_app & & rabbitmqctl -n rabbit2 reset & & rabbitmqctl -n rabbit2 join_cluster rabbit@ --ram & & rabbitmqctl -n rabbit2 start_app
- 启动三个节点(指定不同节点名与端口,避免冲突):
- 节点类型变更(需先 stop_app):
- rabbitmqctl -n stop_app
- rabbitmqctl -n change_cluster_node_type disc|ram
- rabbitmqctl -n start_app
- 常用运维
- 移除故障节点:在存活节点执行 rabbitmqctl forget_cluster_node ;在被移除节点如需复用,先 reset 再启动
四 高可用策略与验证
- 镜像队列策略(队列数据多副本)
- 对所有队列启用全量镜像(示例策略名 ha-all-queue,匹配所有队列 ^,同步模式自动):
- sudo rabbitmqctl set_policy ha-all-queue “^” ‘{ “ha-mode”:“all”,“ha-sync-mode”:“automatic”} ’
- 说明:镜像队列提升可用性,但会带来 带宽与磁盘 开销;可按 vhost/队列粒度设置更细的策略(如 exactly、nodes 等)。
- 对所有队列启用全量镜像(示例策略名 ha-all-queue,匹配所有队列 ^,同步模式自动):
- 连接与验证
- 客户端连接建议使用 负载均衡器 的 5672 端口;管理界面通过 15672 观察镜像同步与健康状态。
- 验证要点:创建队列并发送消息,在管理界面查看队列的 镜像节点列表;停止持有主副本的节点,确认消息仍可消费且镜像同步恢复。
五 负载均衡与运维要点
- HAProxy 示例(TCP 转发 + 统计页)
- 安装:sudo apt-get install -y haproxy
- 配置 /etc/haproxy/haproxy.cfg(示例片段):
- frontend rabbitmq_front
- bind *:5672
- mode tcp
- default_backend rabbitmq_back
- backend rabbitmq_back
- mode tcp
- balance roundrobin
- server node01 10.0.1.21:5672 check inter 5000 rise 2 fall 3
- server node02 10.0.1.22:5672 check inter 5000 rise 2 fall 3
- server node03 10.0.1.23:5672 check inter 5000 rise 2 fall 3
- frontend stats
- bind *:8100
- mode http
- stats enable
- stats uri /stats
- stats auth admin:
- frontend rabbitmq_front
- 重启:sudo systemctl restart haproxy;访问统计页:http://< LB_IP> :8100/stats
- 常见问题排查
- 端口与连通性:ss -lntp | grep -E “5672|15672|4369|25672”;管理界面与策略生效情况
- 日志:/var/log/rabbitmq/rabbit@.log(节点名解析、集群握手、磁盘告警等)
- Cookie 与权限:.erlang.cookie 一致且权限 400;远程登录使用自建管理员而非 guest
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: RabbitMQ高可用Ubuntu怎么配置
本文地址: https://pptw.com/jishu/755349.html
