• dledger 自问自答


    1. 为什么说 leader 和 follower 之间的日志复制是并行的?

    leader 首先接收客户端的 append 日志,写入本地,然后把 DledgerEntry 放入缓冲(pendingAppendResponsesByTerm)中,leader 对应每个 follower 会创建一个 EntryDispatcher 对象,EntryDispatcher 中有一个 writeIndx 属性,EntryDispatcher 其中一个功能是把 leader 的 writeIndex 中的日志推送到 follower 中,当推送的日志收到 follower 的成功响应后,更新 follower 的写入成功的 index,QuorumAckChecker 负责检查所有 follower 写入成功的 index,超过半数的 followers 写入成功,则提交该 index。QuorumAckChecker 再根据提交的 index 来清除 pendingAppendResponsesByTerm 中的 DledgerEntry。

    2. leader push 日志给 follower,follower 同步日志失败,怎么处理?

    2.1 当请求的 index 和 term 和 follower 本地日志不相等时,follower 会拒绝写入当前日志,leader 根据 follower 返回的响应,发现该 follower 和 leader 不一致,则开始比较模式,重新确定 leader 中该 follower 对应的 writeIndex。

    2.2 follower 日志写入本地成功,但是返回给 leader 的响应由于网络失败,。。。

    2.3 follower 日志写入本地失败,返回给 leader 明确的响应失败,触发 leader 重新 compare

    3. dledger 节点的 term 什么时候增加?

    三节点集群,在当前任期的选举中,如果每个节点只获得一张投票(即选票被瓜分),则节点等待随机时候后,增加任期,开始下一任期的拉票选举。

    4. commit 的动作什么时候做?

    当 leader 的 QuorumAckChecker 发现 quorumIndex 大于自身的 committedIndex 时,会先更新自身的 committedIndex。leader 的 EntryDispatcher 推送日志给 follower 时,如果 writeIndex 大于了 dledgerEndIndex,会把 committedIndex 推送给 follower。follower 会对请求的 committedIndex 和本地的 endIndex 进行比较,再决定是否更新。

    5. leader 发送心跳给 follower,如果 follower 发现自己的任期比 leader 大,则发送响应给 leader,leader 增加任期,转换为 candidate,重新拉票。

    6. client 发送日志给 leader,leader 写入本地 data 和 index 文件后,还没来得及写入 follower,遇到宕机,这时候咋办?

    假设 3 节点集群, 剩下 2 个 follower,其中一个选举成为 leader,开始对外提供服务,当原来的 leader 启动完成加入集群后,现在 leader 会对它进行日志比较,把原来的旧记录给截断掉。

    7. 关于选举

    假设 3 节点集群,第一次启动,3 个节点初始任期都为 0,开始拉票,3 个节点都只给自己投票,则选票被瓜分,对于每一个节点,acceptedNum 为 1, validNum 为 3,则各自随机等待一段时间,任期加一,开始新一轮拉票,必然有一个节点先开始拉票,它有很大概率成为 leader。

    假设 3 节点的集群,只有 2 个节点在线,其中一个为 leader,当第 3 个节点上线了,它开始拉票,第三个节点的任期小于或等于 leader 的任期,它会故意等一段时间,等 leader 的心跳,收到 leader 的心跳后,它就成为 follower(dledger 的做法是迅速同步任期,处于同一任期后,它再次接收 leader 的心跳成为 follower)。

  • 相关阅读:
    JSON格式
    多行写入
    文件对象write() and read()
    一个虚拟摄像头Filter(Virtual Cam Capture Filter)
    五十种最好的开源爬虫
    web scraper 里的 Element click 模拟点击「加载更多」
    介绍一款好用又易学的爬虫工具:web scraper
    安装宝塔面板后 ,centos系统 挂载硬盘 或者 数据盘和系统盘合并
    帝国CMS恢复搜索功能 增加搜索数据源设置教程
    安装帝国CMS步骤 和恢复数据
  • 原文地址:https://www.cnblogs.com/allenwas3/p/12456279.html
Copyright © 2020-2023  润新知