Skip to content

Commit

Permalink
tidb: config tidb server labels (#11242)
Browse files Browse the repository at this point in the history
  • Loading branch information
glorv authored Sep 16, 2022
1 parent 60ecd12 commit 9c06250
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 11 deletions.
11 changes: 8 additions & 3 deletions follower-read.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,15 @@ set [session | global] tidb_replica_read = '<目标值>';

该变量用于设置期待的数据读取方式。

- 当设定为默认值 `leader` 或者空字符串时,TiDB 会维持原有行为方式,将所有的读取操作都发送给 leader 副本处理。
- 当设置为默认值 `leader` 或者空字符串时,TiDB 会维持原有行为方式,将所有的读取操作都发送给 leader 副本处理。
- 当设置为 `follower` 时,TiDB 会选择 Region 的 follower 副本完成所有的数据读取操作。
-`tidb_replica_read` 的值设为 `leader-and-follower` 时,TiDB 可以选择任意副本来执行读取操作。
- 当设置为 `leader-and-follower` 时,读请求会在 leader 和 follower 之间负载均衡。
- 当设置为 `leader-and-follower` 时,TiDB 可以选择任意副本来执行读取操作,此时读请求会在 leader 和 follower 之间负载均衡。
- 当设置为 `closest-replicas` 时,TiDB 会优先选择分布在同一区域的副本执行读取操作,对应的副本可以是 leader 或 follower。如果同一区域内没有副本分布,则会从 leader 执行读取。
- 当设置为 `closest-adaptive` 时,当一个读请求的预估返回结果大于或等于变量 [`tidb_adaptive_closest_read_threshold`](/system-variables.md#tidb_adaptive_closest_read_threshold-从-v630-版本开始引入) 的值时,TiDB 会优先选择分布在同一区域的副本执行读取操作,否则选择 leader 副本进行处理。此时,为了防止读流量在各个区域分布不均衡,TiDB 会动态检测当前在线的所有 TiDB 和 TiKV 的区域分布是否均衡。如果发现在某一个区域内仅包含 TiDB 或 TiKV 的节点,则会强制使用 leader 读取。例如,如果某个区域的 TiDB 全部无法连接,此时其他在线的 TiDB 将会降级至 leader 读取。当此区域有至少 1 个 TiDB 节点重新上线,则会恢复优先从同一区域的副本读取。

> **注意:**
>
> 当设置为 `closest-replicas``closest-adaptive` 时,你需要配置集群以确保副本按照指定的设置分布在各个区域。请参考[通过拓扑 label 进行副本调度](/schedule-replicas-by-topology-labels.md)为 PD 配置 `location-labels` 并为 TiDB 和 TiKV 设置正确的 `labels`。TiDB 依赖 `zone` 标签匹配位于同一区域的 TiKV,因此请**务必**在 PD 的 `location-labels` 配置中包含 `zone` 并确保每个 TiDB 和 TiKV 节点的 `labels` 配置中包含 `zone`。如果是使用 TiDB Operator 部署的集群,请参考[数据的高可用](https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/configure-a-tidb-cluster#%E6%95%B0%E6%8D%AE%E7%9A%84%E9%AB%98%E5%8F%AF%E7%94%A8)进行配置。
## 实现机制

Expand Down
20 changes: 20 additions & 0 deletions schedule-replicas-by-topology-labels.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,26 @@ rack = "<rack>"
host = "<host>"
```

### 设置 TiDB 的 `labels`(可选)

如果需要使用 [Follower Read](/follower-read.md) 的优先读同一区域副本的功能,需要为 TiDB 节点配置相关的 `labels`

TiDB 支持使用配置文件的方式设置 `labels`

{{< copyable "" >}}

```
[labels]
zone = "<zone>"
dc = "<dc>"
rack = "<rack>"
host = "<host>"
```

> **注意:**
>
> 目前,TiDB 依赖 `zone` 标签匹配选择同一区域的副本。如果需要使用此功能,需要在 PD [`location-labels` 配置](#设置-pd-的-isolation-level-配置)中包含 `zone`,并在 TiDB、TiKV 和 TiFlash 设置的 `labels` 中包含 `zone`。关于如何设置 TiKV 和 TiFlash 的 `labels`,可参考 [设置 TiKV 和 TiFlash 的 `labels`](#设置-tikv-和-tiflash-的-labels)
### 设置 PD 的 `location-labels` 配置

根据前面的描述,标签可以是用来描述 TiKV 属性的任意键值对,但 PD 无从得知哪些标签是用来标识地理位置的,而且也无从得知这些标签的层次关系。因此,PD 也需要一些配置来使得 PD 理解 TiKV 节点拓扑。
Expand Down
18 changes: 10 additions & 8 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,13 @@ mysql> SHOW GLOBAL VARIABLES LIKE 'max_prepared_stmt_count';
- 默认值:(随系统)
- 该变量显示首次引导启动 TiDB 时的系统时区。另请参阅 [`time_zone`](#time_zone)。
### `tidb_adaptive_closest_read_threshold` <span class="version-mark">从 v6.3.0 版本开始引入</span>
- 作用域:SESSION | GLOBAL
- 是否持久化到集群:是
- 默认值:`4096`
- 这个变量用于控制当 [`replica-read`](#tidb_replica_read-从-v40-版本开始引入) 设置为 `closest-adaptive` 时,优先将读请求发送至 TiDB server 所在区域副本的阈值。当读请求预估的返回结果的大小超过此阈值时,TiDB 会将读请求优先发送至同一区域的副本,否则会发送至 leader 副本。
### `tidb_allow_batch_cop` <span class="version-mark">从 v4.0 版本开始引入</span>
- 作用域:SESSION | GLOBAL
Expand Down Expand Up @@ -2003,14 +2010,9 @@ explain select * from t where age=5;
- 作用域:SESSION | GLOBAL
- 是否持久化到集群:是
- 默认值:`leader`
- 可选值:`leader``follower``leader-and-follower`
- 这个变量用于控制 TiDB 读取数据的位置,有以下三个选择:
* leader:只从 leader 节点读取
* follower:只从 follower 节点读取
* leader-and-follower:从 leader 或 follower 节点读取
更多细节,见 [Follower Read](/follower-read.md)。
- 可选值:`leader``follower``leader-and-follower``closest-replicas``closest-adaptive`
- 这个变量用于控制 TiDB 的 Follower Read 功能的行为。
- 关于使用方式与实现原理,见 [Follower Read](/follower-read.md)。
### `tidb_retry_limit`
Expand Down

0 comments on commit 9c06250

Please sign in to comment.