本文主要记录RocketMQ两主两从的集群搭建
1.环境准备
liunx centos7,docker-compose,镜像apache/rocketmq:4.9.3
2.集群搭建
2.1 broker配置文件
##master节点broker配置文件
#集群名一致就好
brokerClusterName=DefaultCluster
#容器化部署 这里需要填写 宿主机IP
brokerIP1=192.168.0.221
#每个集群master和slave包保持一致
brokerName=broker-a
#master=0 slave=1
brokerId=0
deleteWhen=04
fileReservedTime=48
#Broker角色 ASYNC_MASTER/异步复制Master SYNC_MASTER/同步双写Master SLAVE
brokerRole=ASYNC_MASTER
##刷盘方式 ASYNC_FLUSH/异步刷盘 SYNC_FLUSH/同步刷盘
flushDiskType=ASYNC_FLUSH
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
#监听端口 间隔差3 如需连接控制台 需要对外
listenPort=10911
#本地测试要写宿主机IP,参数传 -n
namesrvAddr=192.168.0.221:9876;192.168.0.221:9877
##第一份slave broker文件
brokerClusterName=DefaultCluster
brokerIP1=192.168.0.221
#每组master和slave要相对应
brokerName=broker-a
#master=0 slave=1
brokerId=1
deleteWhen=04
fileReservedTime=48
#Broker角色 ASYNC_MASTER/异步复制Master SYNC_MASTER/同步双写Master SLAVE
brokerRole=SLAVE
##刷盘方式 ASYNC_FLUSH/异步刷盘 SYNC_FLUSH/同步刷盘
flushDiskType=ASYNC_FLUSH
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
#监听端口
listenPort=10931
#本地测试要写宿主机IP,参数传 -n
namesrvAddr=192.168.0.221:9876;192.168.0.221:9877
master2和salve2复制上面内容,需要主要的是:brokerName、brokerId、brokerRole、listenPort这几个参数的不同
2.2 docker-compose.yaml文件
version: '3.7'
services:
namesrv1:
image: apache/rocketmq:4.9.3
container_name: namesrv1
ports:
- "9876:9876"
networks:
- my-net
command: sh mqnamesrv
namesrv2:
image: apache/rocketmq:4.9.3
container_name: namesrv2
ports:
- "9877:9876"
networks:
- my-net
command: sh mqnamesrv
broker-m1:
image: apache/rocketmq:4.9.3
container_name: broker-m1
#端口映射和配置监听的端口一致
ports:
- 10911:10911
volumes:
- /root/local/rocketmq-cluster/broker-m1.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
environment:
#这是无奈之下试出来的 默认启动大小要占用4G 内存也不会报错 巨坑!
JAVA_OPT_EXT: -server -Xms128m -Xmx128m -Xmn128
networks:
- my-net
command: sh mqbroker -n namesrv1:9876;namesrv2:9876 -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf
depends_on:
- namesrv1
- namesrv2
broker-m2:
image: apache/rocketmq:4.9.3
container_name: broker-m2
ports:
- 10921:10921
volumes:
- /root/local/rocketmq-cluster/broker-m2.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
environment:
JAVA_OPT_EXT: -server -Xms128m -Xmx128m -Xmn128
networks:
- my-net
command: sh mqbroker -n namesrv1:9876;namesrv2:9876 -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf
depends_on:
- namesrv1
- namesrv2
broker-s1:
image: apache/rocketmq:4.9.3
container_name: broker-s1
ports:
- 10931:10931
volumes:
- /root/local/rocketmq-cluster/broker-s1.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
environment:
JAVA_OPT_EXT: -server -Xms128m -Xmx128m -Xmn128
networks:
- my-net
command: sh mqbroker -n namesrv1:9876;namesrv2:9876 -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf
depends_on:
- namesrv1
- namesrv2
broker-s2:
image: apache/rocketmq:4.9.3
container_name: broker-s2
ports:
- 10941:10941
volumes:
- /root/local/rocketmq-cluster/broker-s2.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
environment:
JAVA_OPT_EXT: -server -Xms128m -Xmx128m -Xmn128
networks:
- my-net
command: sh mqbroker -n namesrv1:9876;namesrv2:9876 -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf
depends_on:
- namesrv1
- namesrv2
#可视化控制台
rocket-console:
image: styletang/rocketmq-console-ng
container_name: rocket-console
ports:
- "8100:8080"
environment:
JAVA_OPTS: -Drocketmq.config.namesrvAddr=namesrv1:9876;namesrv2:9876 -Drocketmq.config.isVIPChannel=false
networks:
- my-net
depends_on:
- namesrv1
networks:
my-net:
external: true
2.3 启动
[root@m rocketmq-cluster]# docker-compose ps -a
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------------------
broker-m1 sh mqbroker -n namesrv1:98 ... Up 10909/tcp, 0.0.0.0:10911->10911/tcp, 10912/tcp, 9876/tcp
broker-m2 sh mqbroker -n namesrv1:98 ... Up 10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:10921->10921/tcp, 9876/tcp
broker-s1 sh mqbroker -n namesrv1:98 ... Up 10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:10931->10931/tcp, 9876/tcp
broker-s2 sh mqbroker -n namesrv1:98 ... Up 10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:10941->10941/tcp, 9876/tcp
namesrv1 sh mqnamesrv Up 10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:9876->9876/tcp
namesrv2 sh mqnamesrv Up 10909/tcp, 10911/tcp, 10912/tcp, 0.0.0.0:9877->9876/tcp
rocket-console sh -c java $JAVA_OPTS -jar ... Up 0.0.0.0:8100->8080/tcp
2.4 java中连接测试
只有配置不一样,其他无需修改
rocketmq:
name-server: 192.168.0.221:9876;192.168.0.221:9877
2.5 控制台
节点都启动的情况下,消费了一些消息,是分布消费的
3.总结
1.特别注意配置文件的不同和相同处
2.内存大小控制,虚拟机测试时巨坑
3.从节点停掉后,观察很久没有转为主节点(如果是这样,那从节点还有啥意义?这个问题没解决)
以上就是本章的全部内容了。
上一篇:RocketMQ第二话 – RocketMQ事务消息、延时消息实现
下一篇:MQTT第一话 – Docker安装emqx以及Springboot集成emqx
书山有路勤为径,学海无涯苦作舟