疑难问题提问:当和 TiDB 同一个 AZ 的副本不是 leader 节点时,使用 Follower Read

Follower 副本选择策略

Follower Read 不会破坏 TiDB 的 Snapshot Isolation 事务隔离级别。TiDB 在第一次选取副本时会根据 tidb_replica_read 的配置进行选择。从第二次重试开始,TiDB 会优先保证读取成功,因此当选中的 follower 节点出现无法访问的故障或其他错误时,会切换到 leader 提供服务。

leader

  • 选择 leader 副本进行读取,不考虑副本位置。

closest-replicas

  • 当和 TiDB 同一个 AZ 的副本是 leader 节点时,不使用 Follower Read。
  • 当和 TiDB 同一个 AZ 的副本不是 leader 节点时,使用 Follower Read。

closest-adaptive

  • 如果预估的返回结果不够大,使用 leader 策略,不进行 Follower Read。
  • 如果预估的返回结果足够大,使用 closest-replicas 策略。

请问"当和 TiDB 同一个 AZ 的副本不是 leader 节点时" 这句话如何理解呢?
什么叫和tidb同一个AZ的副本?

这文档是不是少了一个leader-and-follower?

1 个赞

我的理解是。
这种是多中心的,tidb和要读取的KV在一个中心,leader和tidb在一个中心就读leader,不在一个中心就使用follower read。

2 个赞

情况1:当TiDB和region的leader节点在同一个AZ,直接读leader

3个策略:
1、仅 读leader
2、仅 就近读取

  •  情况1:当TiDB和region的leader节点在同一个AZ,直接读leader。
    
  •  情况2:当TiDB和region的Follower节点在同一个AZ,直接读Follower。
    

3、自适应 就近读取

1 个赞

Follower Read 全程依然保证Snapshot Isolation 快照隔离级别,不会出现脏读;如果选中的 Follower 故障不可访问,会自动切回 Leader 保障查询成功。

1 个赞

还没用这么复杂

https://docs.pingcap.com/zh/tidb/stable/follower-read/

请问"当和 TiDB 同一个 AZ 的副本不是 leader 节点时" 这句话如何理解呢?
什么叫和tidb同一个AZ的副本?

这文档是不是少了一个leader-and-follower?

1 个赞

就近读取

感谢老师分享

TiDB 节点所在可用区,同一 AZ 里部署的这台 TiKV 副本,就是和 TiDB 同 AZ 副本。

同 AZ 副本:TiDB 和存放 Region 副本的 TiKV 节点zone标签一致、处于同一可用区的 Region 副本;

可以看下官方文档:Follower Read | TiDB 社区版

这里的"同一个 AZ 的副本"指与发起查询的 TiDB 节点部署在同一可用区的那个 Region 副本。closest-replicas 策略下:若这个就近副本恰好是 leader,直接走 leader 读、不算 Follower Read;若就近副本是 follower,则对它做 Follower Read 以就近降低跨 AZ 延迟。文档没漏项,它是按"就近副本的角色"分两种情况描述,不需要 leader-and-follower 这一项。