[5.1.0]关于Dledger和controller疑问 #6172
-
看文档看得有点晕,这两个组件做的事是相同的? |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 15 replies
-
DLedger相关的高可用有两种模式 该架构主要是利用OpenMessaging中名为DLedger的Raft存储库来实现,DLedger存储层是仿照RocketMQ写的简化版本,传输层也用的RocketMQ Remoting,这样的切换架构依靠Raft自选举能力,仍然没有任何外部组件依赖。如图所示,最主要的区别是利用Raft CommitLog代替了原来CommitLog,使CommitLog拥有了选举复制的能力,然后通过角色透传的方式,把Raft的角色透传给外部Broker的角色,Leader对应原来Master的角色,Follower和Candidate对应原来的Slave角色,而Broker与其他外部组件如NameServer,客户端的交互仍然以Master/Slave的形式进行。现在,如果一个Master挂了,依靠Raft自动选主的能力,会重新选出一个Leader,然后通过角色透传变成新的Master对外服务。此外,Raft的算法也保证了数据的一致性,不会出现消息的丢失。 2.RocketMQ 5.0 后的Controller模式 1 中 DLedger 存在以下问题
因此在RocketMQ 5.0 版本后,DLedger(Raft)能力从原本的复制链路上移到controller,将选主切换能力上移,单独作为一个选主组件。RIP-44提出增加一个DLedgerControlller的选主组件,它是可选部署的,在无切换架构的基础上,部署后经过配置就可以拥有切换的能力,它可以内嵌在Nameserver中,也可以独立部署。如果内嵌在NameServer中,NameServer本身的能力还是无状态的,比如有三个NameServer都内嵌部署了DLedger Controller,如果宕机两个节点,NameServer仍然存在一个可以提供路由服务,DLedger Controller宕机两个节点后由于达不到Raft多数派的要求无法再协助Broker切换,但是消息集群本身正常的收发服务不会受到影响。 如果新建集群,建议使用5.0的controller模式,可以参考相关文档 https://github.com/apache/rocketmq/tree/develop/docs/cn/controller |
Beta Was this translation helpful? Give feedback.
-
mq 5.0 缺少Controller 主备自动切换的部署文档;尤其是DLedger模式升级到Controller 主备自动切换模式的文档; 由于原DLedger模式消息数据格式与Master-Slave下数据格式存在区别,不提供带数据原地升级的路径。在部署多组Broker的情况下,可以禁写某一组Broker一段时间(只要确认存量消息被全部消费即可,比如根据消息的保存时间来决定),然后清空store目录下除config/topics.json、subscriptionGroup.json下(保留topic和订阅关系的元数据)的其他文件后,进行空盘升级。 |
Beta Was this translation helpful? Give feedback.
-
部署基于Dledger 架构一主两从, 和 自己部署两组 master-slave 架构(一共4个节点)有什么区别 ? |
Beta Was this translation helpful? Give feedback.
-
假如我有一个Controller集群,inSyncReplicas和minInSyncReplicas都配置为2,那么现在broker有3个节点时会如何?因为brokerRole现在是由Controller管理的了,我如何判断现在是一主二从,还是一主一从+一主零从? |
Beta Was this translation helpful? Give feedback.
DLedger相关的高可用有两种模式
该架构主要是利用OpenMessaging中名为DLedger的Raft存储库来实现,DLedger存储层是仿照RocketMQ写的简化版本,传输层也用的RocketMQ Remoting,这样的切换架构依靠Raft自选举能力,仍然没有任何外部组件依赖。如图所示,最主要的区别是利用Raft CommitLog代替了原来CommitLog,使CommitLog拥有了选举复制的能力,然后通过角色透传的方式,把Raft的角色透传给外部Broker的角色,Leader对应原来Master的角色,Follower和Candidate对应原来的Slave角色,而Broker与其他外部组件如NameServer,客户端的交互仍然以Master/Slave的形式进行。现在,如果一个Master挂了,依靠Raft自动选主的能力,会重新选出一个Leader,然后通过角色透传变成新的Master对外服务。此外,Raft的算法也保证了数据的一致性,不会出现消息的丢失。
2.RocketMQ 5.0 后的Controller模式
1 中 DLedger 存在以下问题