本文记录RocketMQ在centos7上的安装过程,没有技术的探讨,仅仅是安装记录,以作备忘。
首先看下我的安装环境:
[root@localhost /usr/local/soft_hzz]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.9.2009 (Core)
Release: 7.9.2009
Codename: Core
[root@localhost /usr/local/soft_hzz]# java -version
openjdk version "1.8.0_382"
OpenJDK Runtime Environment (build 1.8.0_382-b05)
OpenJDK 64-Bit Server VM (build 25.382-b05, mixed mode)
1、下载 RocketMQ 安装包
之后我们在 apache网站 上找到RocketMQ的安装包:
选择一个我们想要的版本,我这里选择4.9.7,之后把文件名粘到url后边,如下:

之后我们得到下载的url并使用 wget方式下载该zip压缩包,我下载到 /usr/local/soft_hzz/ 目录:
wget https://archive.apache.org/dist/rocketmq/4.9.7/rocketmq-all-4.9.7-bin-release.zip
下载需要点时间耐心等待会儿:
下载完成,我们使用以下命令将其解压到 /usr/local/soft_hzz/rocketmq/目录下:
unzip rocketmq-all-4.9.7-bin-release.zip -d /usr/local/soft_hzz/rocketmq/
2、启动 Name Server
nohup sh mqnamesrv &:表示后台启动sh mqnamesrv:表示终端启动,直接输出日志信息,按 ctrl+c 可直接关闭退出
之后我们进入目录:/usr/local/soft_hzz/rocketmq/rocketmq-all-4.9.7-bin-release ,执行后台启动命令:
nohup sh bin/mqnamesrv &
/usr/local/soft_hzz/rocketmq/rocketmq-all-4.9.7-bin-release/bin/mqnamesrv

3、启动 brocker
nohup sh bin/mqbroker -n 172.30.128.65:9876 &:表示后台启动brokersh bin/mqbroker -n 172.30.128.65:9876:属于终端启动,直接输出日志信息,按 ctrl+c 可直接关闭退出
使用后台启动命令nohup sh bin/mqbroker -n 172.30.128.65:9876 &看看:
我去,报错了,看日志是因为内存不够,那我就修改下吧!首先我查看下 mqbroker 这个脚本,脚本代码如下:
可以看到这里边本质上是用的 /bin/runbroker.sh来启动的,所以我们看下 /bin/runbroker.sh的内容:
上图可以看到 其中有一个指定堆最大和最小内容的配置,默认是8g 我去我机器一共才几个g 你上来就8g那肯定不够你用的呀,兄弟,把你搞小点吧,如下我把他最大和最小堆内存都搞成256mb:
之后,我重新执行后台启动命令:nohup sh bin/mqbroker -n 172.30.128.65:9876 & 哦豁?成功了! 截图如下:

同理,如果你的 name server在启动时也报内存不够方面的错,那么也相应的调小一点就行了。这些启动脚本(.sh)也都在bin目录下:
4、测试一下
使用我本地项目,rocketMQ 地址换成 172.30.128.65:9876,如下:
启动项目并发送消费消息:

2024.6.7:补充
为了方便查看,这里安装一下rocketmq的管理后台,并在此文补充。
由于控制台并不需要集群部署 且没有那么大的负载 所以这里选择简单点的 docker安装,如下:
吐槽一下 ,现在镜像源真的不好找啊,这里推荐一个: dockerproxy.cn/ 截止目前是可以用的 now = 20240928 ;
docker pull dockerproxy.cn/styletang/rocketmq-console-ng
# 注意 由于rocketmq broker和 nameserver是虚拟机安装 非docker安装,所以不能指定127.0.0.1 这样的话会在docker内部网络中找 rockermq的服务,自然是找不到 ,需要改成部署rockemq实例的真实ip
docker run -d --name rocketmq-console --restart always -p 8080:8080 -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.122.138:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" dockerproxy.cn/styletang/rocketmq-console-ng
最后可以访问成功啦!
20240928 补充:使用systemctl管理rocketmq进程。
创建systemed 文件并添加内容
首先创建 rocketmq-nameserver.service 文件:
sudo vim /etc/systemd/system/rocketmq-nameserver.service
添加以下内容:
[Unit]
Description=Apache RocketMQ NameServer
After=network.target
[Service]
ExecStart=/usr/local/rocketmq/bin/mqnamesrv
ExecStop=/bin/kill -s TERM $MAINPID
User=root
Restart=on-failure
LimitNOFILE=655350
[Install]
WantedBy=multi-user.target
再创建 rocketmq-broker.service 文件
sudo vim /etc/systemd/system/rocketmq-broker.service
添加内容:
[Unit]
Description=Apache RocketMQ Broker
After=network.target rocketmq-nameserver.service
[Service]
ExecStart=/usr/local/rocketmq/bin/mqbroker -n 127.0.0.1:9876
ExecStop=/bin/kill -s TERM $MAINPID
User=root
Restart=on-failure
LimitNOFILE=655350
[Install]
WantedBy=multi-user.target
重新加载 systemd 配置
在创建完这些服务文件后,需要重新加载 systemd 以识别新的服务:
sudo systemctl daemon-reload
启动并启用服务
- 启动 NameServer 服务:
sudo systemctl start rocketmq-nameserver
- 启动 Broker 服务:
sudo systemctl start rocketmq-broker
- 启用服务开机自启:
sudo systemctl enable rocketmq-nameserver
sudo systemctl enable rocketmq-broker
检查服务状态
可通过以下命令检查 NameServer 和 Broker 的服务状态:
- 检测状态
sudo systemctl status rocketmq-nameserver
sudo systemctl status rocketmq-broker
停止或重启服务,可以使用以下命令:
- 停止服务:
sudo systemctl stop rocketmq-nameserver
sudo systemctl stop rocketmq-broker
- 重启服务:
sudo systemctl restart rocketmq-nameserver
sudo systemctl restart rocketmq-broker
最终效果:
这样就可以使用systmectl来管理rocketmq相关进程 ,比较方便。
当然也可以使用journalcyl命令查看相关进程的日志:
sudo journalctl -u rocketmq-broker.service
sudo journalctl -u rocketmq-nameserver.service
根据错误信息:
python
复制代码
/home/hzz/rocketmq/rocketmq-all-4.9.7-bin-release/bin/mqbroker:行35: dirname: 未找到命令
/home/hzz/rocketmq/rocketmq-all-4.9.7-bin-release/bin/mqbroker:行45: sh: 未找到命令
看起来 systemd 启动时无法找到 dirname 和 sh 命令。这通常是由于以下几个原因:
PATH环境变量问题:systemd启动时的环境变量可能没有设置dirname和sh所在的路径。- 缺少必要的依赖:
dirname和sh命令通常存在于系统的coreutils和bash等软件包中。
解决步骤:
1. 检查并设置 PATH 环境变量
systemd 启动的服务可能无法访问到你在用户环境中通常能找到的命令。你可以在 systemd 配置文件中显式地设置 PATH 环境变量。
在 /etc/systemd/system/rocketmq-broker.service 文件的 [Service] 部分,添加一个 Environment 来设置 PATH:
ini
复制代码
[Service]
ExecStart=/home/hzz/rocketmq/rocketmq-all-4.9.7-bin-release/bin/mqbroker -c /home/hzz/rocketmq/rocketmq-all-4.9.7-bin-release/conf/broker.conf -n 192.168.122.137:9876
ExecStop=/bin/kill -s TERM $MAINPID
User=root
Restart=on-failure
LimitNOFILE=655350
# 设置 PATH 环境变量
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/hzz/rocketmq/rocketmq-all-4.9.7-bin-release/bin"
StandardOutput=file:/tmp/data/logs/rocketmq-broker.log
StandardError=file:/tmp/data/logs/rocketmq-broker-error.log
这里的 Environment="PATH=..." 将 PATH 环境变量显式地设置为包含常见的命令路径,并包括 rocketmq 的 bin 目录。
2. 确保安装了 dirname 和 sh 命令
dirname 和 sh 都是常见的 Unix 工具,通常由 coreutils 和 bash 提供。你可以检查这些工具是否已经安装。
-
检查
dirname命令:bash 复制代码 which dirname如果没有返回路径,说明
dirname可能没有安装。通常它是coreutils包的一部分。 -
检查
sh命令:bash 复制代码 which sh如果没有返回路径,说明
sh可能没有正确安装。大多数系统默认安装bash,它也提供了sh命令的符号链接。 -
如果缺少这些工具,安装
coreutils和bash:bash 复制代码 sudo yum install coreutils bash # 如果是 CentOS/RHEL 系统 sudo apt-get install coreutils bash # 如果是 Ubuntu/Debian 系统
3. 检查文件执行权限
确保 /home/hzz/rocketmq/rocketmq-all-4.9.7-bin-release/bin/mqbroker 文件具有正确的执行权限。执行以下命令:
bash
复制代码
sudo chmod +x /home/hzz/rocketmq/rocketmq-all-4.9.7-bin-release/bin/mqbroker
4. 查看 systemd 日志
如果 systemd 服务仍然无法启动,检查 systemd 的日志文件:
bash
复制代码
sudo journalctl -u rocketmq-broker.service -n 100
这会显示更多的错误信息,有助于进一步排查问题。
总结:
- 设置
PATH环境变量:确保systemd启动时能找到所需的命令(如dirname和sh)。 - 确保安装了依赖工具:检查
dirname和sh命令是否存在,必要时安装coreutils和bash。 - 检查文件权限:确保
mqbroker文件具有执行权限。
通过这些调整,你应该能够解决启动时无法找到命令的问题,并成功启动 RocketMQ Broker
20250906补充:部署RocketMQ集群(DLedger 高可用模式)
首先我有3个机器
192.168.1.130 (hadoop01) 192.168.1.131 (hadoop02) 192.168.1.132 (hadoop03)
我下载安装的 RocketMQ版本是:5.3.0
目录在: /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/
首先在130机器操作:
vim /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/conf/dledger/broker-n0.conf
# 集群名称
brokerClusterName = DefaultCluster
# Broker名称
brokerName = BrokerGroup
# Broker ID
brokerId = -1
# 监听端口
listenPort = 30911
# NameServer地址
namesrvAddr = hadoop01:9876;hadoop02:9876;hadoop03:9876
# 存储路径(根据您的安装路径调整)
storePathRootDir = /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/store/node00
storePathCommitLog = /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/store/node00/commitlog
# 启用DLedger
enableDLegerCommitLog = true
# DLedger组名
dLegerGroup = BrokerGroup
# DLedger节点配置
dLegerPeers = n0-hadoop01:40911;n1-hadoop02:40912;n2-hadoop03:40913
# 当前节点ID
dLegerSelfId = n0
# 发送线程数
sendMessageThreadPoolNums = 16
# Broker IP(使用内网IP)
brokerIP1 = 192.168.1.130
scp到131 和132上
scp -r /home/hzz/rocketmq/ root@hadoop01:/home/hzz/ scp -r /home/hzz/rocketmq/ root@hadoop02:/home/hzz/
再在 131机器操作:
vim /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/conf/dledger/broker-n1.conf
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# brokerClusterName = RaftCluster
# brokerName=RaftNode00
# listenPort=30921
# namesrvAddr=127.0.0.1:9876
# storePathRootDir=/tmp/rmqstore/node01
# storePathCommitLog=/tmp/rmqstore/node01/commitlog
# enableDLegerCommitLog=true
# dLegerGroup=RaftNode00
# dLegerPeers=n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
# ## must be unique
# dLegerSelfId=n1
# sendMessageThreadPoolNums=16
brokerClusterName = DefaultCluster
brokerName = BrokerGroup
brokerId = -1
listenPort = 30912
namesrvAddr = hadoop01:9876;hadoop02:9876;hadoop03:9876
storePathRootDir = /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/store/node01
storePathCommitLog = /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/store/node01/commitlog
enableDLegerCommitLog = true
dLegerGroup = BrokerGroup
dLegerPeers = n0-hadoop01:40911;n1-hadoop02:40912;n2-hadoop03:40913
dLegerSelfId = n1
sendMessageThreadPoolNums = 16
brokerIP1 = 192.168.1.131
再在 132机器操作:
vim /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/conf/dledger/broker-n2.conf
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# brokerClusterName = RaftCluster
# brokerName=RaftNode00
# listenPort=30931
# namesrvAddr=127.0.0.1:9876
# storePathRootDir=/tmp/rmqstore/node02
# storePathCommitLog=/tmp/rmqstore/node02/commitlog
# enableDLegerCommitLog=true
# dLegerGroup=RaftNode00
# dLegerPeers=n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
# ## must be unique
# dLegerSelfId=n2
# sendMessageThreadPoolNums=16
brokerClusterName = DefaultCluster
brokerName = BrokerGroup
brokerId = -1
listenPort = 30913
namesrvAddr = hadoop01:9876;hadoop02:9876;hadoop03:9876
storePathRootDir = /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/store/node01
storePathCommitLog = /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/store/node01/commitlog
enableDLegerCommitLog = true
dLegerGroup = BrokerGroup
dLegerPeers = n0-hadoop01:40911;n1-hadoop02:40912;n2-hadoop03:40913
dLegerSelfId = n2
sendMessageThreadPoolNums = 16
brokerIP1 = 192.168.1.132
autoCreateTopicEnable=true
之后在三台机器分别配置systemctl
vim /etc/systemd/system/rocketmq-broker130.service
[Unit]
Description=Apache RocketMQ Broker (Node 130)
After=network.target rocketmq-nameserver.service
Requires=rocketmq-nameserver.service
[Service]
Type=simple
ExecStart=/home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/bin/mqbroker -c /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/conf/dledger/broker-n0.conf
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=655350
# JVM内存参数可根据实际情况调整
Environment="JAVA_OPTS=-Xms4g -Xmx4g -Xmn2g"
WorkingDirectory=/home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release
[Install]
WantedBy=multi-user.target
vim /etc/systemd/system/rocketmq-broker131.service
[Unit]
Description=Apache RocketMQ Broker (Node 131)
After=network.target rocketmq-nameserver.service
Requires=rocketmq-nameserver.service
[Service]
Type=simple
ExecStart=/home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/bin/mqbroker -c /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/conf/dledger/broker-n1.conf
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=655350
# JVM内存参数可根据实际情况调整
Environment="JAVA_OPTS=-Xms4g -Xmx4g -Xmn2g"
WorkingDirectory=/home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release
[Install]
WantedBy=multi-user.target
vim /etc/systemd/system/rocketmq-broker132.service
[Unit]
Description=Apache RocketMQ Broker (Node 132)
After=network.target rocketmq-nameserver.service
Requires=rocketmq-nameserver.service
[Service]
Type=simple
ExecStart=/home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/bin/mqbroker -c /home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/conf/dledger/broker-n2.conf
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=655350
# JVM内存参数可根据实际情况调整
Environment="JAVA_OPTS=-Xms4g -Xmx4g -Xmn2g"
WorkingDirectory=/home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release
[Install]
WantedBy=multi-user.target
并在三台分别执行:
vim /etc/systemd/system/rocketmq-nameserver.service
[Unit]
Description=Apache RocketMQ NameServer
After=network.target
[Service]
ExecStart=/home/hzz/rocketmq/rocketmq-all-5.3.0-bin-release/bin/mqnamesrv
ExecStop=/bin/kill -s TERM $MAINPID
User=root
Restart=on-failure
LimitNOFILE=655350
[Install]
WantedBy=multi-user.target
systemctl启动集群
在三台机器分别执行:(注意先启动 rocketmq-nameserver 在启动broker)
systemctl enable rocketmq-nameserver
systemctl start rocketmq-nameserver
systemctl enable rocketmq-broker130
systemctl enable rocketmq-broker131
systemctl enable rocketmq-broker132
systemctl start rocketmq-broker130
systemctl start rocketmq-broker131
systemctl start rocketmq-broker132
docker启动RocketMQ控制台
docker run -d --name rocketmq-dashboard-cluster --restart always -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.1.130:9876;192.168.1.131:9876;192.168.1.132:9876" -p 8076:8080 -t apacherocketmq/rocketmq-dashboard:latest
