RabbitMQ 3.13.7 三节点高可用集群搭建与排坑笔记
RabbitMQ 3.13.7 三节点高可用集群搭建与排坑笔记一、 环境规划与基础准备1. 节点信息主机名IP角色node-110.0.0.1主节点node-210.0.0.2从节点node-310.0.0.3从节点2. 安装包Erlang:erlang-26.2.5.2-1.el8.x86_64.rpmRabbitMQ:rabbitmq-server-3.13.7-1.el8.noarch.rpm延迟插件:rabbitmq_delayed_message_exchange-3.13.0.ez3. 统一配置 /etc/hosts三台均执行cat/etc/hostsEOF 10.0.0.1 hostname1 node-1 10.0.0.2 hostname2 node-2 10.0.0.3 hostname3 node-3 EOF4. 统一安装基础组件三台均执行yuminstall-ysocatlogrotaterpm-ivherlang-26.2.5.2-1.el8.x86_64.rpmrpm-ivhrabbitmq-server-3.13.7-1.el8.noarch.rpm二、 集群核心配置三台均执行1. 安装并启用延迟消息插件cprabbitmq_delayed_message_exchange-3.13.0.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.13.7/plugins/chown-Rrabbitmq:rabbitmq /usr/lib/rabbitmq/lib/rabbitmq_server-3.13.7/plugins/rabbitmq_delayed_message_exchange-3.13.0.ezchmod-R755/usr/lib/rabbitmq/lib/rabbitmq_server-3.13.7/plugins/rabbitmq_delayed_message_exchange-3.13.0.ez rabbitmq-pluginsenablerabbitmq_delayed_message_exchange2. 同步 Erlang Cookie在主节点node-114执行scp/var/lib/rabbitmq/.erlang.cookie root10.0.0.252:/var/lib/rabbitmq/scp/var/lib/rabbitmq/.erlang.cookie root10.0.0.8:/var/lib/rabbitmq/在从节点node-189, node-248执行chmod400/var/lib/rabbitmq/.erlang.cookiechownrabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie3. 配置短主机名模式解决阿里云长主机名报错的关键在 node-1 执行cat/etc/rabbitmq/rabbitmq-env.confEOF RABBITMQ_NODENAMErabbitnode-1 RABBITMQ_USE_LONGNAMEfalse EOF在 node-2执行cat/etc/rabbitmq/rabbitmq-env.confEOF RABBITMQ_NODENAMErabbitnode-2 RABBITMQ_USE_LONGNAMEfalse EOF在 node-3 执行cat/etc/rabbitmq/rabbitmq-env.confEOF RABBITMQ_NODENAMErabbitnode-3 RABBITMQ_USE_LONGNAMEfalse EOF4. 开放防火墙端口三台均执行firewall-cmd--permanent--add-port{4369,5672,15672,25672}/tcp firewall-cmd--reload5. 重启服务使配置生效三台均执行systemctl restart rabbitmq-server三、 组建集群在从节点node-2, node-3分别执行rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbitnode-1 rabbitmqctl start_app验证集群状态任意节点执行rabbitmqctl cluster_status四、 异常处理与排坑指南重点**异常 1安装 RabbitMQ 报错 ****erlang 26.0 被需要**现象rpm -ivh rabbitmq-server-3.13.7-1.el8.noarch.rpm依赖检测失败。原因RabbitMQ 3.13.7 强制要求 Erlang 26.x而旧包是 25.x。处理卸载旧版本rpm -e erlang-25.x下载并安装erlang-26.2.5.2-1.el8.x86_64.rpm。**异常 2启用插件报错 ****Plugin doesnt support current server version**现象rabbitmq-plugins enable rabbitmq_delayed_message_exchange失败提示仅支持 3.8.x。原因插件版本与 RabbitMQ 主版本不匹配。处理下载与 RabbitMQ 3.13.x 匹配的rabbitmq_delayed_message_exchange-3.13.0.ez替换旧版。**异常 3加入集群报错 ****File operation error: eacces**现象join_cluster时报错目标指向.ez/ebin文件。原因插件文件权限不足rabbitmq用户无法读取。处理执行chown -R rabbitmq:rabbitmq和chmod -R 755修复插件目录权限。**异常 4加入集群报错 ****{erpc, noconnection}**现象节点间无法建立 Erlang 分布式连接。排查步骤1. 检查/etc/hosts是否三台互相配置了 IP 和主机名映射。2. 检查三台/var/lib/rabbitmq/.erlang.cookie内容是否一字不差。3. 检查主节点防火墙是否放行了4369和25672端口。4. 使用erl -sname test当前节点 -setcookie $(cat /var/lib/rabbitmq/.erlang.cookie)手动测试连通性。**异常 5Erlang 测试连通性报错 ****Hostname xxx is illegal**现象net_adm:ping返回pang提示系统运行在 FQDN 模式短主机名非法。原因阿里云 ECS 默认主机名为长字符串Erlang 自动开启 FQDN 模式导致短主机名如node-114无法被识别。处理在三台服务器均创建/etc/rabbitmq/rabbitmq-env.conf强制写入RABBITMQ_USE_LONGNAMEfalse并重启服务。异常 6**rabbitmqctl list_plugins**** 报错 ****Command not found**现象提示未找到命令。原因RabbitMQ 3.13.x 将插件管理命令独立。处理改用rabbitmq-plugins list | grep delayed查看插件状态。