> 技术文档 > RocketMQ 5.3.0 ARM64 架构安装部署指南

RocketMQ 5.3.0 ARM64 架构安装部署指南


RocketMQ 5.3.0 ARM64 架构安装部署指南

目录

  • 背景说明
  • 环境要求
  • 1. 系统环境准备
  • 2. Java 环境配置
  • 3. Maven 安装配置
  • 4. RocketMQ 源码编译
  • 5. Docker 镜像制作
  • 6. 部署配置
  • 7. ARM64 架构验证测试
  • 8. 常见问题解决

背景说明

  • 安全漏洞: CVE-2024-23321(2024年7月22日公布)
  • 升级要求: 将 RocketMQ 升级至 5.3.0 版本
  • 特殊需求: 由于官方未提供 ARM64 架构的 Docker 镜像,需要自行编译打包
  • 构建方式: 支持在 x86_64 系统上跨平台构建 ARM64 镜像

环境要求

目标运行环境

  • 操作系统: 麒麟KYLINOS (ARM64/aarch64)
  • CPU 架构: ARM64
  • 内存: 建议 8GB 以上
  • 磁盘空间: 至少 20GB 可用空间
  • Docker: 20.10.0 或更高版本

构建环境(可以是不同架构)

  • 操作系统: Ubuntu/CentOS/
  • CPU 架构: x86_64 或 ARM64
  • Docker: 20.10.0 或更高版本(需支持 buildx)
  • 网络: 能够访问 Maven 中央仓库和 Docker Hub

1. 系统环境准备

1.1 更新系统包

# 更新软件包列表sudo apt update# 升级已安装的软件包sudo apt upgrade -y# 安装必要的工具sudo apt install -y wget curl unzip git build-essential

1.2 检查系统架构

# 检查系统架构,应该显示 aarch64 或 arm64uname -m# 查看详细的系统信息lscpu | grep Architecture# 查看系统版本lsb_release -a

2. Java 环境配置

2.1 安装 OpenJDK 8

# 安装 OpenJDK 8sudo apt install -y openjdk-8-jdk# 安装完成后验证java -versionjavac -version

2.2 配置 JAVA_HOME 环境变量

# 查找 Java 安装路径sudo update-alternatives --config java# 编辑环境变量文件sudo nano /etc/environment

在文件末尾添加:

JAVA_HOME=\"/usr/lib/jvm/java-8-openjdk-arm64\"# 编辑 profile 文件sudo nano /etc/profile

在文件末尾添加:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64export PATH=$PATH:$JAVA_HOME/bin

2.3 使环境变量生效

# 重新加载环境变量source /etc/environmentsource /etc/profile# 验证环境变量echo $JAVA_HOMEjava -version

3. Maven 安装配置

3.1 安装 Maven

# 安装 Mavensudo apt install -y maven# 验证安装mvn -version

3.2 配置 Maven(可选)

创建 Maven 配置文件以使用国内镜像(提高下载速度):

# 创建 .m2 目录mkdir -p ~/.m2# 创建 settings.xmlnano ~/.m2/settings.xml

添加以下内容:

<settings xmlns=\"http://maven.apache.org/SETTINGS/1.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd\"> <mirrors> <mirror> <id>aliyun</id> <mirrorOf>central</mirrorOf> <name>Aliyun Maven Mirror</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors></settings>

4. RocketMQ 源码编译

注意:源码编译可以在任何架构的系统上进行,编译产物是 Java 字节码,可以跨平台运行。

4.1 下载源码

# 创建工作目录mkdir -p ~/rocketmq-buildcd ~/rocketmq-build# 下载 RocketMQ 5.3.0 源码wget https://archive.apache.org/dist/rocketmq/5.3.0/rocketmq-all-5.3.0-source-release.zip# 如果 wget 下载失败,可以使用 curl# curl -O https://archive.apache.org/dist/rocketmq/5.3.0/rocketmq-all-5.3.0-source-release.zip# 解压源码unzip rocketmq-all-5.3.0-source-release.zipcd rocketmq-all-5.3.0-source-release

4.2 编译源码

# 设置 Maven 内存参数(防止编译时内存不足)export MAVEN_OPTS=\"-Xmx3072m\"# 开始编译(耗时较长,约30-60分钟)mvn -Prelease-all -DskipTests -Dspotbugs.skip=true clean install -U# 查看编译结果ls -la distribution/target/rocketmq-5.3.0/rocketmq-5.3.0/

