1. 环境准备:安装匹配的Erlang版本
RabbitMQ基于Erlang开发,必须使用兼容的Erlang/OTP版本(如RabbitMQ 3.12.x需搭配OTP 24+)。在Ubuntu上,推荐通过Erlang Solutions官方仓库安装,确保版本一致性:
# 添加Erlang Solutions仓库密钥和源
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
sudo dpkg -i erlang-solutions_2.0_all.deb
sudo apt update
# 安装指定版本Erlang(以24.3.4为例)
sudo apt install -y esl-erlang=1:24.3.4-1
验证安装:erl -version,输出需显示正确版本号。
2. 安装RabbitMQ:使用官方APT仓库
避免从Ubuntu默认仓库安装(版本可能滞后),应添加RabbitMQ官方仓库:
# 添加RabbitMQ仓库密钥和源
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2021/rabbitmq-release-signing-key.asc | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq-archive-keyring.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/rabbitmq-archive-keyring.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
# 更新并安装
sudo apt update
sudo apt install -y rabbitmq-server
启动服务并设置开机自启:sudo systemctl enable --now rabbitmq-server。
3. 安全加固:禁用默认用户与配置权限
默认用户guest仅允许本地访问,生产环境需创建新用户并删除默认用户:
# 创建管理员用户(替换为强密码)
sudo rabbitmqctl add_user myadmin myStrongPassword123!
# 设置管理员标签
sudo rabbitmqctl set_user_tags myadmin administrator
# 授权虚拟主机(默认为“/”)
sudo rabbitmqctl set_permissions -p / myadmin ".*" ".*" ".*"
# 删除默认用户
sudo rabbitmqctl delete_user guest
修改配置允许远程访问(/etc/rabbitmq/rabbitmq.conf):loopback_users.guest = false。
4. 启用管理插件与监控
启用Web管理界面(默认端口15672),方便可视化操作:
sudo rabbitmq-plugins enable rabbitmq_management
访问http://<服务器IP>:15672,使用新用户登录。进一步集成Prometheus+Grafana监控集群状态:
5. 配置优化:提升性能与可靠性
编辑/etc/rabbitmq/rabbitmq.conf调整核心参数:
# 内存阈值(70%时阻塞生产者)
vm_memory_high_watermark.relative = 0.7
# 磁盘空间阈值(50MB时阻塞生产者)
disk_free_limit.absolute = 50MB
# 最大通道数(根据并发调整)
channel_max = 1000
# 心跳间隔(秒)
heartbeats = 60
# 队列主节点定位策略(least_busy提升负载均衡)
queue_master_locator = least_busy
重启服务生效:sudo systemctl restart rabbitmq-server。
6. 集群部署:实现高可用
多机集群需确保节点间网络互通(开放4369、25672端口),并同步Erlang Cookie(/var/lib/rabbitmq/.erlang.cookie,权限600)。以两节点(node1:192.168.1.10、node2:192.168.1.11)为例:
# 在node2上执行(停止应用→加入集群→启动应用)
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@node1
sudo rabbitmqctl start_app
# 验证集群状态
sudo rabbitmqctl cluster_status
配置镜像队列(队列冗余,防止单点故障):
sudo rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'
此策略会将ha.前缀的队列同步到所有节点。
7. 日志与故障排查
日志文件位于/var/log/rabbitmq/,使用journalctl查看实时日志:
sudo journalctl -u rabbitmq-server -f
常见问题解决:
channel_max、vm_memory_high_watermark参数;/etc/rabbitmq/rabbitmq-env.conf中的NODENAME)。