RocketMQ-为什么需要集群?主从架构搭建

admin 2024年12月16日13:43:23评论4 views字数 4141阅读13分48秒阅读模式

单机版本RocketMQ搭建,请移步《RocketMQ服务快速搭建和体验消息收发》

1、为什么需要分布式集群架构?

之前快速搭建的是单机版的RocketMQ服务,会存在单点故障。一旦NameServer服务或Broker服务出现问题,整个RocketMQ服务就无法正常工作。更严重的是,如果服务器出现问题,比如磁盘坏了或被中毒,存储在磁盘上的数据就会丢失。所以,单机版一般是不用于生产环境,需要一个分布式集群服务来解决。

RocketMQ的分布式集群基于主从架构搭建,在多个服务器组成的集群中,指定一部分节点为Master,负责响应客户端的请求;指定一部分节点为Slave,负责备份Master节点的数据。作用是当Master节点出现故障时,Slave节点可以保证数据不会丢失。

RocketMQ-为什么需要集群?主从架构搭建

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⽬录下,提供了多种集群的部署配置⽂件模板,不需要我们手动创建,只需在原来的基础做调整就好。  

RocketMQ-为什么需要集群?主从架构搭建

集群模式简介

  • 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
RocketMQ-为什么需要集群?主从架构搭建

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-为什么需要集群?主从架构搭建

如果没搭建过RocketMQ Dashboard的同学,请移步《RocketMQ-管控利器【Dashboard 2.0】服务搭建》

2.7、Broker服务集群配置注意点
  • store开头的一系列配置: 表示RocketMQ的存盘⽂件地址。在同⼀个机器上需要部署多个Broker服务时,不同服务的存储目录不能相同**。

  • listenPort:表示Broker对外提供服务的端⼝,默认值10911。在同⼀个机器上部署多个Broker服务时,不同服务占⽤的端口不能相同

3、我的公众号&资料获取

敬请关注我的公众号:大象只为你,持续更新技术知识......

相关资料获取:

如需RocketMQ资源包,请后台回复:RocketMQ

原文始发于微信公众号(大象只为你):RocketMQ-为什么需要集群?主从架构搭建

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月16日13:43:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   RocketMQ-为什么需要集群?主从架构搭建https://cn-sec.com/archives/3508502.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息