在三数据中心下就近读取数据

在三数据中心模式下,Region 的三个副本都会隔离在各个数据中心里。然而在强一致读的要求下,TiDB 的每一个查询都需要访问对应数据的 Leader 副本,而查询的来源可能和 Leader 所在的数据中心不一致,这就会引起跨数据中心的数据访问,从而造成访问的延迟上升。本文主要介绍使用 Stale Read 功能,以牺牲数据实时性的方式,避免跨数据中心的访问,从而降低访问的延迟。

部署三数据中心的 TiDB 集群

部署三数据中心的方法,参考同城多数据中心部署 TiDB

请注意,如果 TiKV 和 TiDB 都有 labels 配置项,在给 TiKV 和 TiDB 配置标签时,同一个数据中心下的 TiKV 和 TiDB 应该配置相同的 zone 标签。假设 TiKV 和 TiDB 都在 dc-1 数据中心下,那么两者都需要配置如下标签:

  1. [labels]
  2. zone=dc-1

使用 Stale Read 就近读取数据

Stale Read 为用户提供了一种读取历史数据的一种机制。使用 Stale Read 功能,你能从指定时间点或时间范围内读取对应的历史数据,从而避免数据同步带来延迟。在部分跨数据中心部署的场景中使用 Stale Read 功能,通过牺牲一定的实时性,TiDB 可就近访问对应数据所在当前中心的副本,避免跨数据中心的网络延迟,降低整体查询的访问延迟。

当 TiDB 收到 Stale Read 查询时,假如对应的 TiDB 配置了 zone 标签,而且 tidb_replica_readclosest-replicas,就会将请求发送到对应数据副本所在 TiKV 拥有相同的 zone 标签的节点上。

如何使用 Stale Read 查询,参考使用 AS OF TIMESTAMP 语法读取历史数据