RocketMq集群搭建

RocketMq集群搭建

采用双主双从的模式搭建集群。

使用VmWare创建两台CentOS7虚拟机,内网ip分别为192.168.116.135,192.168.116.136

动手之前建议通篇浏览一下,尤其注意配置文件里面的注释!最后附了参考文章,都很不错!

获得docker镜像

安装过程中使用过不同的版本,下面是亲测有效的版本

#rocketmq nameserver 和 broker
docker pull foxiswho/rocketmq:4.8.0

#控制台
docker pull styletang/rocketmq-console-ng

在两台服务器上分别进行该操作

RocketMq集群搭建_第1张图片

RocketMq集群搭建_第2张图片

启动nameserver

先创建所需的数据存储路径

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

nameserver按照默认方式启动即可

#启动rmqnamesrv
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" foxiswho/rocketmq:4.8.0 sh mqnamesrv

两台服务器均进行相同操作

启动broker

rocketmq集群比较复杂的地方就在broker的集群部署

下面的步骤是在服务器1上的操作,服务器2上仅需进行少量修改即可。

创建数据存储路径

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

本例使用双主双从的方式,在两台服务器上分别部署broker-master-a,broker-slave-b 和

broker-master-b,broker-slave-a

编写配置文件

broker-master-a.conf

#foxiswho/rocketmq:4.8.0 sh mqnamesrv 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster

#broker名称,master和slave使用相同的名称,表明他们的主从关系
#注意一定主节点和从节点一定要使用相同的名称
brokerName = broker-a

#0表示Master,大于0表示不同的slave
#从节点设置为1
brokerId = 0

#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48

#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#从节点设置为SLAVE

#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址,namesrv地址与broker启动端口
listenPort=10911
#从节点写所在服务器的ip,即192.168.116.136
brokerIP1 = 192.168.116.135
namesrvAddr=192.168.116.135:9876;192.168.116.136:9876
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95

broker-slave-b.conf

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

启动

rmqbroker-m-a
下面的命令在运行之间最好把每一行开头的换行删掉

#启动broker
docker run -d 
-p 10911:10911 
-p 10909:10909 
-v /docker/rocketmq/data/broker/logs:/root/logs 
-v /docker/rocketmq/data/broker/store:/root/store 
#给当前broker取个名
--name rmqbroker-m-a 
--link rmqnamesrv:namesrv 
-e "NAMESRV_ADDR=namesrv:9876" 
-e "MAX_POSSIBLE_HEAP=200000000" 
#注意这里要指定为对应的配置文件
-v /docker/rocketmq/config/broker-master-a.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf 
foxiswho/rocketmq:4.8.0  
sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf

rmqbroker-s-b

#启动broker
docker run -d 
-p 10912:10912 
-p 10910:10910 
-v /docker/rocketmq/data/broker/logs:/root/logs 
-v /docker/rocketmq/data/broker/store:/root/store 
#给当前broker取个名
--name rmqbroker-s-b 
--link rmqnamesrv:namesrv 
-e "NAMESRV_ADDR=namesrv:9876" 
-e "MAX_POSSIBLE_HEAP=200000000" 
#注意这里要指定为对应的配置文件
-v /docker/rocketmq/config/broker-slave-b.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf 
foxiswho/rocketmq:4.8.0  
sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf

查看启动状态

在这里插入图片描述

启动控制台

没什么好说的,在两台机器上分别启动即可

#启动控制台
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.116.136:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng

防火墙设置

为了各个端口可以相互访问,需要开放指定端口。

firewall-cmd --zone=public --add-port=9876/tcp --permanent

如上所示,分别打开8080,9876,10911,10912

之后重启防火墙

firewall-cmd --reload

使用

firewall-cmd --list-ports

查看已经打开的端口。

这方面建议上网查

结果展示

192.168.116.135:8080

RocketMq集群搭建_第3张图片

192.168.116.136:8080

RocketMq集群搭建_第4张图片

遇到的问题

Are you trying to mount a directory onto a file or vice-versa

Are you trying to mount a directory onto a file or vice-versa 解决方法

WARNING: IPv4 forwarding is disabled. Networking will not work.

docker警告:WARNING: IPv4 forwarding is disabled. Networking will not work._杰哥的技术杂货铺的博客-CSDN博客

还有一个是在docker run之前先把防火墙打开,不然会报错,具体信息不记得了

其他一些小问题不记得了,都能查到!

参考文章

rocketmq安装:

docker安装rocketmq(步骤解释的比较完整)

docker安装rocketmq (使用他提供的版本成功安装)

总之就是两个配合食用,效果更佳!!

集群搭建:

Docker搭建RocketMQ集群(两主两从) - 知乎 (zhihu.com )

步骤完整,可是我有些细节没注意到导致没有成功

RocketMQ从入门到放弃之二Docker部署RokectMQ_Genterator的博客

(有重点提示,比如重点提醒了从节点要设置为SLAVE,我就是没设置这个一直没成功)

你可能感兴趣的:(mq,rocketmq,docker)