tikv 在启用 placement_rule 后无法自动补全 down-peer

【 TiDB 使用环境】生产环境 /测试/ Poc
测试环境
【 TiDB 版本】
v6.5.3
【复现路径】

  1. 设置 placement_rule 如下
[
  {
    "group_id": "pd",
    "id": "1",
    "start_key": "",
    "end_key": "",
    "role": "voter",
    "is_witness": false,
    "count": 2,
    "label_constraints": [
      {
        "key": "disk_type",
        "op": "in",
        "values": [
          "ssd"
        ]
      }
    ],
    "location_labels": [
      "host"
    ],
    "isolation_level": "host",
    "create_timestamp": 1706696121
  },
  {
    "group_id": "pd",
    "id": "2",
    "start_key": "",
    "end_key": "",
    "role": "follower",
    "is_witness": false,
    "count": 1,
    "label_constraints": [
      {
        "key": "disk_type",
        "op": "in",
        "values": [
          "mix"
        ]
      }
    ],
    "location_labels": [
      "host"
    ],
    "isolation_level": "host",
    "create_timestamp": 1706696121
  }
]
  1. 启动 8 个节点,其中 3 个节点 label disk_type=mix, 另外 5 个节点 label 为 disk_type=ssd, 然后灌入数据,可以观察到 mix 节点上没有 leader,这里是符合预期的。
  2. 强制下线其中一个 mix 节点,然后发现 down-peer 一直很高,未能恢复
  3. 在 disable placement-rule 之后 down-peer 开始正常恢复

我不知道这是 placement rule 本身实现的逻辑有问题导致的副本无法补全还是我的 policy 导致它无法补全

先看看pd的日志

没发现啥可疑的日志,就是在 disable placement rule 之后 down-peer-region 开始下跌

你这个规则我也没看出什么问题的。
要么就在出现down-peer 的时候,手动加一个 operator,添加副本,看看能不能加成功。
我对placement-rule了解不多,同时也等其他人解决

max-store-down-time 设置了多久?

手动添加副本是可以解决问题的,只是说 follower 节点挂了之后不能自动恢复
我在 github 上开了一个 issue 来看这个问题:
Down-peer-region can’t recover when enable placement-rule policy · Issue #16480 · tikv/tikv (github.com)

没有特别改过,应该是默认值 30m
值得注意的是我在 disable placement rule 之后集群立刻就能自动补全副本了,我怀疑问题是出在 placement rule 这里

感觉这个有点怪异,是有一个server部署了2个或者多个tikv吗?


另外,可以尝试下placement rule in sql

是的,我们有很多实例部署在 k8s 上
由于我们使用的是 rawkv,所以没有办法用 SQL 去定义
如果用 SQL 的话,实际的计划是什么样的?是不是也会有我这种问题呢?

  1. 有一个server部署了2个或者多个tikv的情况,那就不怪异了

我理解是通过sql接口配置placement,有没有同样的问题我不知道,只能说试试,高版本是推荐使用sql来配置的。但你使用的是rawkv
3. 我没啥好建议了,等等其他大佬或者看你的issue的答案吧

嗯嗯,感谢大佬的帮助

我怀疑是这个导致的,感觉你这么配置,是要求必须有一个follower副本在label disk_type=mix上。
自己通过PD配Placement Rule很容易出问题的。你这么做的背景是?想达到什么效果?看起来是想下线label disk_type=mix的三个节点?

6.5.3我记得是支持TiDB和RawKV共存的,甚至还建议有一个tidb-server节点

没tidb做不了gc :joy_cat:

你的问题可以看下PD面板,看看调度为啥不生成

schedule: fix the down peer cannot be repaired by rleungx · Pull Request #7996 · tikv/pd (github.com)

bug 在这个 pr 中被修复,感谢各位的帮助!