视频加载失败

【Linux】RocketMQ 部署

1815 字
9 分钟
【Linux】RocketMQ 部署

系统要求#

系统要求
1、64位操作系统,推荐 Linux/Unix/macOS
2、64位 JDK 1.8+
3、官网文档

安装部署#

下载#

这里使用release免编译版本

Terminal window
# 解压
$ unzip rocketmq-all-5.1.0-source-release.zip
# 打开文件夹
$ cd rocketmq-all-5.1.0-source-release/

启动NameServer#

Terminal window
### 启动namesrv
$ nohup sh bin/mqnamesrv &
### 验证namesrv是否启动成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...

我们可以在namesrv.log 中看到 The Name Server boot success.., 表示NameServer 已成功启动。

启动Broker+Proxy#

NameServer成功启动后,我们启动Broker和Proxy,5.x 版本下我们建议使用 Local 模式部署,即 Broker 和 Proxy 同进程部署。5.x 版本也支持 Broker 和 Proxy 分离部署以实现更灵活的集群能力。

Terminal window
### 先启动broker
$ nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &
### 验证broker是否启动成功, 比如, broker的ip是192.168.1.2 然后名字是broker-a
$ tail -f ~/logs/rocketmqlogs/proxy.log
The broker[broker-a,192.169.1.2:10911] boot success...

我们可以在 proxy.log 中看到The broker[brokerName,ip:port] boot success..,这表明 broker 已成功启动。

工具测试消息收发#

Terminal window
$ export NAMESRV_ADDR=localhost:9876
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...

dashboard(非必须)#

安装#

安装 dashboard,需要编译源代码. 源码github 地址

下载之后,修改 application.yml 参数,我这里只修改了 Name Server 地址:

rocketmq:
config:
namesrvAddrs:
- 127.0.0.1:9876
- 47.xx.xx.xx:9876

然后执行 Maven 打包命令,打出 jar 包:

Terminal window
mvn clean package -Dmaven.test.skip=true

打好 jar 包后上传到服务器,执行下面命令启动:

Terminal window
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar

测试#

浏览器输入 http://127.0.0.1:8080/

Docker 部署#

创建namesrv服务#

拉取镜像#

Terminal window
docker pull apache/rocketmq

创建namesrv数据存储路径#

Terminal window
mkdir -p /docker/rocketmq/data/namesrv/logs /docker/rocketmq/data/namesrv/store

构建namesrv容器#

Terminal window
docker run -d \
--restart=always \
--name rmqnamesrv \
-p 9876:9876 \
-v /docker/rocketmq/data/namesrv/logs:/root/logs \
-v /docker/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
apache/rocketmq \
sh mqnamesrv

-restart=always| docker重启时候容器自动重启
-name rmqnamesrv | 把容器的名字设置为rmqnamesrv
-p 9876<9876>| 把容器内的端口9876挂载到宿主机9876上面
-v /docker/rocketmq/data/namesrv/logs:/root/logs | 把容器内的/root/logs日志目录挂载到宿主机的 /docker/rocketmq/data/namesrv/logs目录
-v /docker/rocketmq/data/namesrv/store:/root/store | 把容器内的/root/store数据存储目录挂载到宿主机的 /docker/rocketmq/data/namesrv目录 rmqnamesrv | 容器的名字
-e “MAX_POSSIBLE_HEAP=100000000” | 设置容器的最大堆内存为100000000
apache/rocketmq | 使用的镜像名称
sh mqnamesrv | 启动namesrv服务

创建broker节点#

创建broker数据存储路径#

Terminal window
mkdir -p /docker/rocketmq/data/broker/logs /docker/rocketmq/data/broker/store /docker/rocketmq/conf

创建配置文件#

注意修改 brokerIP1 = 172.18.88.54 中ip地址。

Terminal window
vi /docker/rocketmq/conf/broker.conf
Terminal window
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址
brokerIP1 = 172.18.88.54
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95

构建broker容器#

Terminal window
docker run -d \
--restart=always \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /docker/rocketmq/data/broker/logs:/root/logs \
-v /docker/rocketmq/data/broker/store:/root/store \
-v /docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
apache/rocketmq \
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

-name rmqbroker | 把容器的名字设置为rmqbroker
–link rmqnamesrv:namesrv | 和rmqnamesrv容器通信
-p 10911<10911> | 把容器的非vip通道端口挂载到宿主机
-p 10909<10909> | 把容器的vip通道端口挂载到宿主机
-e “NAMESRV_ADDR=namesrv<9876>” | 指定namesrv的地址为本机namesrv的ip地址<9876>
-e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker |指定broker服务的最大堆内存
rocketmqinc/rocketmq | 使用的镜像名称
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf | 指定配置文件启动broker节点

创建rockermq-console服务#

拉取镜像#

Terminal window
docker pull pangliang/rocketmq-console-ng

构建rockermq-console容器#

需要替换192.168.52.136 为实际ip地址

Terminal window
docker run -d \
--restart=always \
--name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.18.88.54:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 10010:8080 \
pangliang/rocketmq-console-ng

-restart=always| docker重启时候镜像自动重启
-name rmqadmin | 把容器的名字设置为rmqadmin
-e “JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.52.136<9876> | 设置namesrv服务的ip地址
-Dcom.rocketmq.sendMessageWithVIPChannel=false” | 不使用vip通道发送消息
–p 10010<8080> | 把容器内的端口8080挂载到宿主机上的9999端口

开放端口 9876/10911/10010#

创建系统服务#

