8288分类目录 8288分类目录 8288分类目录
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Dledger是如何实现主从自动切换的

来源:本站原创 浏览:133次 时间:2021-09-20
前言

hello小伙伴们,今天王子又来继续和大家聊RocketMQ了,之前的文章我们一直说Broker的主从切换是可以基于Dledger实现自动切换的,那么小伙伴们是不是很好奇它究竟是如何实现的呢?今天我们就来聊一聊这个话题。

首先我们回顾一下上一篇文章深入研究Broker是如何持久化的中,producer发送消息给Broker后,首先将消息写入到CommitLog日志文件中,然后会把具体的MessageQueue中消息的位置信息存储到ConsumeQueue中。

之后Broker为了实现高可用,是有一个Broker组的,包含Master和Slave,Master接收到数据同步给Slave,一旦出现故障,可以实现主从自动切换。

 

使用Dledger技术替换CommitLog

现在我们就开始聊聊Dledger是如何实现主从自动切换的。

首先我们要知道Dledger是个什么东西,实际上Dledger自己就有一套CommitLog机制,如果使用了它,它接到数据第一步就是写入自己的CommitLog。

所以,引入Dledger技术,其实就是使用Dledger的CommitLog来替换掉Broker自己的CommitLog。

然后Broker仍然可以基于Dledger的CommitLog,把消息的位置信息保存到ConsumeQueue中。

 

Dledger是怎么选举Leader的

了解了Dledger是干什么的,那接下来我们就来探索一下,它是如何选举Leader的。

实际上它是通过Raft协议来进行选举的,那Raft又是个什么东东,别急我们慢慢聊。

假设我们的一组Broker中有三台机器,它们之间首先要选择一个Leader,这需要发起一轮一轮的投票,三台机器互相投票最终确定出Leader。

在刚刚启动的时候,这三台机器都会投给自己一票,说:"我ϡ��,���要当Leader,别跟老子抢",然后把这条消息通知给其他机器。

为了方便说明,我们把三台机器分别命名为A,B,C.

那么经过第一轮投票后,A,B,C分别给自己投了一票,并发送给了别人。

这个时候A接到消息一看,好家伙,每个人都投的自己,都很自私,那算了,这次投票直接无效。

接着,每个人开始一段随机时间的休眠,比如A休眠了3秒,B休眠了4秒,C休眠了5秒。

那么3秒过去了,A醒了,抓紧给自己投了一票,又发给别人了。

又过了1秒,B醒了,它也想给自己投票,但是它发现已经有人发给了它消息,现在A已经有一票了,这个时候B会尊重别人的选择,也把票投给A,然后发送给别人。

又过了1秒,C醒了,同样也想给自己投票,但是发现别人已经投了两票给A了,那这时候它也会直接尊重别人的选择,投票给A,然后发送给别人。

这个时候所有人都收到了投票,全是投票给A的,那么A就光荣上岗了。

选举的时候就是谁的票数多,谁就去当老大。

这就是Raft协议中选举Leader的简单解释,总结起来就是,假如一轮投票不能得到结果,那就每个人随机休眠一下,先醒过来的投给自己,后醒过来的尊重大多数人的意见。

依靠这种方式的投票,几轮下来就能选出一个Leader了。

当然,职位越高,责任越大,选举出Leader后,所有的接收消息操作全都由Leader来负责了,Follower只能同步Leader的数据。

 

Dledger的数据同步机制

现在我们了解了Dledger的投票选举机制,那么Broker接收到消息后,是如何基于Dledger实现数据同步的呢?

同样,Dledger也是通过Raft协议进行多副本同步的,简单来讲,数据同步分为两个阶段,uncommitted阶段和committed阶段。

首先,当Leader接到消息数据后,会先标记消息为uncommitted状态,然后通过Dledger的组件把uncommitted状态的消息发送给Follower上的DledgerServer。

接着Follower接到消息后,会发送一个ack给Leader上的DledgerServer,然后如果Leader发现超过半数的Follower已经给自己返回了ack,那么就认为同步成功了,这时候把状态改为committed。

然后再发消息给Follower,将Follower上的状态也改为committed。

这就是基于Dledger的数据同步机制。

 

总结

到这里,关于Dledger如何实现主从自动切换的问题我们已经聊完了。

可能有的小伙伴会问,如果Leader宕机了,它是怎么实现自动切换的,好像还是没有说啊。

其实我们只要明白了Dledger是如何通过Raft协议进行选举的就很容易能够猜测出这个问题的答案。

Leader宕机后,自然是剩余的Follower重新发起新的一轮的选举了,然后还是按照老规矩,最后一定会选出一个Leader。

新的消息就由新选举出来的Leader来接收就可以了。

同时,由于数据同步是分为两阶段同步的,超过半数的机器返回ack才会认为是同步成功。

所以就算是在同步过程中Leader宕机了,其实Follower中已经同步了消息,只不过状态是uncommitted而已,新的Leader可以根据这些uncommitted的消息进行数据的恢复操作,更改消息状态为commited。

好了,这下子相信小伙伴们就能更好的理解Dledger了吧,那今天的文章就到这里了,下次见。 

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net