美文网首页
TiDB修改配置参数

TiDB修改配置参数

作者: 轻松的鱼 | 来源:发表于2020-12-30 17:46 被阅读0次

    在TiDB 中,“修改配置参数”似乎是个不精准的说法,它实际包含了以下内容:

    • 修改 TiDB 的系统变量
    • 修改集群配置
      - tiup 修改集群配置
      - set config 在线修改集群配置

    总结

    TiDB的配置修改比较混乱,先做个总结,再介绍具体内容:

    1. TiDB 的参数作用域分 global、instance、session 3个级别。show global variables 查看的是全局所有 TiDB Server 节点的变量设置;show variables 查看的是 instance 或者 session 级别的变量设置。注意不包括 PD、TiKV的配置;

    2. set global variables 是通过 kv 存储持久化的,不会持久化到 TiDB 的配置文件中,所以不用担心 tiup upgrade 和 tiup reload 等运维操作会把配置文件覆盖,不会导致修改失效,因为这个修改的持久化不依赖配置文件;

    3. set session variables 修改变量的作用域为 session 级别或者 instance 级别,只能临时修改变量,不会被持久化,所以如果要持久化,需要先手工修改目标 TiDB 的配置文件,并且用 tiup edit-config 来编辑参数,但不需要执行 tiup reload(这个操作会无差别的重启);

    4. TiDB 某些参数只读,无法通过 set variables 修改,使用 tiup edit-config && tiup reload 进行修改。不过目前官方文档只记录有3个只读变量:hostname、tidb_config、tidb_current_ts,作用域比较奇怪,介绍也不清楚,看起来没有修改的必要;

    5. set config 当前属于属于实验性功能,不建议在生产使用。目前只支持修改 TiKV 和 PD 的配置,TIDB的配置修改使用 set global/session variables 方法;

    6. set config 修改配置会持久化到配置文件,为了防止 tiup upgrade 和 tiup reload 等运维操作把配置文件覆盖导致修改失效,还需要执行 tiup edit-config 来编辑参数,不需要执行 tiup reload;

    7. set config 对于不可动态修改的配置不会报错,但是会有 warnings 信息,可通过 show warnings; 查看。对于不能动态修改的参数使用 tiup 进行修改:

    8. tiup edit-config && tiup reload 可以修改集群所有组件的参数并且持久化,但是 tiup reload 会无差别的滚动重启目标组件(不管修改的配置参数是否可以动态修改),注意加参数 [-N <nodes>] [-R <roles>] 减小重启组件范围。

    修改 TiDB Server系统变量

    查看TiDB系统变量:

    mysql> show global variables;
    ....
    
    mysql> show global variables like 'autocommit';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | autocommit    | 1     |
    +---------------+-------+
    
    全局修改:

    集群中所有 TiDB Server 都生效;

    • 只对新 TiDB 连接会话生效,当前活动连接会话不受影响;
    • 修改会被持久化,重启仍生效。
    mysql> set global autocommit=0;
    Query OK, 0 rows affected (0.02 sec)
    

    持久化在哪里?
    持久化在 kv 存储中,跟数据一样持久化了,不会持久化在 conf/tidb.toml 配置文件中。所以不用担心 tiup upgrade 和 tiup reload 等运维操作会把配置文件覆盖,不会导致修改失效,因为这个修改的持久化不依赖配置文件。

    会话级修改:

    有些参数的作用域只有会话级别。也就是只能会话级修改,这不代表着不能被动态修改。

    • 当前TiDB实例的当前会话生效;
    • 修改不会被持久化,重启失效(显然的)。
    mysql> set session autocommit=1;
    Query OK, 0 rows affected (0.00 sec)
    
    Instance级修改:
    • 当前TiDB实例的所有会话生效;
    • 修改不会被持久化,重启失效。

    修改方式和会话级修改一样:

    mysql> set session tidb_slow_log_threshold=1000;
    Query OK, 0 rows affected (0.00 sec)
    

    修改 Instance 级别的参数修改不会持久化,那么如何持久化呢?
    a. 手工修改 TiDB 的配置文件:

    [root@localhost data]# vim tidb-deploy/tidb-4000/conf/tidb.toml
    [log]
    slow-threshold = 1000
    

    b. 并使用 tiup edit-config 来修改对应的配置项,不需要做 tiup reload:

    tiup cluster edit-config tidb-test
    

    内容如下:

    tidb_servers:
    - host: 10.186.64.59
      ...
      config:
        log.slow-threshold: 1000
      ...
    
    只读变量修改:

    目前查看官方文档,发现只有3个只读变量:hostname、tidb_config、tidb_current_ts,没法通过 set variables 修改。作用域比较奇怪,用法介绍也不清楚,看起来没有修改的必要。如果一定要修改可以通过 tiup 方法修改。

    修改集群配置

    使用 tiup 修改集群配置

    修改集群配置包括TiDB、TiKV 以及 PD 在内的各组件的配置进行修改。

    1. tiup edit-config

    使用 edit-config 命令来编辑参数,以编辑模式打开该集群的配置文件:

    tiup cluster edit-config tidb-test
    

    如果配置的生效范围为该组件全局,则配置到 server_configs,比如修改所有 tikv 的 log-level 为 waring(默认是 info):

    server_configs:
      tidb:
    ...
      tikv:
        log-level: warning
        readpool.coprocessor.use-unified-pool: true
        readpool.storage.use-unified-pool: false
    ...
    

    如果配置的生效范围为某个节点,则配置到具体节点的 config 中。例如:

    tidb_servers:
    - host: 10.186.64.59
      ...
      config:
        log.slow-threshold: 1000
      ...
    
    1. tiup reload

    tiup reload 分发配置并滚动重启组件,无论是否可以动态修改的参数都会重启,并且默认会重启所有组件,可以选择指定节点或者组件:
    tiup cluster reload ${cluster-name} [-N <nodes>] [-R <roles>]

    示例中我们只修改 tikv 的 log-level 为 waring,所以用 -R tikv 指定只重启 tikv 节点:

    tiup cluster reload tidb-test -R tikv
    
    会滚动重启 TiKV 服务,防止服务不可用:
    set config 在线修改集群配置

    set config 当前4.0版本属于实验性功能,不建议在生产使用:https://docs.pingcap.com/zh/tidb/stable/dynamic-config
    目前只支持修改 TiKV 和 PD 的配置,TIDB的配置修改用上面的 set variables 方法。

    查看当前参数设置:

    mysql> show config;
    ...
    ##可以加条件进行筛选
    mysql> show config where  name like '%log-level%';
    +------+--------------------+-----------+-------+
    | Type | Instance           | Name      | Value |
    +------+--------------------+-----------+-------+
    | tikv | 10.186.64.59:20160 | log-level | info  |
    | tikv | 10.186.64.30:20160 | log-level | info  |
    | tikv | 10.186.64.60:20160 | log-level | info  |
    +------+--------------------+-----------+-------+
    3 rows in set (0.02 sec)
    

    用 set config 修改参数,会持久化到配置文件。log-level 无法动态修改,不会报错但是会有 warnings,对于不能动态修改的参数使用 tiup 进行修改:

    mysql> set config tikv log-level="debug";
    Query OK, 0 rows affected, 3 warnings (0.09 sec)
    
    mysql> show warnings;
    +---------+------+-----------------------------------------------------------------------------------------------------------------+
    | Level   | Code | Message                                                                                                         |
    +---------+------+-----------------------------------------------------------------------------------------------------------------+
    | Warning | 1105 | bad request to http://10.186.64.59:20180/config: failed to update, error: "config log-level can not be changed" |
    | Warning | 1105 | bad request to http://10.186.64.30:20180/config: failed to update, error: "config log-level can not be changed" |
    | Warning | 1105 | bad request to http://10.186.64.60:20180/config: failed to update, error: "config log-level can not be changed" |
    +---------+------+-----------------------------------------------------------------------------------------------------------------+
    3 rows in set (0.00 sec)
    

    动态修改示例:

    mysql> show config where name like 'split.qps-threshold';
    +------+--------------------+---------------------+-------+
    | Type | Instance           | Name                | Value |
    +------+--------------------+---------------------+-------+
    | tikv | 10.186.64.59:20160 | split.qps-threshold | 200   |
    | tikv | 10.186.64.30:20160 | split.qps-threshold | 200   |
    | tikv | 10.186.64.60:20160 | split.qps-threshold | 200   |
    +------+--------------------+---------------------+-------+
    3 rows in set (0.02 sec)
    
    mysql> set config tikv split.qps-threshold=1000;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> show config where name like 'split.qps-threshold';
    +------+--------------------+---------------------+-------+
    | Type | Instance           | Name                | Value |
    +------+--------------------+---------------------+-------+
    | tikv | 10.186.64.59:20160 | split.qps-threshold | 1000  |
    | tikv | 10.186.64.30:20160 | split.qps-threshold | 1000  |
    | tikv | 10.186.64.60:20160 | split.qps-threshold | 1000  |
    +------+--------------------+---------------------+-------+
    3 rows in set (0.02 sec)
    

    虽然TiKV的配置文件 conf/tikv.toml 会持久化这个修改,但是为了防止tiup upgrade 和 tiup reload 等运维操作把配置文件覆盖导致修改失效,还需要执行 tiup edit-config 来编辑参数。

    相关文章

      网友评论

          本文标题:TiDB修改配置参数

          本文链接:https://www.haomeiwen.com/subject/yjghoktx.html