4.3 验证编译结果

# 进入编译产物目录cd distribution/target/rocketmq-5.3.0/rocketmq-5.3.0# 查看目录结构tree -L 2# 检查二进制文件file bin/mqnamesrvfile bin/mqbroker

5. Docker 镜像制作

5.1 安装 Docker(如未安装)

在 Ubuntu 20.04.5 LTS 系统上安装 Docker CE 26.1.4 完整指南-CSDN博客

5.1.1 配置 Docker 多平台构建支持(跨平台构建必需)

如果你的构建系统不是 ARM64 架构,但需要构建 ARM64 镜像,需要配置 Docker 的多平台构建支持:

# 安装 QEMU 用户态模拟器sudo apt-get updatesudo apt-get install -y qemu-user-static# 检查是否支持多平台docker run --rm --privileged multiarch/qemu-user-static --reset -p yes# 创建并使用新的 buildx 构建器docker buildx create --name multiarch --driver docker-container --usedocker buildx inspect --bootstrap# 查看支持的平台docker buildx ls

5.2 拉取基础镜像

方式一:自动拉取对应架构的镜像(推荐)
# Docker 会自动根据你的系统架构拉取对应的镜像docker pull dyrnq/rocketmq:4.9.7# 验证镜像架构docker inspect dyrnq/rocketmq:4.9.7 | grep Architecture
方式二:明确指定 ARM64 架构(跨平台构建时使用)
# 明确拉取 ARM64 版本docker pull --platform linux/arm64 dyrnq/rocketmq:4.9.7# 查看镜像的多架构支持情况docker manifest inspect dyrnq/rocketmq:4.9.7# 验证拉取的镜像架构docker inspect dyrnq/rocketmq:4.9.7 | grep -A 5 Architecture

5.3 创建新镜像

方式一:在 ARM64 系统上直接构建
# 启动临时容器docker run -it --name rocketmq-upgrade dyrnq/rocketmq:4.9.7 /bin/bash
方式二:在非 ARM64 系统上跨平台构建
# 使用 --platform 参数指定 ARM64 平台docker run -it --platform linux/arm64 --name rocketmq-upgrade dyrnq/rocketmq:4.9.7 /bin/bash

在另一个终端中执行:

# 复制编译好的 RocketMQ 到容器docker cp ~/rocketmq-build/rocketmq-all-5.3.0-source-release/distribution/target/rocketmq-5.3.0/rocketmq-5.3.0 rocketmq-upgrade:/home/rocketmq/# 查看复制结果docker exec rocketmq-upgrade ls -la /home/rocketmq/

回到容器终端,执行:

# 在容器内操作cd /home/rocketmq# 备份原有文件(可选)mkdir -p /tmp/backupcp -r /opt/rocketmq/* /tmp/backup/# 清理旧版本rm -rf /opt/rocketmq/*# 复制新版本cp -r /home/rocketmq/rocketmq-5.3.0/* /opt/rocketmq/# 修改权限chown -R rocketmq:rocketmq /opt/rocketmq/# 验证版本/opt/rocketmq/bin/mqnamesrv -v# 退出容器exit

5.4 提交新镜像

# 提交容器为新镜像docker commit rocketmq-upgrade rocketmq:5.3.0-arm64# 查看新镜像docker images | grep rocketmq# 清理临时容器docker rm rocketmq-upgrade

5.5 创建优化版 Dockerfile(可选)

创建 Dockerfile

FROM rocketmq:5.3.0-arm64# 更新版本号ENV ROCKETMQ_VERSION=5.3.0ENTRYPOINT [\"/docker-entrypoint.sh\"]# 如果需要健康检查,添加这部分HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \\ CMD sh -c \'cd /opt/rocketmq && sh bin/mqadmin clusterList -n localhost:9876\' || exit 1

构建优化版镜像:

方式一:在 ARM64 系统上构建
docker build -t rocketmq:5.3.0-arm64-optimized .
方式二:跨平台构建(推荐)
# 使用 buildx 构建多平台镜像docker buildx build --platform linux/arm64 -t rocketmq:5.3.0-arm64-optimized .# 如果需要同时支持多个平台docker buildx build --platform linux/arm64,linux/amd64 -t rocketmq:5.3.0-multiarch .# 构建并推送到仓库(需要先 docker login)docker buildx build --platform linux/arm64 -t your-registry/rocketmq:5.3.0-arm64 --push .

