From bf8d54ae38da11013070d7cfb0fd78ded0fb02cd Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Fri, 1 Nov 2024 17:46:42 +0800 Subject: [PATCH] tiproxy: add docs for label-based balance (#18914) (#18971) --- media/tiproxy/tiproxy-balance-label.png | Bin 0 -> 86358 bytes tiproxy/tiproxy-configuration.md | 7 ++ tiproxy/tiproxy-grafana.md | 1 + tiproxy/tiproxy-load-balance.md | 90 ++++++++++++++++++++---- 4 files changed, 85 insertions(+), 13 deletions(-) create mode 100644 media/tiproxy/tiproxy-balance-label.png diff --git a/media/tiproxy/tiproxy-balance-label.png b/media/tiproxy/tiproxy-balance-label.png new file mode 100644 index 0000000000000000000000000000000000000000..c291c40ba05ce5f4e2dc38cc3d5f87d8680d836d GIT binary patch literal 86358 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˾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 literal 0 HcmV?d00001 diff --git a/tiproxy/tiproxy-configuration.md b/tiproxy/tiproxy-configuration.md index ec4a951df9d1..aec1c4b558e8 100644 --- a/tiproxy/tiproxy-configuration.md +++ b/tiproxy/tiproxy-configuration.md @@ -113,6 +113,13 @@ HTTP 网关的配置。 TiProxy 负载均衡策略的配置。 +#### `label-name` + ++ 默认值:`""` ++ 支持热加载:是 ++ 指定用于[基于标签的负载均衡](/tiproxy/tiproxy-load-balance.md#基于标签的负载均衡)的标签名。TiProxy 根据该标签名匹配 TiDB server 的标签值,并优先将请求路由到与自身具有相同标签值的 TiDB server。 ++ `label-name` 的默认值为空字符串,表示不使用基于标签的负载均衡。要启用该负载均衡策略,需要将此配置项设置为非空字符串,并配置 TiProxy 的 [`labels`](#labels) 和 TiDB 的 [`labels`](/tidb-configuration-file.md#labels) 配置项。有关详细信息,请参阅[基于标签的负载均衡](/tiproxy/tiproxy-load-balance.md#基于标签的负载均衡)。 + #### `policy` + 默认值:`resource` diff --git a/tiproxy/tiproxy-grafana.md b/tiproxy/tiproxy-grafana.md index 7d6d2d6cb37e..8b0ce3b6a21b 100644 --- a/tiproxy/tiproxy-grafana.md +++ b/tiproxy/tiproxy-grafana.md @@ -59,6 +59,7 @@ TiProxy 有四个面板组。这些面板上的指标表示 TiProxy 的当前状 - Session Migration Duration:会话迁移的平均、P95、P99 时长。 - Session Migration Reasons:每分钟发生的会话迁移数,以及迁移的原因。原因包括: - `status`:TiProxy 进行了[基于状态的负载均衡](/tiproxy/tiproxy-load-balance.md#基于状态的负载均衡) + - `label`:TiProxy 进行了[基于标签的负载均衡](/tiproxy/tiproxy-load-balance.md#基于标签的负载均衡) - `health`:TiProxy 进行了[基于健康度的负载均衡](/tiproxy/tiproxy-load-balance.md#基于健康度的负载均衡) - `memory`:TiProxy 进行了[基于内存的负载均衡](/tiproxy/tiproxy-load-balance.md#基于内存的负载均衡) - `cpu`:TiProxy 进行了[基于 CPU 的负载均衡](/tiproxy/tiproxy-load-balance.md#基于-cpu-的负载均衡) diff --git a/tiproxy/tiproxy-load-balance.md b/tiproxy/tiproxy-load-balance.md index f5c69d49805e..37350cdb215f 100644 --- a/tiproxy/tiproxy-load-balance.md +++ b/tiproxy/tiproxy-load-balance.md @@ -5,16 +5,17 @@ summary: 介绍 TiProxy 的负载均衡策略及其适用场景。 # TiProxy 负载均衡策略 -在 TiProxy v1.0.0 中,TiProxy 仅支持基于 TiDB server 状态和连接数的负载均衡策略。从 v1.1.0 开始,TiProxy 新增了四种可独立配置的负载均衡策略:基于健康度、内存、CPU 和地理位置。 +在 TiProxy v1.0.0 中,TiProxy 仅支持基于 TiDB server 状态和连接数的负载均衡策略。从 v1.1.0 开始,TiProxy 新增了 5 种负载均衡策略:基于标签、健康度、内存、CPU 和地理位置。 -TiProxy 默认启用所有策略,优先级从高到低依次为: +默认配置下,这些策略的优先级从高到低依次为: 1. 基于状态的负载均衡:当某个 TiDB server 正在关闭时,TiProxy 将连接从该 TiDB server 迁移到在线的 TiDB server。 -2. 基于健康度的负载均衡:当某个 TiDB server 的健康度异常时,TiProxy 将连接从该 TiDB server 迁移到健康度正常的 TiDB server。 -3. 基于内存的负载均衡:当某个 TiDB server 存在 Out of Memory (OOM) 风险时,TiProxy 将连接从该 TiDB server 迁移到内存使用量较低的 TiDB server。 -4. 基于 CPU 的负载均衡:当某个 TiDB server 的 CPU 使用率远高于其他 TiDB server 时,TiProxy 将连接从该 TiDB server 迁移到 CPU 使用率较低的 TiDB server。 -5. 基于地理位置的负载均衡:优先将请求路由到地理位置上距离 TiProxy 较近的 TiDB server。 -6. 基于连接数的负载均衡:当某个 TiDB server 的连接数远高于其他 TiDB server 时,TiProxy 将连接从该 TiDB server 迁移到连接数较少的 TiDB server。 +2. 基于标签的负载均衡:优先将请求路由到与 TiProxy 实例自身具有相同标签的 TiDB server,以实现计算层的资源隔离。 +3. 基于健康度的负载均衡:当某个 TiDB server 的健康度异常时,TiProxy 将连接从该 TiDB server 迁移到健康度正常的 TiDB server。 +4. 基于内存的负载均衡:当某个 TiDB server 存在 Out of Memory (OOM) 风险时,TiProxy 将连接从该 TiDB server 迁移到内存使用量较低的 TiDB server。 +5. 基于 CPU 的负载均衡:当某个 TiDB server 的 CPU 使用率远高于其他 TiDB server 时,TiProxy 将连接从该 TiDB server 迁移到 CPU 使用率较低的 TiDB server。 +6. 基于地理位置的负载均衡:优先将请求路由到地理位置上距离 TiProxy 较近的 TiDB server。 +7. 基于连接数的负载均衡:当某个 TiDB server 的连接数远高于其他 TiDB server 时,TiProxy 将连接从该 TiDB server 迁移到连接数较少的 TiDB server。 如需调整负载均衡策略的优先级,请参考[负载均衡策略配置](#负载均衡策略配置)。 @@ -22,6 +23,68 @@ TiProxy 默认启用所有策略,优先级从高到低依次为: TiProxy 定时通过 SQL 端口和状态端口检查 TiDB 是否已下线或正在关闭。 +## 基于标签的负载均衡 + +基于标签的负载均衡优先将连接路由到与 TiProxy 自身具有相同标签的 TiDB server 上,从而实现计算层的资源隔离。该策略默认关闭,仅当你的业务需要隔离计算层的资源时才需要启用。 + +要启用基于标签的负载均衡,你需要: + +- 通过 [`balance.label-name`](/tiproxy/tiproxy-configuration.md#label-name) 指定用于匹配的标签名 +- 配置 TiProxy 配置项 [`labels`](/tiproxy/tiproxy-configuration.md#labels) +- 配置 TiDB server 配置项 [`labels`](/tidb-configuration-file.md#labels) + +配置完成后,TiProxy 会根据 `balance.label-name` 指定的标签名查找相应的配置,并将连接路由到标签值相同的 TiDB server。 + +例如,若应用包含交易和 BI 两类业务,为了避免相互影响,可以按照如下方式配置集群: + +1. 在 TiProxy 上配置 [`balance.label-name`](/tiproxy/tiproxy-configuration.md#label-name) 为 `"app"`,表示将按照标签名 `"app"` 匹配 TiDB server,并将连接路由到相同标签值的 TiDB server 上。 +2. 配置 2 台 TiProxy 实例,分别为配置项 [`labels`](/tiproxy/tiproxy-configuration.md#labels) 加上 `"app"="Order"` 和 `"app"="BI"`。 +3. 将 TiDB 实例分为 2 组,分别为配置项 [`labels`](/tidb-configuration-file.md#labels) 加上 `"app"="Order"` 和 `"app"="BI"`。 +4. 如果需要同时隔离存储层的资源,可配置 [Placement Rules](/configure-placement-rules.md) 或[资源管控](/tidb-resource-control.md)。 +5. 交易和 BI 业务的客户端分别连接到 2 台 TiProxy 的地址。 + +基于标签的负载均衡 + +上述拓扑图的配置示例如下: + +```yaml +component_versions: + tiproxy: "v1.1.0" +server_configs: + tiproxy: + balance.label-name: "app" + tidb: + graceful-wait-before-shutdown: 15 +tiproxy_servers: + - host: tiproxy-host-1 + config: + labels: {app: "Order"} + - host: tiproxy-host-2 + config: + labels: {app: "BI"} +tidb_servers: + - host: tidb-host-1 + config: + labels: {app: "Order"} + - host: tidb-host-2 + config: + labels: {app: "Order"} + - host: tidb-host-3 + config: + labels: {app: "BI"} + - host: tidb-host-4 + config: + labels: {app: "BI"} +tikv_servers: + - host: tikv-host-1 + - host: tikv-host-2 + - host: tikv-host-3 +pd_servers: + - host: pd-host-1 + - host: pd-host-2 + - host: pd-host-3 +``` + ## 基于健康度的负载均衡 TiProxy 查询 TiDB server 的错误数来判断 TiDB server 的健康度,当某个 TiDB server 的健康度异常而其他 TiDB server 正常时,TiProxy 将该 TiDB server 的连接迁移到其他 TiDB server 上,实现自动故障转移。 @@ -99,11 +162,12 @@ tidb_servers: zone: west tikv_servers: - host: tikv-host-1 - port: 20160 - host: tikv-host-2 - port: 20160 - host: tikv-host-3 - port: 20160 +pd_servers: + - host: pd-host-1 + - host: pd-host-2 + - host: pd-host-3 ``` 在以上配置中,`tiproxy-host-1` 与 `tidb-host-1` 的 `zone` 配置相同,因此 `tiproxy-host-1` 上的 TiProxy 会优先将请求路由到 `tidb-host-1` 上的 TiDB server。同理,`tiproxy-host-2` 上的 TiProxy 会优先将请求路由到 `tidb-host-2` 上的 TiDB server。 @@ -121,9 +185,9 @@ TiProxy 通常根据 CPU 使用率来识别 TiDB server 的负载。该策略通 TiProxy 支持通过配置项 [`policy`](/tiproxy/tiproxy-configuration.md#policy) 配置上述负载均衡策略的组合和优先级。 -- `resource`:资源优先策略,优先级顺序依次为基于状态、健康度、内存、CPU、地理位置、连接数的负载均衡。 -- `location`:地理优先策略,优先级顺序依次为基于状态、地理位置、健康度、内存、CPU、连接数的负载均衡。 -- `connection`:最小连接数策略,优先级顺序依次为基于状态、连接数的负载均衡。 +- `resource`:资源优先策略,优先级顺序依次为基于状态、标签、健康度、内存、CPU、地理位置、连接数的负载均衡。 +- `location`:地理优先策略,优先级顺序依次为基于状态、标签、地理位置、健康度、内存、CPU、连接数的负载均衡。 +- `connection`:最小连接数策略,优先级顺序依次为基于状态、标签、连接数的负载均衡。 ## 资源