1、 编写管理脚本命令,vi /etc/init.d/rocketmq#
#!/bin/sh
#
# rocketmq - this script starts and stops the rocketmq daemon
#
# chkconfig: - 85 15
ROCKETMQ_HOME=/home/sys_wh/soft/rocketmq-5.1.4
ROCKETMQ_BIN=${ROCKETMQ_HOME}/bin
ADDR=192.168.0.75:9876
LOG_DIR=${ROCKETMQ_HOME}/logs
start() {
if [ ! -d ${LOG_DIR} ];then
mkdir ${LOG_DIR}
fi
cd ${ROCKETMQ_HOME}
nohup sh bin/mqnamesrv > ${LOG_DIR}/mqnamesrv.log 2>&1 &
echo -n "The Name Server boot success..."
nohup sh bin/mqbroker -c ${ROCKETMQ_HOME}/conf/broker.conf >${LOG_DIR}/broker.log 2>&1 &
echo -n "The broker[%s, ${ADDR}] boot success..."
}
stop() {
cd ${ROCKETMQ_HOME}
sh bin/mqshutdown broker
sleep 1
sh bin/mqshutdown namesrv
}
restart() {
stop
sleep 5
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 2
esac

注意:

1.1 注: 复制这个脚本到Linux可能会丢失最上面的一部分,不知道为什么,通过xshell打开Linux,然后复制这些内容到文件中,会丢失一部分,自己复制过去以后检查清楚是否丢失一些内容。不然就算注册成一个服务也没法用。

1.2 ROCKETMQ_HOME的地址、利用nohup启动broker是指定启动的配置文件都要写对

2、将rocketmq服务添加为开机启动服务#
Terminal window
chmod +x /etc/init.d/rocketmq
chkconfig --add rocketmq

再运行chkconfig —list查看是否出现以下内容,出现则代表加入成功了

注:若出现下图0-6都是关,那代表还不能开机自启,再运行 chkconfig rocketmq on,然后再运行chkconfig —list以后2-5都是开以后才行。

Terminal window
[root@host-172-20-42-212 rocketmq-5.1.2]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
rocketmq 0:off 1:off 2:off 3:off 4:off 5:off 6:off
3、通过service命令来管理rocketmq#
Terminal window
# 启动
service rocketmq start
# 关闭
service rocketmq stop
# 重启
service rocketmq restart
Terminal window
-- 启动namesrv
nohup sh /home/sys_wh/soft/rocketmq-5.1.4/bin/mqnamesrv > /home/sys_wh/soft/rocketmq-5.1.4/logs/mqnamesrv.log 2>&1 &
-- 验证是否成功
tail -f /home/sys_wh/soft/rocketmq-5.1.4/logs/mqnamesrv.log
-- 启动broker
nohup sh /home/sys_wh/soft/rocketmq-5.1.4/bin/mqbroker -c /home/sys_wh/soft/rocketmq-5.1.4/conf/broker.conf >/home/sys_wh/soft/rocketmq-5.1.4/logs/broker.log 2>&1 &
-- 验证是否成功
tail -f /home/sys_wh/soft/rocketmq-5.1.4/logs/broker.log
--停止broker
sh /home/sys_wh/soft/rocketmq-5.1.4/bin/mqshutdown broker
--停止 namesrv
sh /home/sys_wh/soft/rocketmq-5.1.4/bin/mqshutdown namesrv
-- 启动管理平台
nohup java -jar rocketmq-dashboard-1.0.0.jar > dashboard.log 2>&1 &

4、设置密码

4.1 开启acl控制

conf/broker.conf中开启aclEnable=true

Terminal window
vim conf/broker.conf
# 最下面增加下面一行
aclEnable=true

4.2 配置账号密码

修改conf/plain_acl.yml

accounts:
# 管理员账号/密码
accessKey: catsicrocketmq
secretKey: Catsic1qsx@WDC

4.3 配置面板中的密码

在dashboard.jar包同级目录创建config文件夹,将项目底下的application.properties上传到config文件夹下,将注释放开,设置对应的账号密码。修改后重启

rocketmq.config.accessKey=catsicrocketmq
rocketmq.config.secretKey=Catsic1qsx@WDC

4.4 当前,已经为RocketMQ设置了密码,但是,还存在问题,操作面板没有设置密码,操作面板没有设置密码,在实际应用中,也是很危险的。下面讲解面板设置密码:

4.5 开启账号密码访问

# 修改application.properties
# 是否开启账号密码验证
rocketmq.config.loginRequired= true
# 账号密码配置文件为:users.properties,将users.properties上传到config目录,修改内容为
# ,1 为管理员,不加为普通用户
catstiMQ=catsti1qaz@WSX,1
# 修改默认用户配置文件路径
vim application.properties
# 将其修改为:
rocketmq.config.dataPath=./config
# 重启dashboard

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
【Linux】RocketMQ 部署
https://blog.huhaha.vip/posts/3cdc8223/
作者
小王的博客
发布于
2024-05-21
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
【Linux】Libgdiplus安装
Linux在CentOS 7上安装libgdiplus的过程,以解决ASP.NET Core MVC项目在处理图片时遇到的The type initializer for ‘Gdip‘ threw an exception错误。首先,通过安装yum-utils和epel-release来获取必要的工具和仓库支持。
2
【Linux】Nacos 问题
Linux本文《【Linux】Nacos 问题》详细记录了在Linux环境下遇到的Nacos服务连接问题及其解决方法。文章还介绍了如何配置Nacos服务的开机自启动,确保服务在系统重启后能够自动运行。这些内容对解决Nacos连接问题和提高系统稳定性非常有帮助。
3
【Linux】常用命令
Linux本文档《【Linux】常用命令》详细列出了Linux系统中常用的命令及其用法,涵盖了从基本命令、关机操作、文件和目录管理、文件搜索、文件系统的挂载与卸载、磁盘空间管理、文件权限设置、文件的特殊属性、打包和压缩文件、RPM包管理、YUM软件包升级器、DEB包管理、查看文件内容、文本处理、字符设置和文件格式转换等操作。
4
【Linux】manjaro 环境配置
Linux本文《Manjaro 环境配置》详细介绍了在Manjaro Linux系统中进行环境配置的各种方法。文章首先介绍了常用的Pacman包管理命令,包括软件的安装、更新、删除等操作。这些内容对于初学者和有一定经验的用户都非常有帮助,能够快速搭建一个高效、美观的Manjaro环境。
5
【Linux】nginx 离线安装
Linux本文《【Linux】nginx 离线安装》详细介绍了在Linux环境下离线安装Nginx的全过程。文章详细描述了Nginx的编译安装过程,并提供了启动Nginx的常用命令。最后,文章介绍了如何配置Nginx的开机自启动,确保服务在系统重启后能够自动运行。这些内容对离线环境下的Nginx安装和管理非常有帮助。
随机文章随机推荐

评论区

Profile Image of the Author
小王的博客
一个上了年纪的猿人.
分类
标签
最新动态
站点统计
文章
209
分类
15
标签
161
总字数
478,322
运行时长
0
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录