CentOS 上部署与运维 RabbitMQ 的最佳实践
一 版本与系统选择
- 明确版本兼容矩阵,避免“装得上、起不来”。典型对应关系:RabbitMQ 3.13.x → Erlang 26.x+;3.12.x → Erlang 25.x;3.11.x → Erlang 24.2+。系统 glibc 要求随之提高:CentOS 7(glibc 2.17)仅适合 3.12.x/25.x;CentOS 8/9(glibc ≥2.28)可上 3.13.x/26.x+。生产建议优先选择 CentOS Stream 8/9 或升级内核/系统后再上新版。部署前务必查阅官方“which Erlang”页面核对兼容关系。
二 安装与仓库管理
- 使用官方仓库一键安装,减少依赖与冲突:
- 安装 Erlang 仓库并部署:curl -1sLf ‘https://dl.cloudsmith.io/public/rabbitmq/erlang/setup.rpm.sh’ | sudo -E bash
- 安装 RabbitMQ 仓库并部署:curl -1sLf ‘https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/setup.rpm.sh’ | sudo -E bash
- 安装服务:yum install -y rabbitmq-server
- 启动与自启:systemctl start rabbitmq-server && systemctl enable rabbitmq-server
- 启用管理插件并访问控制台:rabbitmq-plugins enable rabbitmq_management,控制台 http://服务器IP:15672;默认账号 guest/guest 仅限本地,生产需创建管理员账号。
三 安全加固与网络配置
- 创建专用管理员并收敛权限(示例):
- rabbitmqctl add_user admin StrongPass!
- rabbitmqctl set_user_tags admin administrator
- rabbitmqctl set_permissions -p / admin “." ".” “.*”
- 启用 TLS(建议至少 TLS 1.2):
- 生成证书(示例):openssl req -newkey rsa:2048 -nodes -keyout /etc/rabbitmq/cert.key -x509 -days 365 -out /etc/rabbitmq/cert.pem
- 配置示例(/etc/rabbitmq/rabbitmq.conf):
- listeners.ssl.default = 5671
- ssl_options.certfile = /etc/rabbitmq/cert.pem
- ssl_options.keyfile = /etc/rabbitmq/cert.key
- ssl_options.versions.1 = tlsv1.2
- 防火墙放行必要端口(示例):
- firewall-cmd --permanent --add-port={4369,5671,5672,15672,25672}/tcp && firewall-cmd --reload
- 用途速览:4369(epmd)、5672(AMQP 0-9-1)、5671(AMQP/TLS)、15672(管理)、25672(集群通信)。
四 资源与内核调优
- 句柄与进程数(Systemd 服务需单独设置,/etc/security/limits.conf 对 systemd service 作用有限):
- 全局(/etc/systemd/system.conf 或 /etc/systemd/system.conf.d/99-rabbitmq.conf):
- DefaultLimitNOFILE=655360
- DefaultLimitNPROC=655360
- 针对服务单元(/usr/lib/systemd/system/rabbitmq-server.service.d/limits.conf):
- [Service] LimitNOFILE=65536; LimitNPROC=65536
- 变更后执行:systemctl daemon-reexec && systemctl restart rabbitmq-server
- 内存与磁盘水位(/etc/rabbitmq/rabbitmq.conf):
- vm_memory_high_watermark.relative = 0.6
- disk_free_limit.absolute = 2GB
- 可选内核网络/文件句柄优化(/etc/sysctl.d/99-sysctl.conf):
- net.core.netdev_max_backlog=262144; net.core.rmem_max=16777216; net.core.wmem_max=16777216
- net.ipv4.tcp_rmem=4096 87380 4194304; net.ipv4.tcp_wmem=4096 16384 4194304
- net.ipv4.tcp_max_syn_backlog=262144; net.ipv4.tcp_tw_reuse=1; net.ipv4.tcp_tw_recycle=1
- 应用:sysctl -p。以上有助于高并发与长连接场景的稳定性。
五 集群、高可用与监控
- 节点发现与集群组建:
- /etc/hosts 添加节点映射(示例):192.168.1.10 rabbitmq-node1 等
- 在备节点执行:rabbitmqctl stop_app → rabbitmqctl join_cluster rabbit@rabbitmq-node1 → rabbitmqctl start_app
- 镜像队列(队列级 HA,示例将全部队列镜像到所有节点):
- rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”,“ha-sync-mode”:“automatic”}’
- 入口高可用(可选):前置 HAProxy + Keepalived 提供 5672/TCP 的 4 层负载均衡与 VIP,健康检查自动摘除异常节点,保障接入层稳定。
- 监控与日志:
- 部署 rabbitmq_exporter 暴露指标,接入 Prometheus + Grafana 做容量与错误告警
- 配置 logrotate 轮转 /var/log/rabbitmq/*.log,保留 14 天并压缩,避免磁盘被撑满。