tikv和tidb使用咨询

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0.3
  • 【问题描述】:

1:请问集群中的3个tikv节点,挂掉其中1个tikv节点后 <1> 整个集群还可以正常提供读写吗? <2> 挂掉的1个tikv节点复活后,会自动加入集群吗? 如果可自动加入集群,是把挂掉之前的数据全部清掉+重新从其他2个tikv节点复制数据,还是从挂掉时刻的状态接着继续服务呢?

2:请问tidb里有类似mysql的max_execution_time变量参数可配置吗? 用来限制坏查询的最大执行时间,大于该时间,坏查询自动kill

谢谢

1、tidb 的高可用部分如下:

2、如上所述,如果是 3 个 tikv 节点,并且配置为 3 副本,并且每个 tikv 节点都保留了一个副本,那么挂一台 tikv 不会影响集群的使用,会由 raft 来选择新主,继续提供服务。

3、如果挂机的节点过长,并且再次启动时因为该节点上的日志信息落后,会再次调度原 online 状态的 tikv 上的 region 副本到掉线重启的 tikv,该 tikv 上的 old 数据会删除。

4、max_execution_time

除上述参数外,tidb 增加了如下参数,如果超出设置的内存阈值,会触发相应的动作:

1赞

谢谢大佬回复。

1: 使用set global语法修改了一个tidb里的sql_mode和max_execution_time变量。发起其他2个tidb节点里的这2个变量的值也同样修改成功了。 如果只会3个tidb节点依然进行了重启,那么这2个变量的值是修改之前的值,还是之后的值呢? 当初修改这类变量的时候,修改的动作会落盘持久化吗?有对应的配置文件可以查吗?

2: oom-action和mem-quota-query这2个变量,不能使用set global语法修改。 那么修改方法是: 依次修改三个tidb节点上的conf/tidb.toml配置文件里的对应该变量值,然后在中控节点上执行 ansible-playbook rolling_update.yml 命令,以实现修改的变量值生效吗?

谢谢

  1. set global 语法修改的变化,会将变量值持久化到 tikv 中存储,所以其他节点也可以看到修改后的值,重启之后仍然是修改后的值
  2. oom-action 和 mem-quota-query 是 TiDB 配置文件参数,可以修改中控机上 tidb-ansible/conf/tidb.yml 配置文件,然后在中控机上执行 ansible-playbook rolling_update.yml --tags=tidb 生效配置
  3. 控制内存还可以在 session 级别修改 tidb_mem_quota_query 变量来控制,SET @@ tidb_mem_quota_query =

好的 。中控机器上的配置文件目录 /home/tidb/tidb-ansible-v3.0.3/conf 下面的配置文件,与各tidb/tikv/pd节点内的conf目录下的配置文件,有重写或者优先级关系吗? 最终生效的参数变量,是以哪个配置文件为准呢 ?如果是以中控机器上的配置文件为准,那么在任何情况下,是不是都不应该也没有必要去修改各tidb/tikv/pd节点内的conf目录下的配置文件呢 ? 谢谢

嗯 各个节点上的配置文件是按照中控机上的配置为模板生成的,一般为了统一管理集群的配置文件,都是建议在中控机上修改,然后通过 deploy 或者 rolling_update(会包含 deploy 步骤) ,更新各个节点上的配置文件生效。

rollling_update 可以理解为会包含 stop/deploy/start 步骤

1赞

收到 ,谢谢 :hugs:

再请教一下: 在中控机上修改一些参数变量后执行 ansible-playbook rolling_update.yml --tags=tidb 。

那么应该是要使用 resources/bin 目录下的 pd-ctl、tidb-ctl、tikv-ctl 来确认和查看修改的参数变量是否已生效吧 ?使用 show global variables 貌似不行啊

但使用./resources/bin/pd-ctl参数来确认max-replicas的值,发现依然还是默认值3,如附件图,帮确认下是什么原因。

ps: 修改 conf/pd.yml 文件后,执行过ansible-playbook rolling_update.yml --tags=tidb命令,也试过执行 ansible-playbook stop.yml 和 start.yml,但现象还是参数变量没修改成功

如果是修改 pd 的参数,需要滚动 pd 节点来生效配置文件

ansible-playbook rolling_update.yml --tags=pd

查看配置是否生效有几种方式

  1. 查看 deploy 目录下的 conf 下对应配置文件有没有修改成功
  2. show variables 查看(但是对于部分参数 variables name 和配置文件中的名字是不完全相同的)
  3. tidb tikv pd 重启的时候,在对应的日志中会打印一条 loaded config 日志,记录当前次启动加载的参数变量
  4. pd-ctl 执行 config show all 可以查看对应的 pd 配置
1赞

大佬,修改max-replicas变量值为5后,确认了一下你提供的第1、3、4这3种方式,遇到困惑了

第1种方式结果符合预期,为修改后的值: grep max-replicas /data/tidb/4300/conf/pd.toml max-replicas = 5

第3种方式结果符合预期,为修改后的值: grep max-replicas /data/tidb/4300/log/pd.log “replication”:{“max-replicas”:5,…

第4种方式结果不符合预期,为修改前的值 /home/tidb/tidb-ansible-v3.0.3/resources/bin/pd-ctl -i -u http://192.168.17.151:2679 » config show replication { “max-replicas”: 3, “location-labels”: “”, “strictly-match-label”: “false” }

见附件截图

tidb版本为3.0.3,为新机器集群,尚未灌数据 。请问这个值的结果出现不一致,是什么原因呢? 还有什么方法来确定目前生效的值是3,还是5呢 ?

谢谢

max-replicas 比较特殊,第一次启动的时候会从配置文件中读取,后续修改需要通过 pd-ctl 进行修改

好的,明白了,多谢多谢

不客气:handshake: