TIDB集群断网测试问题

问题一

mysql> select * from test.sbtest7;ERROR 9012 (HY000): TiFlash server timeout

因为只添加了一个 tiflash 副本,因为断网的那台机器上的 tiflash region 连不上,所以 server timeout 符合预期,想要规避这种现象,可以添加两个 tiflash 副本进行验证。

问题 二

select /*+ READ_FROM_STORAGE(TIKV[sbtest7]]) */ * from test.sbtest7;ERROR 9005 (HY000): Region is unavailable

  1. 如果删除的副本所在 leader 正好在这台断网的机器上,因为 raft 要 2-10 s 之后才会重新选主,所以那一瞬间会爆 region is unavailable. 另外还有一个问题是,这台机器断网后,如果需要选主的 region 特别多,这会儿可能会卡,但是最终都会选主 region leader, 恢复正常查询。

但是在 raft 重新选主后,就可以查到结果了,在测试机器上已经复现:

mysql> select /+ READ_FROM_STORAGE(tikv[sbtest7]) / count() from sbtest7;
±---------+
| count(
) |
±---------+
| 5000 |
±---------+
1 row in set (0.01 sec)

所以是不是等待时间太短,还没来得及选主?等个几分钟看看有没有类似的错误?

另外,需要注意的一点是, 在 leader 所在节点断网后,pd 虽然会发现,但是选主的操作是 tikv 进行的。如果遇到静默 region, 选主的操作则会等待更久。