多个Tidb,新建表不同步

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本】 CentOS Linux release 7.6 & 3.10.0-957.el7.x86_64*

  • TiDB 版本】 TiDB 3.0.4

  • 磁盘型号】 ssd

  • 集群节点分布】 测试。单机单实例模式-TiDB(3)+ PD(3)+TiKV(3) 3台机器,每台机器1个pd,1个Tikv,1个TiDB

  • 数据量 & region 数量 & 副本数数据量600G & region 数量 5.4K & 3 副本

  • 问题描述(我做了什么)】 程序在217上新建的表 ,其他两个tidb 都看不到

  • 关键词】 不同Tidb,表不一致 %40K%5DZ%5B5LV%7D%60T)8MI%7B(%7B%407A~H213tidb.log (87.3 KB) 217tidb.log (27.7 KB)

您好: 方便把建表语句给我测试下吗? 多谢。 具体是如何创建这些表的,使用程序批量创建还是一个个创建?

能够提供一下建表前后 3 个 TiDB 各自的 log?我们查一下。

log 在截图的下面,已经上传了 和建表语句无关,我手动建个简单的表也一样, 只有重启 tidb 才会同步 ~AW1Y9Z%607YKWO%24HY6CV%5DK39

然后看2个tidb ,表并没有同步

开启info 日志级别,发现建表时有报错,看看是这个吗 tidb.log (8.0 KB)

麻烦根据建表报错的 tidb.log 的 tableid 执行下下面的命令,看下返回
curl http://{tidb_ip}:{tidb_sstatus_port}/schema?table_id={tableid}

table id image

执行命令 image

在218 建新表,不会报错,但是 多个tidb 也不同步,我看日志有个must reload,是不是每次操作DDL 都要强制tidb reload

等了几分钟,表不一致

这是213的tidb日志

在218 执行curl命令有数据返回

但是另外2个tidb ,213 和217 没有

麻烦再检查一下 TiKV 以及 PD 的日志在 建表的时候有没有报错。

建表时间是9:17 tikv的日志级别是error,在建表的时间段没有报错

tipd也没有时间段的报错

您好,经过在 TiDB 3.0.4 测试并没有发现这种情况。如下:

帮忙提供思路,我这种现象的原因是什么,如何处理,有哪些因素会导致表不一致。比如 tidb 表 同步的原理说明

DDL 解析可以参考官网的博客 https://pingcap.com/blog-cn/tidb-source-code-reading-17/

通过什么方式 获取 owner节点的 地址 ?

这句话的意思是什么,是提示 用户自己做reload,还是说tidb 自己会自动reload

用户在非owner 节点 也能创建 ,你们也没有在日志里面打一些异常或者警告 ,提示用户在非owner节点执行ddl 是有问题的

我们测试环境 3个 tidb节点都可以创建表 ,都不能自动同步到其他tidb 问题比较严重

建表跟是否是在 owner 节点无关,每一个节点都能执行建表命令,只不过所有的建表请求真正执行的节点是 owner 节点。如果要看 owner 节点,参考: curl http://{TiDBIP}:10080/info/all

执行 DDL 的是 owner,不能说明非 owner 节点不能执行 DDL 语句,是在非 owner 节点执行 DDL 语句后,最终是由 owner 取队列中的 query 然后执行

我们这种情况会是什么问题 怎么定位

IP是空的是有问题么