Skip to content

RocketMQ 集群部署

TIP

本文档为手动部署RocketMQ 三节点集群操作手册,三台服务器ip分别为

192.168.204.128
192.168.204.129
192.168.204.130

1.设置hosts

shell
#修改hosts文件
vim /etc/hosts
192.168.204.128 rocketmq01
192.168.204.129 rocketmq02
192.168.204.130 rocketmq03

2.关闭防火墙(非必须)

shell
systemctl stop firewalld
systemctl disable firewalld

3.安装JDK运行环境

3.1快速安装

shell
yum install -y java-1.8.0-openjdk-devel

验证安装结果

shell
java -version

3.2手动安装

3.2.1下载OpenJDK

OpenJDK可避免商用问题,推荐下载Eclipse基金会OpenJDK

https://adoptium.net/zh-CN/temurin/releases?version=8&os=any&arch=any&package=jdk

3.2.2上传至服务器

创建安装包存储目录

shell
mkdir -p /data/install

上传文件至服务器[/data/install]目录下,文件路径如下所示,请根据实际情况修改

/data/install/OpenJDK8U-jdk_x64_linux_hotspot_8u472b08.tar.gz

3.2.3解压

shell
cd /data/install
tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u472b08.tar.gz
#解压后使用ll查看解压后文件夹名字,此处以jdk8u472-b08为示例

3.2.4移动解压目录

shell
mv /data/install/jdk8u472-b08 /usr/local/java

3.2.5配置环境变量

shell
vim /etc/profile

在文件内添加以下内容

shell
export JAVA_HOME=/usr/local/java
export PATH=$PATH:${JAVA_HOME}/bin

使环境变量生效

shell
source /etc/profile

验证

shell
java -version

4.安装RocketMQ

4.1下载安装包

下载地址:

https://archive.apache.org/dist/rocketmq/

4.2上传至服务器

上传文件至服务器[/data/install]目录下,文件路径如下所示,请根据实际情况修改

/data/install/rocketmq-all-5.3.4-bin-release.zip

4.3创建工作目录

shell
# 创建总的工作目录
mkdir -p /data/rocketmq-cluster

4.4解压并移动

shell
cd /data/install
unzip rocketmq-all-5.3.4-bin-release.zip
mv rocketmq-all-5.3.4-bin-release /data/rocketmq-cluster/rocketmq

4.5修改配置(根据硬件配置)

修改nameserver配置

shell
vim /data/rocketmq-cluster/rocketmq/bin/runserver.sh

找到以下内容JDK8部分进行修改堆栈内存配置

shell
choose_gc_options()
{
    # Example of JAVA_MAJOR_VERSION value : '1', '9', '10', '11', ...
    # '1' means releases before Java 9
    JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F '.' '{print $1}')
    if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "9" ] ; then
      # 【修改点 1:针对 JDK 8】
      # 原配置: -Xms4g -Xmx4g -Xmn2g
      # 新配置: -Xms512m -Xmx512m -Xmn256m
      JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
      JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
      JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
      JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
    else
      # 【修改点 2:针对 JDK 9+】
      # 原配置: -Xms4g -Xmx4g
      # 新配置: -Xms512m -Xmx512m
      JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
      JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
      JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M"
    fi
}

修改broker配置

shell
vim /data/rocketmq-cluster/rocketmq/bin/runbroker.sh

找到以下内容JDK8部分进行修改堆栈内存配置

shell
JAVA_OPT="${JAVA_OPT} -server -Xms1536m -Xmx1536m -Xmn768m"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=512m"

4.6生成配置

4.6.1 rocketmq01执行

shell
# 1. 创建目录 (如果已创建会忽略)
mkdir -p /data/rocketmq-cluster/broker01/conf
mkdir -p /data/rocketmq-cluster/broker02/conf
mkdir -p /data/rocketmq-cluster/broker03/conf

# 2. 生成 broker01 配置 (Master)
cat <<EOF > /data/rocketmq-cluster/broker01/conf/broker.conf
brokerClusterName = rocketmq-cluster
brokerName = broker01
listenPort = 20911
brokerIP1 = rocketmq01
namesrvAddr = rocketmq01:9876;rocketmq02:9876;rocketmq03:9876
storePathRootDir = /data/rocketmq-store/broker01/store
storePathCommitLog = /data/rocketmq-store/broker01/store/commitlog
enableDLegerCommitLog = true
dLegerGroup = broker01
dLegerSelfId = n0
dLegerPeers = n0-rocketmq01:20911;n1-rocketmq02:20911;n2-rocketmq03:20911
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
autoCreateTopicEnable = true
EOF

# 3. 生成 broker02 配置 (Slave)
cat <<EOF > /data/rocketmq-cluster/broker02/conf/broker.conf
brokerClusterName = rocketmq-cluster
brokerName = broker02
listenPort = 20915
brokerIP1 = rocketmq01
namesrvAddr = rocketmq01:9876;rocketmq02:9876;rocketmq03:9876
storePathRootDir = /data/rocketmq-store/broker02/store
storePathCommitLog = /data/rocketmq-store/broker02/store/commitlog
enableDLegerCommitLog = true
dLegerGroup = broker02
dLegerSelfId = n2
dLegerPeers = n0-rocketmq02:20915;n1-rocketmq03:20915;n2-rocketmq01:20915
deleteWhen = 04
fileReservedTime = 48
brokerRole = SLAVE
flushDiskType = ASYNC_FLUSH
autoCreateTopicEnable = true
EOF

# 4. 生成 broker03 配置 (Slave)
cat <<EOF > /data/rocketmq-cluster/broker03/conf/broker.conf
brokerClusterName = rocketmq-cluster
brokerName = broker03
listenPort = 20919
brokerIP1 = rocketmq01
namesrvAddr = rocketmq01:9876;rocketmq02:9876;rocketmq03:9876
storePathRootDir = /data/rocketmq-store/broker03/store
storePathCommitLog = /data/rocketmq-store/broker03/store/commitlog
enableDLegerCommitLog = true
dLegerGroup = broker03
dLegerSelfId = n1
dLegerPeers = n0-rocketmq03:20919;n1-rocketmq01:20919;n2-rocketmq02:20919
deleteWhen = 04
fileReservedTime = 48
brokerRole = SLAVE
flushDiskType = ASYNC_FLUSH
autoCreateTopicEnable = true
EOF