在线修改pd参数疑问

【 TiDB 使用环境】测试
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
在官方文档: 在线修改集群配置 | TiDB 文档中心 (pingcap.com) 中说到:
PD 暂不支持单个实例拥有独立配置。所有实例共享一份配置。但是我这执行以下命令后,查看只有一个pd节点的log.level修改为了debug
mysql> set config pd log.level=‘debug’;
Query OK, 0 rows affected (0.04 sec)

mysql> show config where type=‘pd’ and name like ‘log.level’;
±-----±-------------------±----------±------+
| Type | Instance | Name | Value |
±-----±-------------------±----------±------+
| pd | 192.168.90.32:2379 | log.level | info |
| pd | 192.168.90.31:2379 | log.level | debug |
| pd | 192.168.90.30:2379 | log.level | info |
±-----±-------------------±----------±------+
3 rows in set (0.05 sec)

官方文档不是说共享一份配置文件嘛? 还是这样就已经可以了?如果要持久化再通过edit-config进行修改。我看tikv的配置文件在其中一个tidb实例上执行 set config tikv backup.num-threads=2;会同时修改所有的tikv配置

从下面的输出来看,如果指定192.168.90.32:2379这个pd进行修改参数,但也只会修改192.168.31:2379这个leader角色的pd。那看来应该是共享一份leader角色pd的配置文件,但是就是这样的显示容易让人误解另外2个pd的log.level是info级别的。不知道我这个猜想是否正确,麻烦大神帮忙解答下:
mysql> show config where type=‘pd’ and name like ‘log.level’;
±-----±-------------------±----------±------+
| Type | Instance | Name | Value |
±-----±-------------------±----------±------+
| pd | 192.168.90.32:2379 | log.level | info |
| pd | 192.168.90.31:2379 | log.level | debug |
| pd | 192.168.90.30:2379 | log.level | info |
±-----±-------------------±----------±------+
3 rows in set (0.05 sec)

mysql> set config “192.168.90.32:2379” log.level=‘error’;
Query OK, 0 rows affected (0.02 sec)

mysql> show config where type=‘pd’ and name like ‘log.level’;
±-----±-------------------±----------±------+
| Type | Instance | Name | Value |
±-----±-------------------±----------±------+
| pd | 192.168.90.32:2379 | log.level | info |
| pd | 192.168.90.31:2379 | log.level | error |
| pd | 192.168.90.30:2379 | log.level | info |
±-----±-------------------±----------±------+
3 rows in set (0.05 sec)

不过我通过tiup cluster edit-config在每个pd下面新增,然后reload集群后,每个pd的log.level又可以显示为不一样的值,这个是否合理?最终生效的是下面显示的,还是leader角色的pd的log.level参数的值?

  • host: 192.168.90.30
    config:
    log.level: debug
  • host: 192.168.90.31
    config:
    log.level: error
  • host: 192.168.90.32
    config:
    log.level: info

reload集群后显示如下:
mysql> show config where type=‘pd’ and name like ‘log.level’;
±-----±-------------------±----------±------+
| Type | Instance | Name | Value |
±-----±-------------------±----------±------+
| pd | 192.168.90.32:2379 | log.level | info |
| pd | 192.168.90.31:2379 | log.level | error |
| pd | 192.168.90.30:2379 | log.level | debug |
±-----±-------------------±----------±------+
3 rows in set (0.04 sec)

表示看不懂了

在 TiDB 集群中,PD(Placement Driver)组件确实共享同一份配置文件。当你使用 set config 命令更改 PD 的配置时,实际上是在当前会话中修改了配置,这种修改是临时的,仅在当前 PD 实例的运行周期内有效。这意味着如果你重启 PD 实例,这些更改将会丢失。
当你看到只有执行 set config pd log.level='debug' 命令的那个 PD 节点的日志级别变更为 debug,这是因为该命令只影响执行它的 PD 实例。但是,这种修改并没有持久化到集群范围内的配置文件中,因此其他 PD 实例的配置保持不变。
如果要使配置变更持久化并应用于所有 PD 实例,你需要使用 edit-config 命令。这个命令允许你编辑并提交配置更改到 PD 的全局配置文件。例如,要永久性地将所有 PD 实例的日志级别更改为 debug,你可以执行以下命令:
mysql> edit-config pd log.level=‘debug’;

这将触发配置文件的更新,并且所有 PD 实例在下一次重启时都会应用新的日志级别。

1 个赞

从测试来看,不是只影响执行它的PD实例,通过set config pd命令只会变更leader角色的pd的参数。另外,这个命令也是有误的噢:mysql> edit-config pd log.level=‘debug’;

https://docs.pingcap.com/zh/tidb/stable/deploy-and-maintain-faq#为什么修改了-tikvpd-的-toml-配置文件却没有生效 参考一下这个,永久修改要用pd ctl 。

大概意思就是通过 set config pd log.level=‘error’;只会修改leader角色的pd节点的参数,其他的pd节点的参数不会变更,官方文档说的是共享一份配置文件,那么给人感觉是既然共享一份配置,那所有的pd节点的该参数的值不是应该都是error吗?

我这边测试,通过pd-ctl修改后,重启集群后,是会恢复成默认值的,并没有永久修改,永久修改还是要用edit-config进行修改

PD永远只有一个主节点,set config 只是临时主节点生效,其它节点没有意义,重启后都失效。
一般用 edit-config。 不违背共享一份配置文件的原则,临时的,不用同步到其它节点

我用过6.5 版本的,edit-config 修改后reload是不会成功的。没使用过8.1,可能8版本不一样吧