【发布时间】:2017-06-02 01:55:07
【问题描述】:
- 7 个成员集群,其中一个是领导者。
- Leader 尝试复制日志(一些写入)
- 发生网络分区。分别有 3 名和 4 名成员。
- 领导者最终进入少数派分区
- Leader 只达到 2 个 Follower → 复制失败
在这种情况下会发生什么?
据我了解:2 个追随者应用了“错误”写入,当网络分区修复时,他们将用多数领导者的历史记录覆盖该写入。但这违反了线性化。
??????
【问题讨论】:
在这种情况下会发生什么?
据我了解:2 个追随者应用了“错误”写入,当网络分区修复时,他们将用多数领导者的历史记录覆盖该写入。但这违反了线性化。
??????
【问题讨论】:
您将复制与承诺混淆了。仅仅将一个条目复制到这个集群的少数并不会破坏线性化。重要的是何时将更改视为已提交。由于分区少数方的领导者无法将更改复制到集群的大多数人,因此它永远不会提交更改,也永远不会向客户端确认更改已被持久化。此外,未提交的更改将永远不会应用于任何节点上的状态机。因此,在分区修复时覆盖未提交的更改不会破坏任何保证。
只有当领导者增加 commitIndex 并在仅复制到少数集群后确认写入时,保证才会被打破。
【讨论】: