文章目录
概述:
rocketmq安装涉及到三个服务,namesrv服务、broker节点、rockermq-console服务;
关键点是:
1、启动namesrc时,文件映射只关心日志目录,不用关心数据目录
2、要弄清楚broker的配置文件与数据存储目录,网上看到资料很多都不一样,可能是版本不同;这块我已经使用临时容器查看默认开辟的目录,直接使用下面命令即可,当然,你也可以在配置文件中自己指定数据目录;
具体安装步骤:
一、创建容器共享网络
docker network create rocketmq
二、创建namesrv服务
1、拉取镜像
docker pull apache/rocketmq:5.3.3
2、创建namesrv在宿主机的日志映射目录
mkdir -p /data/rocketMQ/namesrv/logs
3、构建namesrc容器
docker run -d \
--restart=always \
--name rmqnamesrv \
-p 9876:9876 \
-v /data/rocketMQ/namesrv/logs:/home/rocketmq/logs/rocketmqlogs \
-e "MAX_POSSIBLE_HEAP=100000000" \
apache/rocketmq:5.3.3 \
sh mqnamesrv
4、查看容器运行状态
docker ps
docker logs rmqnamesrv
三、创建broker节点
1、在宿主机上创建broker数据存储路径、日志目录、配置文件
mkdir -p /data/rocketMQ/broker/conf
mkdir -p /data/rocketMQ/broker/logs
mkdir -p /data/rocketMQ/broker/store
赋予权限:
chmod 777 /data/rocketMQ/broker/logs
chmod 777 /data/rocketMQ/broker/store
chmod 777 /data/rocketMQ/broker/conf
2、编辑配置文件
cd /data/rocketMQ/broker/conf
vim broker.conf
编辑内容如下:
# 所属集群名称,如果节点较多可以配置多个
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 = 10.10.92.118
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95
#是否允许自动创建topic
autoCreateTopicEnable=true
namesrvAddr=10.10.92.118:9876
# 消息延迟级别设置
messageDelayLevel = 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
可以自行改一下配置,比如数据存储时间可以设置更长一点;
namesrvAddr参数设置为nameserver的地址;
3、创建broker容器
新建 startbroker.sh
vim startbroker.sh
内容如下:
docker run -d \
--privileged=true \
--restart=always \
--name rmqbroker \
--network rocketmq \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-p 10912:10912 \
-v /data/rocketMQ/broker/logs:/home/rocketmq/logs \
-v /data/rocketMQ/broker/store:/home/rocketmq/store \
-v /data/rocketMQ/broker/conf/broker.conf:/home/rocketmq/rocketmq-5.3.3/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
apache/rocketmq:5.3.3 \
sh mqbroker -c /home/rocketmq/rocketmq-5.3.3/conf/broker.conf
解释:
-c /home/rocketmq/rocketmq-5.3.3/conf/broker.conf 指定启动时用的配置文件
-p 10909 端口:是 Broker 的 VIP 监听端口。当普通端口的请求非常繁忙时,Broker 端的所有 I/O 线程可能都在执行请求,导致后续网络请求进入队列,使消息请求执行缓慢。这种情况下,生产者发送消息、消费者获取元数据信息等请求可以使用 VIP 端口,以降低消息发送的延时。
-p10911 端口:是 Broker 的监听端口,主要用于执行 Topic 的重平衡等操作,同时也承载着普通的消息网络请求,例如处理生产者发送的消息、消费者的拉取消息请求等。
-p10912 端口:是 Broker 的 HA(High Availability,高可用)端口,用于主从节点之间的数据同步,以保证在主节点出现故障时,从节点能够尽快接管工作,确保消息服务的高可用性。
-e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker : 指定broker服务的最大堆内存
如果需要也可以控制容器内存大小:
–memory=4g \ # 限制容器内存使用
–cpus=2.0 \ # 限制容器CPU使用
–memory=2g \ # 容器总内存限制
-e “MAX_POSSIBLE_HEAP=1073741824” \ # 直接内存1GB
-e “JAVA_OPTS=-Xmx1g” \ # 堆内存1GB
四、创建rockermq-console服务
1、新建console宿主机目录
mkdir -p /data/rocketMQ/console
2、docker拉取镜像
docker pull apacherocketmq/rocketmq-console:2.0.0
3、新建启动脚本 startmqconsole.sh
cd /data/rocketMQ/console
vim startmqconsole.sh
chmod 755 startmqconsole.sh
编辑内容如下:
docker run -d \
--privileged=true \
--restart=always \
--ulimit nofile=65535:65535 \
--ulimit nproc=65535:65535 \
--name rmqconsole \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=10.10.92.118:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 8087:8080 \
apacherocketmq/rocketmq-console:2.0.0
解释:
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.52.136:9876 :设置namesrv服务的ip地址
4、需要关闭防火墙或者开放namesrv和broker端口
如果不设置,控制台服务将无法访问namesrv服务
关闭防火墙:
systemctl stop firewalld.service
开放指定端口:
firewall-cmd --permanent --zone=public --add-port=9876/tcp
firewall-cmd --permanent --zone=public --add-port=10911/tcp
# 立即生效
firewall-cmd --reload
访问控制台: http://10.10.92.118:8087/
参考:
https://www.cnblogs.com/exmyth/p/17511915.html
https://blog.csdn.net/ming19951224/article/details/109063041?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-9-109063041-blog-143672476.235v43pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.6&utm_relevant_index=12