通过 label 调度副本测试
作者: h5n1 原文来源:https://tidb.net/blog/8898cbc5
【是否原创】是
【首发渠道】TiDB 社区
【首发渠道链接】其他平台首发请附上对应链接
【正文】
-— 如有错误,还请指正
一、 测试说明
版本:5.0.3
本文依照官方文档’通过拓扑 label 进行副本调度’的模拟测试,测试模拟 5 副本 3 个中心 (zone) 中其中一个 zone 完全隔离情况下的副本调度情况,测试内容如下:
1、 验证默认配置下 isolation_level 为空时,zone:z3 完全隔离情况下是否会将相同副本调度到同一主机
2、 验证 isolation_level=host 时,zone:z3 完全隔离情况下是否会将相同副本调度到同一主机
3、 验证 isolation_level=host、strictly-match-label=true 时,zone:z3 完全隔离情况下是否会将相同副本调度到同一主机
4、 验证 isolation_level=zone、strictly-match-label=true 时,zone:z3 完全隔离情况下是否会将相同副本调度到同一主机
5、 验证 zone:z1、zone:z3 完全隔离时测试系统状态和调度行为
6、 验证默认配置下 isolation_level 为空时,3 副本配置下是否会将相同副本调度到同一主机
7、 max-store-down-time 调整为 3 分钟,加快下线时间。
五副本测试配置如下:
二、测试过程
(1)isolation_level 为空
关闭 z3 2 个实例后,region2003 的副本分布由 2、7、10、12、13 调度为 1、2、7、10、12
(2)isolation_level=host
关闭 z3 2 个实例后,region 4 的副本分布由 1、2、7、13、14 调度为 1、2、7、12、14
(3)strictly-match-label=true
关闭 z3 2 个实例后,region 4 的副本分布由 1、2、7、13、14 调度为 1、2、7、12、14
(4)isolation_level=zone
关闭 z3 2 个实例后,region 4 的副本分布由 2、7、12、13、14 调度为 2、7、10、12、14
上述 4 个测试过程 region 分布如下,可以看到当 tidb 集群认为为 z3 内所有节点 down 后会将相同 region 的副本调度到同一主机的不同 tikv 实例。
(4) 关闭 z1、z3 所有实例
只保留 z2 里 2 个 tikv 实例情况下,查询数据 hang 住,查询 TIKV_REGION_PEERS 出现了异常状态信息:5 个副本全显示 NORMAL。
启动一个 tikv,保持有 3 个 tikv 在线 ,能够正常查询,2 个副本状态保持为 PENDING
(5)三副本测试
经测试与 5 副本一致,当关掉 1 台主机上的 2 个 tikv 实例后,tidb 会将副本调度其他主机,出现一台主机上 region 的多个副本的情况。
三 总结
1、 pd 会严格保证相同的 region 副本不会调度到同一 tikv 实例。
2、 至少要保证 副本数 /2+1 个 tikv 实例存活才能提供正常服务 (自动补副本或多副本失败恢复)。
3、 当出现 region 副本数 > 主机数量时,超过 max-store-down-time 后为保障副本数量满足配置要求会为 region 补充副本,会忽略 label 相同的设置,从而导致一台主机上有多个副本(一台主机有多个 tikv 时)。
4、推测若要副本按照预设的 label 调度保证隔离,需要主机、tikv 有足够的数量,否则就会出现 1 台主机多个副本情况
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/c97562bab72d3d8351ea1adac】。文章转载请联系作者。
评论