在线修改集群配置
在线配置变更主要是通过利用 SQL 对包括 TiDB、TiKV 以及 PD 在内的各组件的配置进行在线更新。用户可以通过在线配置变更对各组件进行性能调优而无需重启集群组件。但目前在线修改 TiDB 实例配置的方式和修改其他组件 (TiKV, PD) 的有所不同。
可以通过 SQL 语句 来直接查看集群所有实例的配置信息,结果如下:
+------+-----------------+-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Type | Instance | Name | Value |
+------+-----------------+-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tidb | 127.0.0.1:4001 | advertise-address | 127.0.0.1 |
| tidb | 127.0.0.1:4001 | binlog.binlog-socket | |
| tidb | 127.0.0.1:4001 | binlog.enable | false |
| tidb | 127.0.0.1:4001 | binlog.ignore-error | false |
| tidb | 127.0.0.1:4001 | binlog.write-timeout | 15s |
| tidb | 127.0.0.1:4001 | check-mb4-value-in-utf8 | true |
...
还可以根据对应的字段进行过滤,如:
show config where type='tidb'
show config where instance in (...)
show config where name like '%log%'
show config where type='tikv' and name='log-level'
执行 SQL 语句 ,可以结合实例地址或组件类型来修改单个实例配置或全部实例配置,如:
修改全部 TiKV 实例配置:
set config tikv `split.qps-threshold`=1000
修改单个 TiKV 实例配置:
set config "127.0.0.1:20180" `split.qps-threshold`=1000
设置成功会返回 Query OK
:
在批量修改时如果有错误发生,会以 warning 的形式返回:
set config `tikv log-level`='warn';
Query OK, 0 rows affected, 1 warning (0.04 sec)
+---------+------+---------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------------------------------------------------------+
| Warning | 1105 | bad request to http://127.0.0.1:20180/config: fail to update, error: "config log-level can not be changed" |
+---------+------+---------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
批量修改配置不保证原子性,可能出现某些实例成功,而某些失败的情况。如使用 set tikv key=val
命令修改整个 TiKV 集群配置时,可能有部分实例失败,请执行 show warnings
进行查看。
如遇到部分修改失败的情况,需要重新执行对应的修改语句,或通过修改单个实例的方式完成修改。如果因网络或者机器故障等原因无法访问到的 TiKV,需要等到恢复后再次进行修改。
针对 TiKV 可在线修改的配置项,如果成功修改后,修改的结果会被持久化到配置文件中,后续以配置文件中的配置为准。某些配置项名称可能和 TiDB 预留关键字冲突,如 limit
、key
等,对于此类配置项,需要用反引号 `
包裹起来,如 `raftstore.raft-log-gc-size-limit`
。
支持的配置项列表如下:
- 当
db-name
为rocksdb
时,cf-name
的可取值有:defaultcf
、writecf
、lockcf
、raftcf
; - 当
db-name
为raftdb
时,cf-name
的可取值有:defaultcf
。
具体配置项的意义可参考 TiKV 配置文件描述
PD 暂不支持单个实例拥有独立配置。所有实例共享一份配置,可以通过下列方式修改 PD 的配置项:
设置成功会返回 Query OK
:
Query OK, 0 rows affected (0.01 sec)
针对 PD 可在线修改的配置项,成功修改后则会持久化到 etcd 中,不会对配置文件进行持久化,后续以 etcd 中的配置为准。同上,若和 TiDB 预留关键字冲突,需要用反引号 `
包裹此类配置项,例如 `schedule.leader-schedule-limit`
。
支持配置项列表如下:
具体配置项意义可参考 。
在线修改 TiDB 配置的方式和 TiKV/PD 有所不同,用户通过系统变量来完成修改。
下面例子展示了如何通过变量 tidb_slow_log_threshold
在线修改配置项 slow-threshold
。
set tidb_slow_log_threshold = 200;
select @@tidb_slow_log_threshold;
支持在线修改的配置项和相应的 TiDB 系统变量如下: