Centos9 安装 RocketMQ5
环境:mac M4
Linux:虚拟机 centos9
1. 下载
官网下载地址链接
rocketmq-dashboard可视化界面下载链接
官网文档链接
2. 修改配置
修改两个.sh配置文件的目的仅仅是为了运行时占用的内存少一些,如果电脑配置够高,不修改也行
- 下载rocketmq-all-5.3.2-bin-release.zip后拷贝到centos中解压
unzip rocketmq-all-5.3.2-bin-release.zip
- 修改解压后/bin目录中的两个文件,将内存改小,目的是为了在虚拟机中好运行
runbroker.sh
- 将原来的
-Xms8g -Xmx8g
改成-Xms2g -Xmx2g
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g"
runserver.sh
- 代码中有个判断语句
if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "9" ] ; then
一个if判断,如果java版本小于9就会走上面的配置,大于9就会走else中的配置。 - 将原来的
-Xms4g -Xmx4g
改成-Xms2g -Xmx2g
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
- 修改/conf中的broker.conf配置文件
在最后追加3行代码
brokerClusterName = DefaultCluster
...
flushDiskType = ASYNC_FLUSHnamesrvAddr = 192.168.89.129:9876
autoCreateTopicEnable = true
brokerIP1 = 192.168.89.129
- 这个配置文件是给
mqbroker
启动时的配置 namesrvAddr = 192.168.89.129:9876
:当 Broker 启动时,会依据这个配置的地址和端口,主动连接 NameServer 并注册自身的信息autoCreateTopicEnable = true
:当生产者尝试向一个不存在的主题发送消息时,Broker 会自动创建这个主题,生产环境中,通常不建议开启此功能brokerIP1 = 192.168.89.129
:指定 Broker 对外暴露的 IP 地址。Broker 在向 NameServer 注册自身信息时,会把 brokerIP1 配置的 IP 地址一并注册上去。NameServer 再把这个 IP 地址提供给生产者和消费者,从而保证它们能够正确地连接到 Broker。- 在生产环境NameServer和Broker可能不在同一个服务器中,配置地址时需配置服务器提供的地址。
- 在虚拟机中也不要配置127.0.0.1,rocketmq-dashboard有时会找不到,不知道是哪儿的bug
3. 启动
修改profile
vim /etc/profile
将rocketmq加入path中,启动和停止的时候不用使用路径了,省事
# 配置rocketmq
export ROCKETMQ_HOME=/root/rocketmq
export PATH=$ROCKETMQ_HOME/bin:$PATH
# 启动NameServer
[root@centoshost rocketmq]# mqnamesrv
The Name Server boot success. serializeType=JSON, address 0.0.0.0:9876
# 启动Bocker
[root@centoshost ~]# mqbroker -n 192.168.89.129:9876
# 中间有很多日志,可拷贝给ai看看
The broker[centoshost, 192.168.89.129:10911] boot success. serializeType=JSON and name server is 192.168.89.129:9876
mqbroker -n 192.168.89.129:9876
:192.168.89.129:9876是NameServer的地址,我不配置这个mqbroker
可以启动,但是rocketmq-dashboard看不到mqbroker,感觉是没有自动取加载conf配置文件
4. 安装rocketmq-dashboard
这里没有使用docker镜像,直接运行的jar包
修改yml文件
rocketmq:config:namesrvAddrs:- 192.168.89.129:9876
- 在idea中运行测试一下,已经可以看到NameServer和Broker
- 将jar包拷贝到虚拟机中运行,也可以在本地运行
# 启动 rocketmq-dashboard
[root@centoshost rocketmq-dashboard]# java -jar rocketmq-dashboard-2.0.1-SNAPSHOT.jar
页面显示
5. Docker 部署 RocketMQ5
如果运行环境是mac主机、虚拟机安装centos,想使用docker镜像安装rocketmq行不通,因为他们的镜像是arm64的,不能用,需要重新编译,包括:rocketmq-dashboard、mqnamesrv、broker3个镜像都需要重新制作镜像,制作镜像的方法链接
参考文章[链接]
(https://blog.csdn.net/weixin_44606481/article/details/129758920)
# 拉取rocketmq
docker pull apache/rocketmq:5.3.2
部署nameServer
# 创建日志目录,脚本目录
mkdir /root/rocketmq/nameserver/logs -p
mkdir /root/rocketmq/nameserver/bin -p
# 修改文件权限
chmod 777 -R /root/rocketmq/nameserver/*
# 随便启动mqnamesrv,拷贝完文件就删除
docker run -d \
--privileged=true \
--name rmqnamesrv \
apache/rocketmq:5.3.2 sh mqnamesrv
# 复制容器内启动脚本到挂载目录
docker cp rmqnamesrv:/home/rocketmq/rocketmq-5.3.2/bin/runserver.sh /root/rocketmq/nameserver/bin/runserver.sh
# 删除容器
docker rm -f rmqnamesrv
# 启动nameServer
docker run -d \
--privileged=true \
--restart=always \
--name rmqnamesrv \
-p 9876:9876 \
-v /root/rocketmq/nameserver/logs:/home/rocketmq/logs \
-v /root/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.3.2/bin/runserver.sh \
-e "MAX_HEAP_SIZE=256M" \
-e "HEAP_NEWSIZE=128M" \
apache/rocketmq:5.3.2 sh mqnamesrv
部署Broker
# 创建需要的挂载目录
mkdir /root/rocketmq/broker/logs -p \
mkdir /root/rocketmq/broker/data -p \
mkdir /root/rocketmq/broker/conf -p \
mkdir /root/rocketmq/broker/bin -p
# 设置权限
chmod 777 -R /root/rocketmq/broker/*
# 创建Broker的配置文件
vi /root/rocketmq/broker/conf/broker.conf
# broker.conf# 集群名称
brokerClusterName = DefaultCluster
# 节点名称
brokerName = broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0
brokerId = 0
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 48
# Broker角色
brokerRole = ASYNC_MASTER
# 刷盘方式
flushDiskType = ASYNC_FLUSH# nameServer 地址多个用;隔开 默认值null
# 例:127.0.0.1:6666;127.0.0.1:8888
namesrvAddr = 192.168.3.234:9876
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# Broker服务地址,内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1 = 192.168.3.234
# 启动Broker,用于拷贝文件
docker run -d \
--name rmqbroker \
--privileged=true \
apache/rocketmq:5.3.2 \
sh mqbroker
# 拷贝Broker里面的文件
docker cp rmqbroker:/home/rocketmq/rocketmq-5.3.2/bin/runbroker.sh /root/rocketmq/broker/bin/runbroker.sh
# 删除Broker容器
docker rm -f rmqbroker
# 启动Broker
docker run -d \
--restart=always \
--name rmqbroker \
-p 10911:10911 -p 10909:10909 \
--privileged=true \
-v /root/rocketmq/broker/logs:/root/logs \
-v /root/rocketmq/broker/store:/root/store \
-v /root/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf \
-v /root/rocketmq/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.3.2/bin/runbroker.sh \
-e "MAX_HEAP_SIZE=512M" \
-e "HEAP_NEWSIZE=256M" \
apache/rocketmq:5.3.2 \
sh mqbroker -c /home/rocketmq/broker.conf
部署rocketmq-dashboard
# 拉取
docker pull apacherocketmq/rocketmq-dashboard:latest
# RocketMQ Dashboard启动
docker run -d \
--restart=always \
--name rmqdashboard \
-e "JAVA_OPTS=-Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=192.168.3.234:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 9875:8080 \
apacherocketmq/rocketmq-dashboard:latest
6. 使用 docker-compose部署
创建yml文件,文件位置随意
vim /root/docker-compose
- 拷贝以下代码,使用了RocketMq 5.2
services:rmqnamesrv:image: apache/rocketmq:5.2.0container_name: rmqnamesrvrestart: alwaysprivileged: trueports:- "9876:9876"volumes:- /root/rocketmq/nameserver/logs:/home/rocketmq/logs- /root/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.2.0/bin/runserver.shcommand: sh mqnamesrvrmqbroker:image: apache/rocketmq:5.2.0container_name: rmqbrokerrestart: alwaysprivileged: trueports:- "10911:10911"- "10909:10909"volumes:- /root/rocketmq/broker/logs:/root/logs- /root/rocketmq/broker/store:/root/store- /root/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf- /root/rocketmq/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.2.0/bin/runbroker.shcommand: sh mqbroker -c /home/rocketmq/broker.confdepends_on:- rmqnamesrvrmqdashboard:image: apacherocketmq/rocketmq-dashboard:latestcontainer_name: rmqdashboardrestart: alwaysenvironment:- JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.3.234:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=falseports:- "9875:8080"depends_on:- rmqnamesrv- rmqbroker
启动
docker-compose up -d
7. docker-compose的基本命令
docker-compose.yml
是 Docker Compose 的配置文件,用于定义和管理多个 Docker 容器的应用程序。以下是使用 docker-compose.yml
的基本步骤:
- 安装 Docker Compose:首先,确保你已经安装了 Docker Compose。下载的docker中一般已经包含了Compose
[root@centos9 ~]# docker-compose --version
Docker Compose version v2.35.1
-
创建
docker-compose.yml
文件:在随意一个目录中创建一个名为docker-compose.yml
的文件。这个文件使用 YAML 格式来定义你的应用程序的服务、网络和卷等。 -
定义服务:在
docker-compose.yml
文件中,使用services
关键字来定义你的应用程序的各个服务。每个服务都有一个名称,并且可以指定以下属性:image
:指定服务使用的 Docker 镜像。ports
:指定服务暴露的端口。volumes
:指定服务使用的卷。environment
:指定服务的环境变量。depends_on
:指定服务之间的依赖关系。
例如,以下是一个简单的 docker-compose.yml
文件,定义了一个 Web 服务和一个数据库服务:
services:web:image: nginxports:- "80:80"volumes:-./html:/usr/share/nginx/htmldb:image: mysqlenvironment:- MYSQL_ROOT_PASSWORD=password- MYSQL_DATABASE=mydatabasevolumes:-./data:/var/lib/mysql
在这个例子中,web
服务使用了 Nginx 镜像,并将容器的 80 端口映射到主机的 80 端口。web
服务还使用了一个卷,将主机的 ./html
目录挂载到容器的 /usr/share/nginx/html
目录。db
服务使用了 MySQL 镜像,并设置了一些环境变量。db
服务也使用了一个卷,将主机的 ./data
目录挂载到容器的 /var/lib/mysql
目录。
- 启动服务:在目录中打开终端,运行以下命令来启动服务,在终端显示日志,退出则会关闭容器:
docker-compose up
这个命令会读取 docker-compose.yml
文件,并启动其中定义的所有服务。你可以使用 -d
选项来在后台运行服务:
docker-compose up -d
- 管理服务:使用
docker-compose
命令来管理服务。例如,你可以使用以下命令来停止服务:
docker-compose down
你还可以使用以下命令来重启服务:
docker-compose restart
-
查看服务状态:使用
docker-compose ps
命令来查看服务的状态。这个命令会列出所有正在运行的服务及其状态。 -
查看服务日志:使用
docker-compose logs
命令来查看服务的日志。这个命令会显示所有服务的日志输出。 -
扩展服务:使用
docker-compose scale
命令来扩展服务。例如,你可以使用以下命令来将web
服务扩展到 3 个实例:
docker-compose scale web=3