两地三中心五副本。若同城两中心出现网络不通,对tidb的影响?

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】

【问题描述】
两地三中心五副本(2-2-1),同城A/B机房,异地C机房。Tikv region Leader 使用labels均限制在A/B机房。A/B机房存在多个TIDB计算节点,同时读写。
问题:若同城A/B两中心网络不通,但都和第三机房C机房网络通,对tidb的影响?


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

1、会触发选举,因为 PD 会在其中一个机房是工作状态,如果发现其他机房网络一场,那对应的 TiKV region group 就会触发新一轮选举,最终选出新的 Leader 提供服务。
2、选举完成以后,另外一个机房的 leader 会驱除或者被选为 follower ;
3、可能会有一定响应时间影响,建议具体进行测试。

简单做了测试:
步骤如下:
在A/B两个机房服务器的iptables里面同时加入对端的ip限制。
#iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP
现象:
1.PD Leader 不会切换,原来在A机房,还是在A机房
2.TiKV 会触发选举机制。但是各节点的tikv的leader数未发生变化。此时,关闭B机房的一个Tikv节点。各节点的Leader数开始发生变化
3.A机房的TIDB,能正常连接。部分查询会出现ERROR 9002 (HY000): TiKV server timeout或者ERROR 9005 (HY000): Region is unavailable。 B机房的TIDB节点,不能正常连接,登录的时候就会卡住

同城机房网络不能连通这种情况极少会出现。如果出现这种情况,感觉应该是需要人工介入处理,例如手动关闭B机房TIKV节点。

技术上讲,这种情况由于 AB 两机房的 region 都能构成大多数,所有 region 都可以选出 region leader;PD 的话只有一边能构成大多数,因此 AB 机房只有一边能出现 PD leader。这也是很可怕的一点,整个集群在网络隔离状态下是认为自己可以正常提供服务的。
但此时应用只有通过 PD leader 所在机房发起请求,且要连接到本机房的 tidb-server,才可以访问集群的部分数据(leader 位于本机房的 region)。另外由于这些 region 只剩下 3 副本可用,需要同步写异地副本,因此此时集群的写入延迟会非常高。
采用这种拓扑部署集群的话,需要配置动态路由,当 AB 之间物理线路断开时,AB 间的通信可以绕过异地的 C 机房进行,这种情况交易的延迟会显著升高,但数据都可以访问。

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。