RocketMQ部署单组 Dledger 集群,3个节点。 当Master 宕机,自动切换时,是否可以保证消息正常生产。 还是需要多组集群,有多个Master时才能保证写服务不中断 ?
RocketMQ部署单组 Dledger 集群,3个节点。 自动切换时,是否可以保证消息正常生产?[阿里云消息队列MQ]
「点点赞赏,手留余香」
还没有人赞赏,快来当第一个赞赏的人吧!
RocketMQ部署单组 Dledger 集群,3个节点。 当Master 宕机,自动切换时,是否可以保证消息正常生产。 还是需要多组集群,有多个Master时才能保证写服务不中断 ?
选出新leader之前 应该是写不了的吧。
此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”
DLedger是分布式一致性协议Raft的一个实现,是一个轻量级的Java类库,RocketMQ引入其来实现Leader选举。在RocketMQ 4.5版本之前,如果Master宕机,不支持自动将Slave切换为Master,需要人工介入。但是从4.5版本之后提供了DLedger模式,使用Raft算法,如果Master节点出现故障,可以自动从Slave节点中选举出新的Master进行切换。
部署自动容灾的RocketMQ集群和普通的Master/Slave集群没太多差别,只需要在Broker.conf开启DLedger相关配置即可。然而,一个单组Dledger集群(3个节点)在Master宕机时可以自动切换并保证消息正常生产。这是因为DLedger模式提供了高可用性,即使在Master宕机的情况下,消息无延迟,服务可用性与数据可用性都非常高。
但要注意的是,虽然单组Dledger集群可以在Master宕机时自动切换并保证消息正常生产,但其性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高。此外,「单Master模式」风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用。因此,对于线上环境,建议使用「多Master模式」,这样可以进一步提高系统的可用性和稳定性。
如果你部署的是单组Dledger集群,有3个节点,并且使用自动切换功能,那么在节点故障时,消息的正常生产是可以得到保证的。这是因为Dledger是一种高可用的分布式日志系统,它使用Raft协议来实现数据的复制和同步,从而保证了数据的可靠性和一致性。
在Dledger集群中,每个节点都会保存一份完整的数据副本,并且通过Raft协议来同步数据。当一个节点故障时,其他节点会自动接管其工作,从而保证了服务的连续性。此外,Dledger还提供了自动切换功能,可以在节点故障时自动切换到其他节点,从而进一步提高了服务的可用性。
因此,如果你正确地配置和管理你的Dledger集群,那么在节点故障时,消息的正常生产是可以得到保证的。
RocketMQ的Dledger模式是主备模式,一个主节点(Master)和两个备节点(Slave)组成一组。当Master宕机时,会自动切换到其中一个Slave作为新的Master,以保证消息的正常生产。
然而,为了保证高可用性和数据一致性,通常建议采用多组Dledger集群部署。这样即使有一组Master宕机,其他组的Master仍然可以正常工作,从而确保消息的生产不会中断。同时,通过配置跨组复制,可以实现不同组之间的数据同步,进一步提高系统的稳定性。