本章小结
本章重点介绍了RocketMQ主从切换的原理与实战。Raft协议是RocketMQ实现主从切换的基础,Raft协议主要包含Leader选主与日志复制。
在分布式环境中,为了提高数据的可靠性,避免单点故障,通常会将一份数据存储在不同的集群上,形成一个复制组,即数据冗余机制。但引入冗余机制就不得不面对另外一个难题:副本之间的数据一致性。
为了加深读者对RocketMQ主从切换机制,特别是Raft协议的理解,提出一道思考题与各位读者交流探讨。
一个有5个节点的DLedger集群。
Leader Node: n0-broker-a
folloer Node: n1-broker-a,n2-broker-a,n3-broker-a,n4-broker-a
从节点的复制进度可能不一致,例如:
n0-broker-a 复制进度为 120; n1-broker-a 复制进度为 100; n2-broker-a 复制进度为 120; n3-broker-a 复制进度为 90; n4-broker-a 负载进度为 90。
如果此时 n0-broker-a 主节点宕机,触发主从切换,n0先发起投票,由于n1的复制进度大于n3、n4,再加上自己的一票,有可能被选举为Leader,原来Leader节点上追加的消息日志序号为120,此时消息会丢失吗?为什么?