使用Placement Policy后,非default策略的location_labels不再生效

在进行D区TiKV机器替换时发现,当使用了Placement policy​后,在扩缩容时,所有节点的Region都会增加/减少,并没有局限在D区内。Region变化曲线如下:

直接用pd-ctl看PD内的Placement Rule,两者内容如下

    1. 默认的全局策略,里边包含location_labels内容
{
    "group_id": "pd",
    "group_index": 0,
    "group_override": false,
    "rules": [
      {
        "group_id": "pd",
        "id": "default",
        "start_key": "",
        "end_key": "",
        "role": "voter",
        "is_witness": false,
        "count": 3,
        "label_constraints": [
          {
            "key": "disk",
            "op": "notIn",
            "values": [
              "sata",
              "sata-new",
              "dw-ssd"
            ]
          }
        ],
        "location_labels": [
          "zone",
          "dc",
          "host"
        ]
      }
    ]
  },
    1. 使用了Placement rule in SQL产生的则如下,缺少location_labels内容
      {
        "group_id": "TiDB_DDL_89632",
        "id": "partition_rule_89632_1",
        "index": 40,
        "start_key": "748000000000015eff2000000000000000f8",
        "end_key": "748000000000015eff2100000000000000f8",
        "role": "voter",
        "is_witness": false,
        "count": 2,
        "label_constraints": [
          {
            "key": "disk",
            "op": "in",
            "values": [
              "dw-ssd"
            ]
          },
          {
            "key": "engine",
            "op": "notIn",
            "values": [
              "tiflash"
            ]
          }
        ],
        "create_timestamp": 1706864872
      }

整理时候,好像想明白了,应该是我default策略组里加上label_constraints导致的。这里的设置导致default策略对disk in [ "sata", "sata-new", "dw-ssd"]的TiKV节点就无效了。而Placement rule in SQL本身就不会设置location-labels,所以确实会导致有这三个Label的TiKV数据分配失效,也就是同一region的多个副本可能在同一个机房内,当出现机房故障时,可能会丢数据

        "label_constraints": [
          {
            "key": "disk",
            "op": "notIn",
            "values": [
              "sata",
              "sata-new",
              "dw-ssd"
            ]
          }
        ],

官方文档里其实也提到了:

1 个赞

找到了官方文档https://docs.pingcap.com/zh/tidb/stable/placement-rules-in-sql#指定生存偏好 ,我后面设置下SURVIVAL_PREFERENCES试试

1 个赞

注意下 TiDB 版本,这个参数我记得需要比较高的版本。

想了一下,还是等过几天升级到7.5,直接用alter range来修复吧

大佬你们placement rules 用得挺深入的了。可以写系列专栏文章分享下经验

确实,6.5还没这个参数 :joy:,想修复也没办法修复。还是得靠升级到7.5版本解决。。

应该说是踩的坑多,其实很多经验/BUG在反馈后,在TiDB后边的版本就直接官方支持/修复了。

这个我之前上海一次活动分享过 哈哈哈哈 :dotted_line_face:

很复杂 :crying_cat_face:

多谢分享,mark

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