TiDB如何修改默认的PLACEMENT POLICY?

TiDB 版: 6.1.1
期望
新加了三台SATA盘的TiKV,希望不触发正常表region调度,让只有少数的几个历史分区放在上边。默认情况下,TiDB的数据写入会尽可能均匀,新加入的SATA盘机器上也会新的region写入(因为是新加节点,还会触发正常的rebalance)。但是我其实是不希望这些机器上有正常数据写入的,因为SATA盘读写性能都很差。

问题
现在想到的办法是,创建两个PLACEMENT POLICY,让正常的表用on_ssd这个策略,冷数据用on_sata策略。策略如下:

CREATE PLACEMENT POLICY on_ssd CONSTRAINTS="[-disk=sata]";
CREATE PLACEMENT POLICY on_sata CONSTRAINTS="[+disk=sata]";

不过看官方文档的placement-rules-in-sql说明,只能新建PLACEMENT POLICY,然后对特定的库/表/分区来设置。其中还有一条:

注意分区与表之间的继承和这里的继承不同。改变表的放置策略,也会让分区应用新的策略。但是只有建表时没有指定放置策略的时候,表才会从数据库继承放置策略,且之后再改变数据库也不影响已经继承的表。

也就是说,我需要针对现存的每个库每个表,都手动执行一下ALTER TABLE t2 PLACEMENT POLICY=on_ssd;;后续如果新加库的话,也需要明确指定用on_ssd的PLACEMENT POLICY。

需求:
有没有办法修改默认的PLACEMENT POLICY(也就是不主动指定PLACEMENT POLICY时的表)? 或者设置TiKV为默认不参与正常的数据写入调度,但是允许在PLACEMENT POLICY里明确指定这些节点的表写入数据。

我这么理解可以不可以:
1.可以设置数据库级别的默认放置策略,新建表默认继承数据库的放置策略,除非特殊指定
2.对于以前的表,需要是手动指定放置策略

以上的默认放置策略,是按照库级别指定的,没有全局策略,按说一个tidb实例上库级别的默认放置规则配置的工作量是可接受的。

参考:

这个也是个坑,我已经编了个简单的脚本,把所有表都设置为on_ssd了。不过后续新建库,如果忘加on_ssd的规则的话,还是可能把数据放到SATA盘机器上。。

这是个管理和技术的问题,如果管理上有困难,确实需要技术上做一些补充,有个默认值啥的

临时的解决办法只能是这样了。不过还是建议官方加个参数,来支持调整。


虽然没办法通过Placement Rules in SQL方式来更改default的策略,但是可以通过pd-ctl来更改。这里实测在default rule中加入以下规则,可以让默认的数据(不加任何PLACEMENT POLICY)不写入到label里包含disk=sata的TiKV节点。

      "label_constraints": [
      {
        "key": "disk",
        "op": "notIn",
        "values": [
          "sata"
        ]
      }
      ]

完整的配置和操作步骤为:

[tidb@prod-tiup-f01 ~]$ cat default-rule.json 
{
  "group_id": "pd",
  "group_index": 0,
  "group_override": false,
  "rules": [
    {
      "group_id": "pd",
      "id": "default",
      "start_key": "",
      "end_key": "",
      "role": "voter",
      "count": 3,
      "label_constraints": [
      {
        "key": "disk",
        "op": "notIn",
        "values": [
          "sata"
        ]
      }
      ],
      "location_labels": [
        "zone",
        "dc",
        "host"
      ]
    }
  ]
}
[tidb@prod-tiup-f01 ~]$ tiup ctl:v6.1.1 pd -u ****:2379 -i
Starting component `ctl`: /home/tidb/.tiup/components/ctl/v6.1.1/ctl pd -u ****:2379 -i
» config placement-rules rule-bundle set pd --in="default-rule.json"

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