dba-kit
(张天师)
1
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里明确指定这些节点的表写入数据。
数据小黑
(数据小黑)
2
我这么理解可以不可以:
1.可以设置数据库级别的默认放置策略,新建表默认继承数据库的放置策略,除非特殊指定
2.对于以前的表,需要是手动指定放置策略
以上的默认放置策略,是按照库级别指定的,没有全局策略,按说一个tidb实例上库级别的默认放置规则配置的工作量是可接受的。
参考:
dba-kit
(张天师)
3
这个也是个坑,我已经编了个简单的脚本,把所有表都设置为on_ssd
了。不过后续新建库,如果忘加on_ssd
的规则的话,还是可能把数据放到SATA盘机器上。。
数据小黑
(数据小黑)
4
这是个管理和技术的问题,如果管理上有困难,确实需要技术上做一些补充,有个默认值啥的
dba-kit
(张天师)
5
临时的解决办法只能是这样了。不过还是建议官方加个参数,来支持调整。
dba-kit
(张天师)
6
虽然没办法通过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"
system
(system)
关闭
7
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。