高可用集群,三tikv,三pd,不断插入数据,停掉其中一个,发现数据为什么会出错?

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

  • 【TiDB 版本】:3.0.0
  • 【问题描述】:3.0.0集群节点:2个tidb,3个pd,3个tikv。 我刚刚测试 集群,在循环不断插入10000条数据中,停掉一个pd,然后在重启这个pd节点,发现数据可能会多一条, 对于tikv,停掉一个tikv节点然后在重启,发现数据可能会少一条。 这是什么原因了?
  1. 首先,在 TiDB 中数据使用 Raft 协议是强一致的。

  2. PD 节点,并不会存储实际的业务数据,leader 节点会提供事务的 tso,原则上 PD 节点不会对业务数据的一致性造成影响。

  3. 如果在测试时发现数据存在不一致的问题,那么请提供下述信息:

  • 循环插入数据的时,请确认 10000 条数据均插入成功,请提供相应的业务端日志

  • 所有 TiDB 节点开启 general log ,确认数据变更的方式。开启方式如下:

    curl -X POST -d "tidb_general_log=1" http://{TiDBIP}:10080/settings
    
  • 停止一个 TiKV 节点后,请使用 pd-ctl 确认下当前环境中是否存在没有 leader 的 region。参考命令如下:

    pd-ctl -u <endpoint> -d region --jq '.regions[]|select(has("leader")|not)|{id: .id, peer_stores: [.peers[].store_id]}'
    
  1. 其他资料
  • pd-ctl 使用方式:

https://pingcap.com/docs-cn/v3.0/pd-control/#下载安装包

  • Raft 协议介绍:
  • TiDB 架构介绍:

https://pingcap.com/docs-cn/v3.0/