Appearance
安装前准备
1. 概述
在安装 RabbitMQ 之前,需要了解系统要求、依赖环境以及网络配置等前置条件。本章将详细介绍安装 RabbitMQ 所需的各项准备工作,帮助您顺利完成后续的安装部署。
2. 系统要求
2.1 操作系统支持
RabbitMQ 支持多种操作系统平台:
| 操作系统 | 支持版本 | 架构 |
|---|---|---|
| Linux | Ubuntu 18.04+, CentOS 7+, Debian 10+, RHEL 7+ | x86_64, ARM64 |
| Windows | Windows Server 2012+, Windows 10+ | x86_64 |
| macOS | macOS 10.15 (Catalina)+ | x86_64, ARM64 (M1/M2) |
2.2 硬件要求
最低配置:
| 资源 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 1 核 | 2 核+ |
| 内存 | 256 MB | 1 GB+ |
| 磁盘 | 1 GB | 10 GB+ (SSD) |
生产环境推荐配置:
| 资源 | 小型部署 | 中型部署 | 大型部署 |
|---|---|---|---|
| CPU | 2 核 | 4 核 | 8 核+ |
| 内存 | 4 GB | 8 GB | 16 GB+ |
| 磁盘 | 50 GB SSD | 100 GB SSD | 500 GB+ SSD |
2.3 Erlang 版本要求
RabbitMQ 基于 Erlang/OTP 平台构建,需要安装兼容的 Erlang 版本:
| RabbitMQ 版本 | 支持的 Erlang/OTP 版本 | 推荐版本 |
|---|---|---|
| 3.13.x | 26.x, 27.x | 26.2.x |
| 3.12.x | 25.x, 26.x | 26.x |
| 3.11.x | 25.x, 26.x | 25.3.x |
| 3.10.x | 24.x, 25.x | 25.x |
⚠️ 注意:Erlang 版本必须与 RabbitMQ 版本兼容,否则会导致安装失败或运行异常。
3. 依赖环境
3.1 Linux 系统依赖
Ubuntu/Debian 系统:
bash
sudo apt-get update
sudo apt-get install -y curl gnupg apt-transport-httpsCentOS/RHEL 系统:
bash
sudo yum install -y curl epel-release
sudo yum install -y socat logrotate必要的系统工具:
bash
sudo apt-get install -y \
curl \
wget \
gnupg \
apt-transport-https \
socat \
logrotate \
erlang-nox3.2 Windows 系统依赖
Windows 系统需要安装以下组件:
- Erlang/OTP:从官方网站下载安装
- Visual C++ Redistributable:部分版本需要
- PowerShell 5.1+:用于管理命令
3.3 macOS 系统依赖
bash
xcode-select --install
brew install wget curl4. 网络配置
4.1 默认端口说明
RabbitMQ 使用多个端口进行通信:
| 端口 | 协议 | 用途 | 说明 |
|---|---|---|---|
| 5672 | AMQP | 客户端连接 | 默认 AMQP 端口 |
| 5671 | AMQPS | 加密客户端连接 | SSL/TLS 加密连接 |
| 15672 | HTTP | 管理界面 | Web 管理控制台 |
| 15671 | HTTPS | 加密管理界面 | SSL/TLS 加密管理界面 |
| 25672 | Erlang | 集群通信 | 节点间通信端口 |
| 4369 | EPMD | Erlang 端口映射 | Erlang 端口映射守护进程 |
| 61613 | STOMP | STOMP 协议 | 需要 stomp 插件 |
| 61614 | STOMPS | 加密 STOMP | SSL/TLS 加密 STOMP |
| 1883 | MQTT | MQTT 协议 | 需要 mqtt 插件 |
| 8883 | MQTTS | 加密 MQTT | SSL/TLS 加密 MQTT |
4.2 防火墙配置
Linux (firewalld):
bash
sudo firewall-cmd --permanent --add-port=5672/tcp
sudo firewall-cmd --permanent --add-port=15672/tcp
sudo firewall-cmd --permanent --add-port=25672/tcp
sudo firewall-cmd --reloadLinux (ufw):
bash
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp
sudo ufw allow 25672/tcp
sudo ufw reloadLinux (iptables):
bash
sudo iptables -A INPUT -p tcp --dport 5672 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 15672 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 25672 -j ACCEPT
sudo service iptables saveWindows 防火墙:
powershell
netsh advfirewall firewall add rule name="RabbitMQ AMQP" dir=in action=allow protocol=tcp localport=5672
netsh advfirewall firewall add rule name="RabbitMQ Management" dir=in action=allow protocol=tcp localport=15672
netsh advfirewall firewall add rule name="RabbitMQ Cluster" dir=in action=allow protocol=tcp localport=256724.3 主机名解析
集群部署时需要确保主机名解析正常:
bash
cat /etc/hosts确保包含类似以下内容:
127.0.0.1 localhost
192.168.1.10 rabbit-node1
192.168.1.11 rabbit-node2
192.168.1.12 rabbit-node35. 用户权限
5.1 创建 RabbitMQ 用户
Linux 系统:
bash
sudo groupadd rabbitmq
sudo useradd -r -g rabbitmq -s /sbin/nologin rabbitmq5.2 目录权限设置
bash
sudo mkdir -p /var/lib/rabbitmq
sudo mkdir -p /var/log/rabbitmq
sudo mkdir -p /etc/rabbitmq
sudo chown -R rabbitmq:rabbitmq /var/lib/rabbitmq
sudo chown -R rabbitmq:rabbitmq /var/log/rabbitmq
sudo chown -R rabbitmq:rabbitmq /etc/rabbitmq5.3 systemd 服务配置
创建 systemd 服务文件:
bash
sudo tee /etc/systemd/system/rabbitmq-server.service > /dev/null << 'EOF'
[Unit]
Description=RabbitMQ broker
After=network.target
[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
ExecStart=/usr/sbin/rabbitmq-server
ExecStop=/usr/sbin/rabbitmqctl stop
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload6. 环境变量
6.1 常用环境变量
| 环境变量 | 说明 | 默认值 |
|---|---|---|
| RABBITMQ_NODE_PORT | AMQP 端口 | 5672 |
| RABBITMQ_DIST_PORT | 集群通信端口 | 25672 |
| RABBITMQ_NODENAME | 节点名称 | rabbit@hostname |
| RABBITMQ_MNESIA_BASE | 数据目录 | /var/lib/rabbitmq/mnesia |
| RABBITMQ_LOG_BASE | 日志目录 | /var/log/rabbitmq |
| RABBITMQ_CONFIG_FILE | 配置文件路径 | /etc/rabbitmq/rabbitmq |
6.2 配置环境变量
创建环境变量配置文件:
bash
sudo tee /etc/rabbitmq/rabbitmq-env.conf > /dev/null << 'EOF'
NODENAME=rabbit@localhost
NODE_IP_ADDRESS=0.0.0.0
NODE_PORT=5672
DIST_PORT=25672
MNESIA_BASE=/var/lib/rabbitmq/mnesia
LOG_BASE=/var/log/rabbitmq
EOF7. 常见问题与解决方案
7.1 Erlang 版本不兼容
问题表现:
{"init terminating in do_boot",{undef,[{rabbit,boot,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]},{init,start_it,1,[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}解决方案:
bash
sudo apt-get remove -y erlang*
sudo apt-get autoremove -y
curl -1sLf 'https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA' | sudo gpg --dearmor -o /usr/share/keyrings/com.rabbitmq.team.gpg
curl -1sLf 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq.E495BB49CC4BBE5B.key' | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg
curl -1sLf 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq.9F4587F226208342.key' | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg
sudo apt-get update
sudo apt-get install -y erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl7.2 端口被占用
问题表现:
Error: {listener_start_failure,5672,{already_started,<0.123.0>}}解决方案:
bash
sudo lsof -i :5672
sudo kill -9 <PID>或修改 RabbitMQ 端口:
bash
echo "NODE_PORT=5673" | sudo tee -a /etc/rabbitmq/rabbitmq-env.conf7.3 权限不足
问题表现:
Error: {error,{{badmatch,{error,eacces}},...}}解决方案:
bash
sudo chown -R rabbitmq:rabbitmq /var/lib/rabbitmq
sudo chown -R rabbitmq:rabbitmq /var/log/rabbitmq
sudo chown -R rabbitmq:rabbitmq /etc/rabbitmq
sudo chmod -R 755 /var/lib/rabbitmq
sudo chmod -R 755 /var/log/rabbitmq7.4 主机名解析失败
问题表现:
Error: {nodedown,'rabbit@hostname'}解决方案:
bash
hostnamectl set-hostname rabbit-node1
cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 rabbit-node17.5 内存不足
问题表现:
memory resource limit alarm set on node解决方案:
调整内存水位线:
bash
sudo tee -a /etc/rabbitmq/rabbitmq.conf > /dev/null << 'EOF'
total_memory_available_override_value = 2GB
vm_memory_high_watermark.absolute = 1.5GB
EOF8. 验证方法
8.1 检查系统环境
bash
cat /etc/os-release
uname -a
free -h
df -h8.2 检查网络连通性
bash
netstat -tuln | grep -E '5672|15672|25672|4369'
telnet localhost 56728.3 检查 Erlang 安装
bash
erl -version
erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().'8.4 检查防火墙状态
bash
sudo ufw status
sudo firewall-cmd --list-all
sudo iptables -L -n