MrSylar
( Mr.Sylar)
1
【问题】
关于 tikv 实例的 Label 设置有一个疑问:假定部署在同一台主机的两个 tikv 实例:tikv1、tikv2 ,它的label 设置可以是
1)dc1、zone1、host1 , dc1、zone1 、host1
2)dc1、zone1、host1 , dc1、zone1 、host2
这两种设置对于 pd 副本调度的区别是什么(假定集群是 3 台主机部署 3 副本,zone 级别满足 副本要求:zone1、zone2、zone3) 。 我之前认为对于 第一种设置,如果其中一个 tikv 实例:tikv1 挂掉以后,是不会在 tikv2 补副本的,而第二种会,但实际测试第一种也会。糊涂了。。
Denis
2
PD 调度时会尽量避免把多个副本放在同一个 host 上,但当已有副本丢失需要补齐时,如果没有更优选择,仍然可能把补副本放到同一 host 上的另一个实例。
舞动梦灵
(Ti D Ber Nckmz Hmh)
3
只有两个没必要哦设置label,设置label要么跨机房。用来分辨不同机房的tikv服务器。或者不跨机房的时候不同机架,分辨。就算同一个机架,至少也要3台以上,
你说的tikv1挂掉以后。如果你只有2个tikv,3个副本平分在2个tikv上面。他必须补充副本,但是他补充副本无论你怎么设置标签,他都会吧已经有2副本,仅丢失tikv1上面1个副本的数据去补充道tikv2上面。如果有tikv多台。他会补充道其他tikv上面,他会尽量吧多个副本放在不同服务器。
MrSylar
( Mr.Sylar)
4
不是的,集群完整拓扑应该 3 台机器 存放 3 副本,每一台机器上都有两个tikv实例:tikv1、tikv2,也是 每台机器上的 两个tikv实例只存 一副本。这个情况下 如果一台机器上的其中一个实例 挂掉,那 集群会不会在同一台机器上的另外一个实例补副本:测试结果是无论这两个实例的 label 中的 host 是否一样(dc 和 zone 也一样),都会补齐。我不明白为什么,可能像楼上解释的那样
3个机器,3副本,6个实例(每个机器上两个tikv实例),假如a机器上的实例有a1和a2,如果是 1)dc1、zone1、host1 , dc1、zone1 、host1配置,同一个region的最多只有1个副本能存在a1或者a2上,也就是a机器上只能最多存在同一个region的一个副本,这种情况,如果a1挂掉,上面的所有副本都是可以迁移到a2上的;如果是 2)dc1、zone1、host1 , dc1、zone1 、host2,则可能出现同一个region的最多各有个副本能存在a1和a2上,也a机器上最多能存在同一个region的两个副本,这种情况,如果a1挂掉,上面的副本如果和a2上不属于一个region,也是可以迁移到a2上的,如果是一个region的,无法迁移。
其实这两种配置最大的用处是为了防止a机器整个挂掉,如果是2)dc1、zone1、host1 , dc1、zone1 、host2,则可能出现同一个region的最多各有个副本能存在a1和a2上,也a机器上最多能存在同一个region的两个副本,这种情况下,a机器挂掉,这种region直接报废,集群都无法使用了。但是如果是配置1)dc1、zone1、host1 , dc1、zone1 、host1配置,同一个region的最多只有1个副本能存在a1或者a2上,也就是a机器上只能最多存在同一个region的一个副本,所有的region都不影响使用,集群还能正常使用。
MrSylar
( Mr.Sylar)
6
这样理解的话就是设置为 host1 或 host2 都可能会补副本,区别是 设置为相同的 host1,是在没有更好的选择的时候才会用来补副本,而设置为 host2 就是“更好的选择”?
MrSylar
( Mr.Sylar)
7
再请教下,这里我有一点没太明白。因为还有上一层 的 label :zone 这个层级,它的 3 个不同值应该能保障 同一个zone 下面不会出现两个副本?也就是上面内容中的“a机器上最多能存在同一个region的两个副本”疑惑?
舞动梦灵
(Ti D Ber Nckmz Hmh)
8
哦哦懂你意思了,你是想着一个服务器上面挂两个磁盘,当做两个tikv实例来存放数据是吧。
这种和一楼说的差不多,会尽可能放在不同服务器其他实例上。
当然我说的是理想情况, 实际调度是根据下面的原则来的:
- 调度优先级:PD会优先考虑高层级的标签隔离。例如,在
["zone", "dc", "rack", "host"]
配置中,PD会首先确保副本分布在不同的zone,然后是不同的dc,以此类推。
- 最大隔离级别:PD会尽可能在最高级别上实现副本隔离。如果副本数量超过某一级别的故障域数量,PD会尝试在下一级别上实现隔离。
实际上建议,例如你同一个机器打标为同一个host,一个机架打标为一个rack,一个机房打标为一个dc,一个城市打标为一个zone,类似这样,会尽量避免一个区域存放同一个region的不同副本,避免一个机器,或者整个机架,或者整个机房,甚至整个城市对应的服务器故障影响你的集群正常使用。
MrSylar
( Mr.Sylar)
10
就是说部署集群的时候建议同一个机器的所有 tikv 实例的 label 定义相同,像问题中 1)中这种?我之前一直都是认为应该 2)这种设置。现在也还是没太明白 2)的问题是什么,感觉有上层的 label 约束下,肯定不会出现某台 host 有 2个副本的情况
对,建议是像1这样,同一个机器,定义host一致,同一个机架上的,定义rack一致。
label,你理解为越不一样越能存储同一个region的不同的副本即可。
2的问题是如果向我说的那样,一个机房有abc三台机器,每个各有2个实例,那他们的dc1、zone1肯定是一样的,如果6个节点的host分别设置host1-6的话,一个region的两个副本是有可能分布在一个机器的两个节点上的
lllzd
(时光旅行者)
13
pd默认只在zone级别保证隔离, 不会在host级别隔离。