Skip to content

安装前准备

1. 概述

在安装 RabbitMQ 之前,需要了解系统要求、依赖环境以及网络配置等前置条件。本章将详细介绍安装 RabbitMQ 所需的各项准备工作,帮助您顺利完成后续的安装部署。

2. 系统要求

2.1 操作系统支持

RabbitMQ 支持多种操作系统平台:

操作系统支持版本架构
LinuxUbuntu 18.04+, CentOS 7+, Debian 10+, RHEL 7+x86_64, ARM64
WindowsWindows Server 2012+, Windows 10+x86_64
macOSmacOS 10.15 (Catalina)+x86_64, ARM64 (M1/M2)

2.2 硬件要求

最低配置

资源最低要求推荐配置
CPU1 核2 核+
内存256 MB1 GB+
磁盘1 GB10 GB+ (SSD)

生产环境推荐配置

资源小型部署中型部署大型部署
CPU2 核4 核8 核+
内存4 GB8 GB16 GB+
磁盘50 GB SSD100 GB SSD500 GB+ SSD

2.3 Erlang 版本要求

RabbitMQ 基于 Erlang/OTP 平台构建,需要安装兼容的 Erlang 版本:

RabbitMQ 版本支持的 Erlang/OTP 版本推荐版本
3.13.x26.x, 27.x26.2.x
3.12.x25.x, 26.x26.x
3.11.x25.x, 26.x25.3.x
3.10.x24.x, 25.x25.x

⚠️ 注意:Erlang 版本必须与 RabbitMQ 版本兼容,否则会导致安装失败或运行异常。

3. 依赖环境

3.1 Linux 系统依赖

Ubuntu/Debian 系统

bash
sudo apt-get update
sudo apt-get install -y curl gnupg apt-transport-https

CentOS/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-nox

3.2 Windows 系统依赖

Windows 系统需要安装以下组件:

  1. Erlang/OTP:从官方网站下载安装
  2. Visual C++ Redistributable:部分版本需要
  3. PowerShell 5.1+:用于管理命令

3.3 macOS 系统依赖

bash
xcode-select --install
brew install wget curl

4. 网络配置

4.1 默认端口说明

RabbitMQ 使用多个端口进行通信:

端口协议用途说明
5672AMQP客户端连接默认 AMQP 端口
5671AMQPS加密客户端连接SSL/TLS 加密连接
15672HTTP管理界面Web 管理控制台
15671HTTPS加密管理界面SSL/TLS 加密管理界面
25672Erlang集群通信节点间通信端口
4369EPMDErlang 端口映射Erlang 端口映射守护进程
61613STOMPSTOMP 协议需要 stomp 插件
61614STOMPS加密 STOMPSSL/TLS 加密 STOMP
1883MQTTMQTT 协议需要 mqtt 插件
8883MQTTS加密 MQTTSSL/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 --reload

Linux (ufw)

bash
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp
sudo ufw allow 25672/tcp
sudo ufw reload

Linux (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 save

Windows 防火墙

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=25672

4.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-node3

5. 用户权限

5.1 创建 RabbitMQ 用户

Linux 系统

bash
sudo groupadd rabbitmq
sudo useradd -r -g rabbitmq -s /sbin/nologin rabbitmq

5.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/rabbitmq

5.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-reload

6. 环境变量

6.1 常用环境变量

环境变量说明默认值
RABBITMQ_NODE_PORTAMQP 端口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
EOF

7. 常见问题与解决方案

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-xmerl

7.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.conf

7.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/rabbitmq

7.4 主机名解析失败

问题表现

Error: {nodedown,'rabbit@hostname'}

解决方案

bash
hostnamectl set-hostname rabbit-node1

cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   rabbit-node1

7.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
EOF

8. 验证方法

8.1 检查系统环境

bash
cat /etc/os-release
uname -a
free -h
df -h

8.2 检查网络连通性

bash
netstat -tuln | grep -E '5672|15672|25672|4369'
telnet localhost 5672

8.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

9. 相关链接