6. 部署配置

6.1 创建配置文件

创建 broker.conf

# 创建配置目录mkdir -p ~/rocketmq-deploycd ~/rocketmq-deploy# 创建 broker 配置文件cat > broker.conf << EOFbrokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0deleteWhen = 04fileReservedTime = 48brokerRole = ASYNC_MASTERflushDiskType = ASYNC_FLUSHbrokerIP1 = 0.0.0.0listenPort = 10911# 开启自动创建主题autoCreateTopicEnable = true# 存储路径storePathRootDir = /home/rocketmq/storestorePathCommitLog = /home/rocketmq/store/commitlogstorePathConsumeQueue = /home/rocketmq/store/consumequeuestorePathIndex = /home/rocketmq/store/indexstoreCheckpoint = /home/rocketmq/store/checkpointabortFile = /home/rocketmq/store/abortEOF

6.2 创建 docker-compose.yml

version: \'3.8\'services: namesrv: image: rocketmq:5.3.0-arm64-optimized container_name: rocketmq-namesrv restart: always mem_limit: \"4g\" cpus: \"2\" volumes: - ./namesrv-logs:/home/rocketmq/logs - ./namesrv-store:/home/rocketmq/store networks: - rocketmq ports: - \"9876:9876\" environment: - TZ=Asia/Shanghai - MAX_POSSIBLE_HEAP=2048m - JAVA_OPT_EXT=-server -Xms512m -Xmx2048m -Xmn1024m command: sh mqnamesrv healthcheck: test: [\"CMD\", \"sh\", \"-c\", \"netstat -tnl | grep 9876\"] interval: 30s timeout: 10s retries: 3 broker: image: rocketmq:5.3.0-arm64-optimized container_name: rocketmq-broker depends_on: namesrv: condition: service_healthy restart: always mem_limit: \"8g\" cpus: \"4\" volumes: - ./broker.conf:/opt/rocketmq/conf/broker.conf:ro - ./broker-logs:/home/rocketmq/logs - ./broker-store:/home/rocketmq/store networks: - rocketmq ports: - \"10909:10909\" - \"10911:10911\" - \"10912:10912\" environment: - TZ=Asia/Shanghai - NAMESRV_ADDR=namesrv:9876 - MAX_POSSIBLE_HEAP=4096m - JAVA_OPT_EXT=-server -Xms1024m -Xmx4096m -Xmn2048m command: sh mqbroker -c /opt/rocketmq/conf/broker.conf console: image: candice0630/rocketmq-console-ng:2.0 container_name: rocketmq-console depends_on: - namesrv - broker restart: always networks: - rocketmq ports: - \"19876:8080\" environment: - JAVA_OPTS=-Drocketmq.config.namesrvAddr=namesrv:9876 -Drocketmq.config.isVIPChannel=false - TZ=Asia/Shanghainetworks: rocketmq: driver: bridge ipam: config: - subnet: 172.20.0.0/16

6.3 启动服务

# 创建必要的目录mkdir -p {namesrv-logs,namesrv-store,broker-logs,broker-store}# 设置目录权限chmod -R 777 {namesrv-logs,namesrv-store,broker-logs,broker-store}# 启动服务docker-compose up -d# 查看服务状态docker-compose ps# 查看日志docker-compose logs -f

7. ARM64 架构验证测试

7.1 验证镜像架构

# 检查镜像架构信息docker inspect rocketmq:5.3.0-arm64-optimized | jq \'.[0].Architecture\'# 检查镜像详细信息docker run --rm rocketmq:5.3.0-arm64-optimized uname -m# 检查 Java 架构docker run --rm rocketmq:5.3.0-arm64-optimized java -version 2>&1 | grep -i arm

7.2 功能测试

