RocketMQ集群部署

type
status
date
slug
summary
tags
category
icon
password
本文简单介绍了RocketMQ5.x各个集群部署方案以及优缺点,并根据实际需要选用了一种集群搭建方式用于展示,如需快速搭建rocketmq集群,可忽略文章前面的介绍,直接按照教程搭建。

集群方案

RocketMQ官方提供了以下几种集群部署方案
💡
注意:RocketMQ集群模式和brokerName这个配置项有很大关系。在集群模式下,brokerName可以看作是组名,相同brokerName的为一组。如果集群中每个结点的brokerName唯一,那么这个模式就是多组结点单副本模式

多组节点(集群)单副本模式

一个集群内全部部署 Master 角色,不部署Slave 副本,例如2个Master或者3个Master,这种模式的优缺点如下:
  • 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
  • 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。

多节点(集群)多副本模式-异步复制

每个Master配置一个Slave,有多组 Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:
  • 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;
  • 缺点:Master宕机,磁盘损坏情况下会丢失少量消息。

多节点(集群)多副本模式-同步双写

每个Master配置一个Slave,有多对 Master-Slave,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:
  • 优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
  • 缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。

基于Dleger Controller实现1主2从

这种模式就是多组结点单副本模式

简述

💡
RocketMQ在4.5版本之前都不支持master宕机后slave自动切换。在4.5版本后,增加了基于Dleger实现的主从切换。
4.x版本的主备自动切换是基于DLedger Commitlog 替换原来的 Commitlog,使 Commitlog 拥有选举复制能力,但这也造成了一些问题:
  • Raft 模式下,Broker组内副本数必须是三副本及以上,副本的ACK也必须遵循多数派协议。
  • RocketMQ 存在两套 HA 复制流程,且 Raft 模式下的复制无法利用 RocketMQ 原生的存储能力。
因此在RocketMQ 5.0 版本后,DLedger(Raft)能力从原本的复制链路上移到controller,将选主切换能力上移,单独作为一个选主组件。RIP-44提出增加一个DLedgerControlller的选主组件,它是可选部署的,在无切换架构的基础上,部署后经过配置就可以拥有切换的能力,它可以内嵌在Nameserver中,也可以独立部署。如果内嵌在NameServer中,NameServer本身的能力还是无状态的,比如有三个NameServer都内嵌部署了DLedger Controller,如果宕机两个节点,NameServer仍然存在一个可以提供路由服务,DLedger Controller宕机两个节点后由于达不到Raft多数派的要求无法再协助Broker切换,但是消息集群本身正常的收发服务不会受到影响。
notion image

集群搭建

采用docker+docker-compose搭建集群
环境要求和图示
集群架构图如下:
notion image
至少需要三台服务器,并且这里将NameServer和broker部署在了一起(建议nameserver和broker分开部署)。
结点编号
服务器IP
安装服务
1
192.168.124.92
Broker,NameServer(DLedgerController)
2
192.168.124.101
Broker,NameServer(DLedgerController)
3
192.168.124.168
Broker,NameServer(DLedgerController)
按照下面的文件结构在服务器上创建相应文件和文件夹。
notion image
注意图中logs、store等文件夹必须具有对应的权限
配置文件
💡
服务器1namesrv.conf
💡
服务器1broker.conf
💡
服务器2namesrv.conf
💡
服务器2broker.conf
💡
服务器3namesrv.conf
💡
服务器3broker.conf
服务编排docker-compose文件
三个结点的docker-compose文件基本上一致(排除掉某个结点端口被占用的情况)。下面的docker-compose文件中,还提供了一个mqdashboard(rocketmq可视化控制台),三个结点中只需要有一个启动即可,其它两个结点请注释掉。
完成上面步骤后,分别在三个服务器上执行docker-compose up -d 启动即可。
基于Raft算法的主从选举,在选举过程中,整个集群对外是不可用,所以下面提供多主的方式搭建集群。

基于Dleger Controller实现2主3从

现有5台服务器,在原有的1主2从(group1)基础上,新增1主1从(group2),集群变成2主3从。这样,即使其中一个master宕机进行主从选举,也还有另外一个master提供服务,不至于在选举过程中,造成集群对外不可用。(对应多节点多副本模式)
 
 
搭建方式和上面的一样。只是对于4、5结点,brokerName不能和1、2、3一样。
实现效果:
notion image
 
  • GitTalk

© aya 2024