单机版本RocketMQ搭建,请移步《RocketMQ服务快速搭建和体验消息收发》。
1、为什么需要分布式集群架构?
之前快速搭建的是单机版的RocketMQ服务,会存在单点故障。一旦NameServer服务或Broker服务出现问题,整个RocketMQ服务就无法正常工作。更严重的是,如果服务器出现问题,比如磁盘坏了或被中毒,存储在磁盘上的数据就会丢失。所以,单机版一般是不用于生产环境,需要一个分布式集群服务来解决。
RocketMQ的分布式集群基于主从架构搭建,在多个服务器组成的集群中,指定一部分节点为Master,负责响应客户端的请求;指定一部分节点为Slave,负责备份Master节点的数据。作用是当Master节点出现故障时,Slave节点可以保证数据不会丢失。
2、搭建分布式集群【主从架构】
2.1、环境准备
准备三台相同配置的Linux服务器【可用虚拟机代替】。
方便更清晰描述三台服务器的操作,给【每个服务器】指定一个host映射。
# 编辑命令vim /etc/hosts# IP地址为自己服务器的IP192.168.242.50 rmq1192.168.242.51 rmq2192.168.242.52 rmq3
本次搭建,以RocketMQ默认配置2主2从集群,将主从节点分别部署在不同服务器上。集群规划如下:
host映射 | NameServer服务部署 | Broker服务部署 |
---|---|---|
rmq1 | NameServer | |
rmq2 | NameServer | broker-a, broker-b-s |
rmq3 | NameServer | broker-b, broker-a-s |
虚拟机克隆,可参考《配置可复用的虚拟机,不难!》
2.2、部署nameServer服务
nameServer服务不需要做特别的配置,跟单机部署一样的步骤,在三台服务器上都分别部署nameServer服务即可。
# 三台的启动命令都一样# 切换到RocketMQ运行包根目录nohup mqnamesrv &
2.3、对Broker服务进⾏集群配置
在RocketMQ运⾏包的conf⽬录下,提供了多种集群的部署配置⽂件模板,不需要我们手动创建,只需在原来的基础做调整就好。
集群模式简介
-
2m-noslave: 2主⽆从的集群参考配置,存在单点故障。
-
2m-2s-async和2m-2s-sync:2主2从的集群参考配置,主从不会自动切换。async和sync表示主从节点之间是同步或异步。
-
dledger: 具备主从切换功能的⾼可⽤集群。集群中的节点会基于Raft协议随机选举出⼀个Leader,作⽤类似于Master节点。其他的节点都是follower,作⽤类似于Slave节点。
此次采⽤2m-2s-async的⽅式搭建集群,需要在rmq2和rmq3上修改这个目录下的配置⽂件。
配置第⼀组broker-a的Master服务
服务器:rmq2,路径:/conf/2m-2s-async/broker-a.properties
,示例配置如下:
#所属集群名字,名字一样的节点就在同一个集群内brokerClusterName=rocketmq-cluster#broker名字,名字一样的节点就是一组主从节点。brokerName=broker-a#brokerid,0就表示是Master,>0的都是表示 SlavebrokerId=0#nameServer地址,分号分割namesrvAddr=rmq1:9876;rmq2:9876;rmq3:9876deleteWhen=04fileReservedTime=120#存储路径storePathRootDir=/opt/apps/server/rocketmq/storestorePathCommitLog=/opt/apps/server/rocketmq/store/commitlogstorePathConsumeQueue=/opt/apps/server/rocketmq/store/consumequeuestorePathIndex=/opt/apps/server/rocketmq/store/indexstoreCheckpoint=/opt/apps/server/rocketmq/store/checkpointabortFile=/opt/apps/server/rocketmq/store/abort#Broker 的角色brokerRole=ASYNC_MASTERflushDiskType=ASYNC_FLUSH#Broker 对外服务的监听端口listenPort=10911
配置第⼀组broker-a的Slave服务
服务器:rmq3,路径:/conf/2m-2s-async/broker-a-s.properties
,示例配置如下:
#所属集群名字,名字一样的节点就在同一个集群内brokerClusterName=rocketmq-cluster#broker名字,名字一样的节点就是一组主从节点。brokerName=broker-a#brokerid,0就表示是Master,>0的都是表示 Slave# 【Slave服务与Master服务的不同点】brokerId=1#nameServer地址,分号分割namesrvAddr=rmq1:9876;rmq2:9876;rmq3:9876deleteWhen=04fileReservedTime=120#存储路径# 【Slave服务与Master服务的不同点,注意store有加了Slave区分】storePathRootDir=/opt/apps/server/rocketmq/storeSlavestorePathCommitLog=/opt/apps/server/rocketmq/storeSlave/commitlogstorePathConsumeQueue=/opt/apps/server/rocketmq/storeSlave/consumequeuestorePathIndex=/opt/apps/server/rocketmq/storeSlave/indexstoreCheckpoint=/opt/apps/server/rocketmq/storeSlave/checkpointabortFile=/opt/apps/server/rocketmq/storeSlave/abort#Broker 的角色# 【Slave服务与Master服务的不同点】brokerRole=SLAVEflushDiskType=ASYNC_FLUSH#Broker 对外服务的监听端口# 【Slave服务与Master服务的不同点】listenPort=11011
配置第二组broker-b的Master服务和Slave服务的配置
直接复制broker-a的配置,只修改brokerName=broker-b
就行,其他都一样。
2.4、启动Broker服务
启动Broker服务,与单机版本不同,需要增加-c参数,指向对应的配置⽂件。
在rmq2上,启动broker-a的master服务和broker-b的slave服务:
# 切换到RocketMQ运行包根目录cd /opt/apps/server/rocketmq-all-5.3.1-bin-release# 启动命令nohup mqbroker-c ./conf/2m-2s-async/broker-a.properties &nohup mqbroker-c ./conf/2m-2s-async/broker-b-s.properties &
在rmq3上,启动broker-b的master服务和broker-a的slave服务:
# 切换到RocketMQ运行包根目录cd /opt/apps/server/rocketmq-all-5.3.1-bin-release# 启动命令nohup mqbroker-c ./conf/2m-2s-async/broker-b.properties &nohup mqbroker-c ./conf/2m-2s-async/broker-a-s.properties &
2.5、检查集群服务状态
查看服务启动状态,仍然可用jps命令和跟踪nohup.out日志文件的方式。但集群部署方式,建议使用bin目录下的mqadmin指令。该命令可以及时查看集群broker集群的运行状态。在任意一台服务器运行该命令即可。
# 切换到RocketMQ运行包根目录cd /opt/apps/server/rocketmq-all-5.3.1-bin-release# 查看broker集群运行状态命令./bin/mqadmin clusterlist
2.6、Dashboard配置修改
修改配置文件application.yml里面的namesrvAddrs,把集群的nameserver地址添加进去。
rocketmq:config: namesrvAddrs: -192.168.242.50:9876 -192.168.242.51:9876 -192.168.242.52:9876
重启服务,在集群菜单页便可看到集群的运行的情况。
如果没搭建过RocketMQ Dashboard的同学,请移步《RocketMQ-管控利器【Dashboard 2.0】服务搭建》。
2.7、Broker服务集群配置注意点
-
store开头的一系列配置: 表示RocketMQ的存盘⽂件地址。在同⼀个机器上需要部署多个Broker服务时,不同服务的存储目录不能相同**。
-
listenPort:表示Broker对外提供服务的端⼝,默认值10911。在同⼀个机器上部署多个Broker服务时,不同服务占⽤的端口不能相同。
3、我的公众号&资料获取
敬请关注我的公众号:大象只为你,持续更新技术知识......
相关资料获取:
如需RocketMQ资源包,请后台回复:RocketMQ
原文始发于微信公众号(大象只为你):RocketMQ-为什么需要集群?主从架构搭建
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论