CentOS 部署 RocketMQ 详细指南
1. RocketMQ 5.3.0 简介
什么是 RocketMQ?
Apache RocketMQ 是一个分布式消息中间件,最初由阿里巴巴开发并开源。它基于发布-订阅(Pub-Sub)模式,具有高性能、低延迟和高可靠性等特点。RocketMQ 支持大规模消息流处理,常用于电商交易、金融支付等场景。
RocketMQ 的核心组件
RocketMQ 的核心组件包括:
- NameServer:负责管理 Broker 节点,提供路由信息,类似于服务发现。
- Broker:消息存储与转发的核心,处理客户端的消息生产和消费请求。
- Producer:消息的生产者,负责将消息发送到 Broker。
- Consumer:消息的消费者,从 Broker 获取并处理消息。
- RocketMQ Console:Web 管理界面,用于监控和管理 RocketMQ 集群。
版本 5.3.0 的新特性
RocketMQ 5.3.0 带来了一系列改进,包括但不限于:
- 性能优化:进一步优化了消息传输的效率,提升了集群的扩展能力。
- 配置增强:引入了更灵活的配置方式,方便在复杂场景下的部署。
- 安全性更新:加强了对权限控制和加密通信的支持。
2. 部署环境准备
在部署 RocketMQ 之前,确保你的服务器满足以下要求:
系统要求
- 操作系统:CentOS 7 或更高版本(本文以 CentOS 7 为例)
- 内核版本:推荐 3.10 及以上
- 磁盘空间:至少 10GB 可用空间
- 网络环境:确保服务器之间的网络连通性
硬件需求
- CPU:至少 2 核,推荐 4 核或以上
- 内存:至少 4GB,推荐 8GB 或以上
- 磁盘 IOPS:高并发场景建议使用 SSD 磁盘
软件依赖
- JDK 版本:RocketMQ 5.3.0 需要 JDK 8 或以上版本
- Maven:用于编译 RocketMQ 控制台(可选)
3. 安装和配置 JDK
RocketMQ 依赖于 Java 运行环境(JDK),建议使用 OpenJDK 8。
检查 JDK 版本
首先,检查系统中是否已经安装了 JDK:
java -version
如果输出结果中显示了 openjdk version "1.8.x"
或 jdk1.8.x
,说明已经安装了合适的 JDK 版本。
安装 OpenJDK 8
如果没有安装 JDK 或版本不合适,执行以下命令安装 OpenJDK 8:
sudo yum install -y java-1.8.0-openjdk-devel
配置环境变量
确认 JDK 安装路径,并设置 JAVA_HOME 环境变量:
# 查找 JDK 安装路径
sudo update-alternatives --config java
# 配置 JAVA_HOME
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> ~/.bash_profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
执行 java -version
验证是否正确配置。
4. 下载并安装 RocketMQ 5.3.0
获取 RocketMQ 5.3.0 安装包
使用以下命令下载 RocketMQ 5.3.0 安装包:
wget https://archive.apache.org/dist/rocketmq/5.3.0/rocketmq-all-5.3.0-bin-release.zip
解压与目录结构说明
解压安装包并重命名:
unzip rocketmq-all-5.3.0-bin-release.zip
mv rocketmq-all-5.3.0-bin-release /usr/local/rocketmq
RocketMQ 的目录结构如下:
bin/
:包含启动脚本和管理工具conf/
:包含配置文件lib/
:包含运行时依赖的库文件logs/
:存放 RocketMQ 的日志文件
5. 配置 RocketMQ
RocketMQ 的配置分为两个部分:NameServer 和 Broker。我们将详细讨论如何调整这些配置以满足特定需求。
NameServer 配置
NameServer 是一个无状态的组件,只需要启动就可以正常工作。默认配置足够满足大多数场景。
启动前,可以通过修改 conf/
目录下的配置文件自定义端口和日志路径等参数。
Broker 配置
Broker 是 RocketMQ 的核心组件,负责处理消息的存储和转发。它的配置更为复杂,默认配置如下:
# 启动命令中的配置文件路径
vi /usr/local/rocketmq/conf/broker.conf
配置文件中的主要参数包括:
brokerName
: Broker 的名称,集群中必须唯一。brokerId
: Broker 的 ID,0 表示主节点,其他为从节点。namesrvAddr
: NameServer 的地址列表。autoCreateTopicEnable
: 是否允许自动创建 Topic。
可以根据需求调整这些参数。
修改 JVM 内存参数
由于 RocketMQ 是一个高性能的消息中间件,合理的 JVM 内存配置至关重要。默认情况下,RocketMQ 的 NameServer 和 Broker 使用的 JVM 参数在启动脚本 bin/runserver.sh
和 bin/runbroker.sh
中设置。
如果你的服务器内存有限,建议调整这些参数。以 Broker 为例:
vi /usr/local/rocketmq/bin/runserver.sh
vi /usr/local/rocketmq/bin/runbroker.sh
# 将默认的 JVM 配置修改为适合当前机器环境的配置(我的机器内存较小,只有3G,故此处内存设置小点)
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
这里的 Xms
和 Xmx
控制了 JVM 的初始和最大堆内存大小,而 Xmn
则指定了年轻代的大小。你可以根据服务器的内存和实际使用场景进行调整。
6. 启动 NameServer 和 Broker
启动 NameServer
执行以下命令启动 NameServer:
nohup sh /usr/local/rocketmq/bin/mqnamesrv &
使用以下命令查看 NameServer 启动日志,确认启动成功:
tail -f ~/logs/rocketmqlogs/namesrv.log
日志中出现 The Name Server boot success...
即表示 NameServer 启动成功。
启动 Broker
在 NameServer 启动后,启动 Broker:
nohup sh /usr/local/rocketmq/bin/mqbroker -n localhost:9876 &
使用以下命令查看 Broker 启动日志:
tail -f ~/logs/rocketmqlogs/broker.log
当
日志中出现 The broker[broker-a, 172.17.0.2:10911] boot success...
时,说明 Broker 启动成功。
7. 安装并配置 RocketMQ 控制台
RocketMQ 控制台提供了图形化界面,方便监控和管理集群。
下载与安装 RocketMQ Console
git clone https://github.com/apache/rocketmq-dashboard.git
cd rocketmq-dashboard
mvn clean package -DskipTests
配置 NameServer 地址
编辑 src/main/resources/application.yml
文件:
rocketmq:
config:
namesrvAddr: "localhost:9876"
然后启动控制台:
java -jar target/rocketmq-dashboard-1.0.0-SNAPSHOT.jar
控制台功能简介
访问 http://localhost:8080
可以看到 RocketMQ 控制台的管理界面,提供对 Topic、Consumer、Broker 和消息流的全面监控。
8. 设置 RocketMQ 开机启动
为了让 RocketMQ 在系统启动时自动启动,我们需要将 NameServer 和 Broker 配置为 systemd 服务。
使用 systemd 创建服务
配置 NameServer 服务
创建并编辑 /etc/systemd/system/rocketmq-nameserver.service
:
[Unit]
Description=RocketMQ NameServer Service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/rocketmq/bin/mqnamesrv
ExecStop=/usr/local/rocketmq/bin/mqshutdown namesrv
User=root
Restart=on-failure
[Install]
WantedBy=multi-user.target
配置 Broker 服务
创建并编辑 /etc/systemd/system/rocketmq-broker.service
:
[Unit]
Description=RocketMQ Broker Service
After=network.target rocketmq-nameserver.service
[Service]
Type=forking
ExecStart=/usr/local/rocketmq/bin/mqbroker -n localhost:9876
ExecStop=/usr/local/rocketmq/bin/mqshutdown broker
User=root
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用并验证开机启动
启用并启动服务:
chmod +x /usr/local/rocketmq/bin/*
systemctl enable rocketmq-nameserver
systemctl enable rocketmq-broker
systemctl start rocketmq-nameserver
systemctl start rocketmq-broker
验证服务状态:
systemctl status rocketmq-nameserver
systemctl status rocketmq-broker
9. 常见问题与排查
启动失败问题
常见的启动失败问题包括端口冲突、内存不足和配置错误。通过检查日志可以快速定位问题。
日志分析
RocketMQ 日志包括 NameServer 和 Broker 的启动日志、运行日志等,位于 ~/logs/rocketmqlogs/
目录下。定期检查日志有助于发现潜在问题。
10. 进阶配置与优化
多 NameServer 和多 Broker 配置
在高可用场景下,建议配置多 NameServer 和多 Broker。通过集群化部署,可以增强系统的容灾能力。
性能优化建议
- 调整 JVM 内存和垃圾回收策略。
- 使用 SSD 提高磁盘 I/O 性能。
- 通过调优网络参数减少延迟。
分布式环境下的部署
在分布式环境中,NameServer 和 Broker 通常部署在不同的节点上,并通过内网进行通信。根据业务需求配置合理的负载均衡策略和消息存储策略。