探讨TiDB 三中心"脑裂"场景

Tiit 427 2024-03-25

TiDB 以其卓越的高可用性而闻名。然而,在跨多个数据中心进行部署时,数据中心之间的特殊网络拓扑可能带来额外的可用性挑战。让我们详细分析在多数据中心部署环境中,特定的网络拓扑是如何对系统的整体可用性产生影响的。

ins.png

部署架构简述:

  • 云下 A、B 两中心提供服务,两中心对等,无服务优先级顺序

  • 云上 C 中心不提供服务,但存储数据,作用类似仲裁节点

  • Region Leader 优先位于 A、B 两中心之内

  • Pd Leader 优先位于 A、B 两中心之内

  • 应用仅部署在 A、B 机房中,应用访问不考虑本地亲和性

具体配置可参照 双区域多 AZ 部署 TiDB

场景一

1-1.PNG

第一阶段:A 机房和 C 机房间网络断开(半断开 C)

预期情况:A、B 机房均可提供完整的服务

说明:读写由 A、B 机房同时提供,C 机房不提供服务,A 机房和 C 机房之间网络断开后:

  • 从 Region Leader 角度看

    • A 机房有 Leader:A 机房仍然可以和 B 机房组成子区域,满足多数派

    • B 机房有 Leader:B 机房仍然可以和 A、C 机房组成子区域,满足多数派

  • 从应用角度看:

    • A 机房可访问 A、B 机房的数据

    • B 机房可访问 B、A 机房的数据

因此 A、B 机房均可提供完整的服务

1-2.PNG

第二阶段:在 1 的基础上增加 B 机房和 C 机房间网络断开(完全断开 C)。

预期情况:A、B 机房均可提供完整的服务

说明: 读写由 A、B 机房同时提供,C 机房被完全隔离:

  • 从 Region Leader 角度看

    • A 机房有 Leader:A 机房仍然可以和 B 机房组成子区域,满足多数派

    • B 机房有 Leader:B 机房仍然可以和 A 机房组成子区域,满足多数派

  • 从应用角度看:

    • A 机房可访问 A、B 机房的数据

    • B 机房可访问 B、A 机房的数据

因此 A、B 机房均可提供完整的服务

场景二

2-1.png

第一阶段:调整 C 机房可承载 Region Leader ;A 机房和 C 机房间网络断开(半断开 C)

预期情况: A 机房不可提供完整的服务,B 机房可提供完整的服务

说明: 读写由 A、B、C 机房同时提供, A 机房到 C 机房网络断开后:

  • 从 Region Leader 角度看

    • A 机房有 Leader:A 机房仍然可以和 B 机房组成子区域,满足多数派

    • B 机房有 Leader:B 机房仍然可以和 A、C 机房组成子区域,满足多数派

    • C 机房有 Leader:C 机房仍然可以和 B 机房组成子区域,满足多数派

  • 从应用角度看:

    • A 机房可访问 B 机房的数据,不能访问 C 机房的数据

    • B 机房可访问 A、C 机房的数据

因此,B 机房可提供完整的服务;A 机房无法提供完整的服务,其访问 B 时正常,而其访问 C 时会报错。

2-2.png

第二阶段:B 机房和 C 机房间网络断开(完全断开 C)

预期情况:A、B 机房均可提供完整的服务

说明: 读写由 A、B、C 机房同时提供,C 被完全隔离

  • 从 Region Leader 角度看

    • A 机房有 Leader:A 机房仍然可以和 B 机房组成子区域,满足多数派

    • B 机房有 Leader:B 机房仍然可以和 A 机房组成子区域,满足多数派

    • C 机房没有 Leader

  • 从应用角度看:

    • A 机房可访问 B 机房的数据

    • B 机房可访问 A 机房的数据

因此 A、B 机房均可提供完整的服务

场景三

3-1.png

第一阶段:A机房和B机房间网络断开(半断开B)

预期情况: A、B 机房都不可以提供完整的服务

说明: 读写由 A、B 机房同时提供, A 机房到 B 机房网络断开后:

  • 从 Region Leader 角度看

    • A 机房有 Leader:A 机房仍然可以和 C 机房组成子区域,满足多数派

    • B 机房有 Leader:B 机房仍然可以和 C 机房组成子区域,满足多数派

  • 从应用角度看:

    • A 机房无法访问 B 机房的数据,A 机房可能可以访问 A 机房的数据(取决于 PD Leader 所在)

    • B 机房无法访问 A 机房的数据,B 机房可能可以访问 B 机房的数据(取决于 PD Leader 所在)

因此, A、B 机房都不可以提供完整的服务,仅可能提供 Region Leader 位于自身时的数据服务

3-2.png

第二阶段:B 机房和 C 机房间网络断开(完全断开 B)。

预期情况: A 机房可以提供完整的服务,B 机房无法提供服务

说明: 读写由 A、B机房同时提供,B机房被完全隔离

  • 从 Region Leader 角度看

    • A 机房有 Leader:A 机房仍然可以和 C 机房组成子区域,满足多数派

    • B 机房没有有 Leader

  • 从应用角度看:

    • A 机房可以访问 A 机房的数据

    • B 机房不可以访问 A 机房的数据

因此, A 机房可以提供完整的服务,B 机房无法提供服务

需要注意的是:B 机房历经从半断开到完全断开

  • 在半断开时:A、B 机房都无法访问对方的数据,但可能能读写自己的数据(取决于 PD Leader 的位置)。此时写入 B 的数据在 B、C 上有相同的副本,A上没有。

  • 当 B 完全断开时:B 不满足多数派,其上的 region leader 由 A、C 重新发起选举,但由于 A 上的部分数据不是最新,只能由 C 先成为 leader,在补完数据后再将 leader 转移给 A(机制上每60秒检查一次,进行 leader 的转移)

  • 多中心架构中 C 机房按建议配置 raft-min-election-timeout-ticks/raft-max-election-timeout-ticks 参数限制 C 上的副本发起选举时间,即该极端场景下需等待 raft-max-election-timeout-ticks时间后,C 才会发起选举,并成为leader

因此,raft-min-election-timeout-ticks/raft-max-election-timeout-ticks 不建议设置的过大,建议设置在 60S 以内。

总结

4.png

image.png


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java jdbc 驱动 maxPerformance 配置避坑的方法
下一篇:从银行资产规模看TiDB上线杭州银行核心有什么深远的意义?
相关文章