Placement Rule 规则疑问

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v4.0.7
  • 【问题描述】:
    请问Placement rule 官网文档中这个规则是什么含义:
cat > rules.json <<EOF
[
    {
        "group_id": "pd",
        "id": "rule1",
        "role": "voter",
        "count": 3,
        "location_labels": ["zone", "rack", "host"]
    },
    {
        "group_id": "pd",
        "id": "rule2",
        "role": "voter",
        "count": 2,
        "location_labels": ["zone", "rack", "host"]
    }
]
EOF
pd-ctl config placement save --in=rules.json

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

字段的具体含义

group_id

标识规则的创建者,不同创建者之间互不影响

id

group 内唯一标识,由创建者自行生成

index

适用多条规则时,控制调度时的适配顺序(group 内生效)

override

是否覆盖 index 更小的规则(group 内生效)

start_key

开始的 key,表示从哪一个 key 开始该规则生效

end_key

结束的 key,表示到哪一个 key 结束该规则就不再生效

role

Raft 算法当中的角色,包括:voterleaderfollower 以及 learner

count

所要添加角色的数量,特别的,对于 leader 而言,该值不能大于 1

label_constraints

用于过滤 store 的限制条件,支持通过 in, notIn, exists, notExists 四种原语来筛选 label

location_labels

用于实现根据拓扑进行隔离,与之前的意义相同

我的意思是在这个样例配置中,rule1rule2 两个规则都生效吗?是创建5个voter吗?

样例中并未设置start_key/end_key,规则是对哪些key生效?

同一个 GroupID 大的 rule 优先级更高,比如 rule2rule1 在字典序上更大,所以是采用 rule2 的策略,即 创建3个voter

默认是所有的 key 生效。

@leiysky 没设置 override 的话,确实是两个规则都生效的哦,也就是会创建出来 5 个副本。

看了下代码,group_id, rule_id, index 以及override这几个生效规则需要文档说明一下。
https://github.com/tikv/pd/blob/ee3832170b09e74093ae856692531d92dd619685/server/schedule/placement/rule.go#L137-L148

:+1:

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