7.2.1 测试 NameServer
# 检查 NameServer 端口netstat -tlnp | grep 9876# 测试 NameServer 连接telnet localhost 9876# 查看 NameServer 日志docker logs rocketmq-namesrv | tail -20
7.2.2 测试 Broker
# 检查 Broker 状态docker exec rocketmq-broker sh -c \"cd /opt/rocketmq && sh bin/mqadmin clusterList -n localhost:9876\"# 查看 Broker 配置docker exec rocketmq-broker sh -c \"cd /opt/rocketmq && sh bin/mqadmin getBrokerConfig -n localhost:9876 -b localhost:10911\"
7.2.3 创建测试主题
# 创建测试主题docker exec rocketmq-broker sh -c \"cd /opt/rocketmq && sh bin/mqadmin updateTopic -n localhost:9876 -t TestTopic -c DefaultCluster\"# 查看主题列表docker exec rocketmq-broker sh -c \"cd /opt/rocketmq && sh bin/mqadmin topicList -n localhost:9876\"

7.3 生产者消费者测试

7.3.1 创建测试脚本

创建 producer_test.sh

#!/bin/bashdocker exec rocketmq-broker sh -c \"cd /opt/rocketmq && \\export NAMESRV_ADDR=localhost:9876 && \\sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer\"

创建 consumer_test.sh

#!/bin/bashdocker exec rocketmq-broker sh -c \"cd /opt/rocketmq && \\export NAMESRV_ADDR=localhost:9876 && \\sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer\"# 赋予执行权限chmod +x producer_test.sh consumer_test.sh# 运行测试./producer_test.sh./consumer_test.sh

7.4 Web 控制台验证

  1. 打开浏览器访问:http://服务器IP:19876
  2. 检查集群状态
  3. 查看主题列表
  4. 监控消息生产和消费

8. 常见问题解决

8.1 跨平台构建问题

问题1:在 x86_64 系统上构建 ARM64 镜像失败

# 确保已安装 QEMUdocker run --rm --privileged multiarch/qemu-user-static --reset -p yes# 使用 buildx 构建docker buildx create --usedocker buildx build --platform linux/arm64 -t your-image:tag .

问题2:容器内执行命令很慢

这是因为在非 ARM 系统上运行 ARM 容器时使用了 QEMU 模拟,性能会有所下降。解决方案:

  • 在真实的 ARM64 硬件上构建
  • 或者接受性能损失,仅用于构建镜像

问题3:manifest 未找到

# 启用 Docker 实验性功能echo \'{\"experimental\": true}\' | sudo tee /etc/docker/daemon.jsonsudo systemctl restart docker

8.2 编译问题

问题1:Maven 内存不足

# 增加 Maven 内存export MAVEN_OPTS=\"-Xmx4096m -XX:MaxPermSize=512m\"

问题2:下载依赖超时

  • 使用国内 Maven 镜像
  • 检查网络连接
  • 多次重试编译命令

8.3 Docker 问题

问题1:权限问题

# 修复权限sudo chown -R $(id -u):$(id -g) ./broker-store ./namesrv-store

问题2:端口占用

# 检查端口占用sudo netstat -tlnp | grep -E \"9876|10909|10911|19876\"

8.4 RocketMQ 运行问题

问题1:Broker 无法注册到 NameServer

  • 检查网络连通性
  • 确认 NAMESRV_ADDR 配置正确
  • 查看防火墙设置

问题2:消息发送失败

  • 检查 Topic 是否创建
  • 验证 Broker 状态
  • 查看日志文件

8.5 ARM64 特定问题

问题1:二进制不兼容

  • 确保所有组件都是 ARM64 架构
  • 重新编译源码

问题2:性能问题

  • 调整 JVM 参数
  • 优化系统内核参数

附录

A. 系统优化建议

# 编辑 /etc/sysctl.confsudo nano /etc/sysctl.conf# 添加以下内容vm.max_map_count = 655360fs.file-max = 655360net.ipv4.tcp_keepalive_time = 600net.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 10# 应用配置sudo sysctl -p

C. 备份脚本

创建 backup.sh

#!/bin/bashBACKUP_DIR=\"/backup/rocketmq/$(date +%Y%m%d_%H%M%S)\"mkdir -p $BACKUP_DIR# 备份配置cp -r *.conf $BACKUP_DIR/cp docker-compose.yml $BACKUP_DIR/# 备份数据docker-compose stoptar -czf $BACKUP_DIR/broker-store.tar.gz ./broker-storetar -czf $BACKUP_DIR/namesrv-store.tar.gz ./namesrv-storedocker-compose startecho \"备份完成: $BACKUP_DIR\"