通过label调度副本测试
一、 测试说明
版本: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台主机多个副本情况。