Skip to content

Commit

Permalink
zh: support PD micro service (#2478)
Browse files Browse the repository at this point in the history
  • Loading branch information
HuSharp authored Mar 25, 2024
1 parent a44aa6c commit 154c622
Show file tree
Hide file tree
Showing 8 changed files with 239 additions and 8 deletions.
84 changes: 84 additions & 0 deletions zh/configure-a-tidb-cluster.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,30 @@ TiDB Operator 支持为 PD、TiDB、TiKV、TiCDC 挂载多块 PV,可以用于
</div>
<div label="PD 微服务">
为 PD 微服务挂载 PV,以 `tso` 微服务为例:

> **注意:**
>
> PD 从 v8.0.0 版本开始支持[微服务模式](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(实验特性)。

```yaml
pd:
mode: "ms"
pdms:
- name: "tso"
config: |
[log.file]
filename = "/pdms/log/tso.log"
storageVolumes:
- name: log
storageSize: "10Gi"
mountPath: "/pdms/log"
```

</div>

</SimpleTab>

> **注意:**
Expand Down Expand Up @@ -251,6 +275,30 @@ spec:
>
> 如果 Kubernetes 集群节点个数少于 3 个,将会导致有一个 PD Pod 处于 Pending 状态,而 TiKV 和 TiDB Pod 也都不会被创建。Kubernetes 集群节点个数少于 3 个时,为了使 TiDB 集群能启动起来,可以将默认部署的 PD Pod 个数减小到 1 个。

#### 部署 PD 微服务

> **注意:**
>
> PD 从 v8.0.0 版本开始支持[微服务模式](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(实验特性)。

如果要在集群中开启 PD 微服务,需要在 `${cluster_name}/tidb-cluster.yaml` 文件中配置 `spec.pd.mode` 与 `spec.pdms`:

```yaml
spec:
pd:
mode: "ms"
pdms:
- name: "tso"
baseImage: pingcap/pd
replicas: 2
- name: "scheduling"
baseImage: pingcap/pd
replicas: 1
```

- `spec.pd.mode` 用于开启或关闭 PD 微服务。设置为 `"ms"` 时表示开启 PD 微服务,设置为 `""` 或删除该字段时,表示关闭 PD 微服务。
- `spec.pdms.config` 用于配置 PD 微服务,具体的配置参数与 `spec.pd.config` 相同。要获取 PD 微服务可配置的所有参数,请参考 [PD 配置文件描述](https://docs.pingcap.com/zh/tidb/stable/pd-configuration-file)。

#### 部署 TiProxy

部署方法与 PD 一致。此外,还需要修改 `spec.tiproxy` 来手动指定 TiProxy 组件的数量。
Expand Down Expand Up @@ -381,6 +429,42 @@ spec:
> - 为了兼容 `helm` 部署,如果你是通过 CR 文件部署 TiDB 集群,即使你不设置 Config 配置,也需要保证 `Config: {}` 的设置,从而避免 PD 组件无法正常启动。
> - PD 部分配置项在首次启动成功后会持久化到 etcd 中且后续将以 etcd 中的配置为准。因此 PD 在首次启动后,这些配置项将无法再通过配置参数来进行修改,而需要使用 SQL、pd-ctl 或 PD server API 来动态进行修改。目前,[在线修改 PD 配置](https://docs.pingcap.com/zh/tidb/stable/dynamic-config#在线修改-pd-配置)文档中所列的配置项中,除 `log.level` 外,其他配置项在 PD 首次启动之后均不再支持通过配置参数进行修改。

##### 配置 PD 微服务

> **注意:**
>
> PD 从 v8.0.0 版本开始支持[微服务模式](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(实验特性)。

你可以通过 TidbCluster CR 的 `spec.pd.mode` 与 `spec.pdms` 来配置 PD 微服务参数。目前 PD 支持 `tso` 和 `scheduling` 这两个微服务,配置示例如下:

```yaml
spec:
pd:
mode: "ms"
pdms:
- name: "tso"
baseImage: pingcap/pd
replicas: 2
config: |
[log.file]
filename = "/pdms/log/tso.log"
- name: "scheduling"
baseImage: pingcap/pd
replicas: 1
config: |
[log.file]
filename = "/pdms/log/scheduling.log"
```

其中,`spec.pdms` 用于配置 PD 微服务,具体的配置参数与 `spec.pd.config` 相同。要获取 PD 微服务可配置的所有参数,请参考 [PD 配置文件描述](https://docs.pingcap.com/zh/tidb/stable/pd-configuration-file)。

> **注意:**
>
> - 为了兼容 `helm` 部署,如果你的 TiDB 集群是通过 CR 文件部署的,即使你不设置 `config` 配置,也需要保证 `config: {}` 的设置,避免 PD 微服务组件无法正常启动。
> - 如果在部署 TiDB 集群时就启用了 PD 微服务模式,PD 微服务的部分配置项会持久化到 etcd 中且后续将以 etcd 中的配置为准。
> - 如果在现有 TiDB 集群中启用 PD 微服务模式,PD 微服务的部分配置会沿用 PD 的配置并持久化到 etcd 中,后续将以 etcd 中的配置为准。
> - 因此,PD 微服务在首次启动后,这些配置项将无法再通过配置参数来进行修改,而需要使用 [SQL](https://docs.pingcap.com/zh/tidb/stable/dynamic-config#在线修改-pd-配置)、[pd-ctl](https://docs.pingcap.com/tidb/stable/pd-control#config-show--set-option-value--placement-rules) 或 PD server API 来动态进行修改。目前,[在线修改 PD 配置](https://docs.pingcap.com/zh/tidb/stable/dynamic-config#在线修改-pd-配置)文档中所列的配置项中,除 `log.level` 外,其他配置项在 PD 微服务首次启动之后均不再支持通过配置参数进行修改。

#### 配置 TiProxy 配置参数

你可以通过 TidbCluster CR 的 `spec.tiproxy.config` 来配置 TiProxy 配置参数。
Expand Down
17 changes: 11 additions & 6 deletions zh/deploy-tidb-cluster-across-multiple-kubernetes.md
Original file line number Diff line number Diff line change
Expand Up @@ -509,12 +509,13 @@ EOF

2. 以步骤 1 为例,按顺序进行如下升级操作:

1. 如果集群中部署了 TiProxy,为所有部署了 TiProxy 的 Kubernetes 集群升级 TiProxy 版本。
2. 如果集群中部署了 TiFlash,为所有部署了 TiFlash 的 Kubernetes 集群升级 TiFlash 版本。
3. 升级所有 Kubernetes 集群的 TiKV 版本。
4. 如果集群中部署了 Pump,为所有部署了 Pump 的 Kubernetes 集群升级 Pump 版本。
5. 升级所有 Kubernetes 集群的 TiDB 版本。
6. 如果集群中部署了 TiCDC,为所有部署了 TiCDC 的 Kubernetes 集群升级 TiCDC 版本。
1. 如果集群中部署了 [PD 微服务](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(从 TiDB v8.0.0 版本开始支持),为所有部署了 PD 微服务的 Kubernetes 集群升级 PD 微服务版本。
2. 如果集群中部署了 TiProxy,为所有部署了 TiProxy 的 Kubernetes 集群升级 TiProxy 版本。
3. 如果集群中部署了 TiFlash,为所有部署了 TiFlash 的 Kubernetes 集群升级 TiFlash 版本。
4. 升级所有 Kubernetes 集群的 TiKV 版本。
5. 如果集群中部署了 Pump,为所有部署了 Pump 的 Kubernetes 集群升级 Pump 版本。
6. 升级所有 Kubernetes 集群的 TiDB 版本。
7. 如果集群中部署了 TiCDC,为所有部署了 TiCDC 的 Kubernetes 集群升级 TiCDC 版本。

## 退出和回收已加入的 TidbCluster

Expand All @@ -524,6 +525,10 @@ EOF

以上面文档创建的第二个 TidbCluster 为例,先将 PD、TiKV、TiDB 的副本数设置为 0,如果开启了 TiFlash、TiCDC、TiProxy、Pump 等其他组件,也请一并将其副本数设为 `0`:

> **注意:**
>
> PD 从 v8.0.0 版本开始支持微服务模式。如果配置了 PD 微服务,也需要将 PD 微服务 `pdms` 配置中对应组件的 `replicas` 值设置为 `0`。

{{< copyable "shell-regular" >}}

```bash
Expand Down
56 changes: 56 additions & 0 deletions zh/enable-tls-between-components.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,33 @@ aliases: ['/docs-cn/tidb-in-kubernetes/dev/enable-tls-between-components/']
...
```
> **注意:**
>
> PD 从 v8.0.0 版本开始支持[微服务模式](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(实验特性)。如需部署 PD 微服务,并不需要为 PD 微服务的各个组件生成证书,只需要在 `pd-server.json` 文件的 `hosts` 字段中添加微服务相关的 hosts 配置即可。以 `scheduling` 微服务为例,你需要进行以下配置:
>
> ``` json
> ...
> "CN": "TiDB",
> "hosts": [
> "127.0.0.1",
> "::1",
> "${cluster_name}-pd",
> ...
> "*.${cluster_name}-pd-peer.${namespace}.svc",
> // 以下是为 `scheduling` 微服务添加的 hosts 配置
> "${cluster_name}-scheduling",
> "${cluster_name}-scheduling.${cluster_name}",
> "${cluster_name}-scheduling.${cluster_name}.svc",
> "${cluster_name}-scheduling-peer",
> "${cluster_name}-scheduling-peer.${cluster_name}",
> "${cluster_name}-scheduling-peer.${cluster_name}.svc",
> "*.${cluster_name}-scheduling-peer",
> "*.${cluster_name}-scheduling-peer.${cluster_name}",
> "*.${cluster_name}-scheduling-peer.${cluster_name}.svc",
> ],
> ...
> ```
其中 `${cluster_name}` 为集群的名字,`${namespace}` 为 TiDB 集群部署的命名空间,用户也可以添加自定义 `hosts`
最后生成 PD Server 端证书:
Expand Down Expand Up @@ -1428,6 +1455,35 @@ aliases: ['/docs-cn/tidb-in-kubernetes/dev/enable-tls-between-components/']
然后使用 `kubectl apply -f tidb-cluster.yaml` 来创建 TiDB 集群。
> **注意:**
>
> PD 从 v8.0.0 版本开始支持[微服务模式](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(实验特性),如需部署 PD 微服务,需要为各个微服务配置 `cert-allowed-cn`。以 Scheduling 服务为例,你需要进行以下配置:
>
> - 更新 `pd.mode``ms`
> - 为 `scheduling` 微服务配置 `security` 字段
>
> ```yaml
> pd:
> baseImage: pingcap/pd
> maxFailoverCount: 0
> replicas: 1
> requests:
> storage: "10Gi"
> config:
> security:
> cert-allowed-cn:
> - TiDB
> mode: "ms"
> pdms:
> - name: "scheduling"
> baseImage: pingcap/pd
> replicas: 1
> config:
> security:
> cert-allowed-cn:
> - TiDB
> ```
2. 创建 Drainer 组件并开启 TLS 以及 CN 验证。
- 第一种方式:创建 Drainer 的时候设置 `drainerName`
Expand Down
26 changes: 26 additions & 0 deletions zh/get-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,32 @@ tidbcluster.pingcap.com/basic created

如果要将 TiDB 集群部署到 ARM64 机器上,可以参考[在 ARM64 机器上部署 TiDB 集群](deploy-cluster-on-arm64.md)

> **注意:**
>
> PD 从 v8.0.0 版本开始支持[微服务模式](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(实验特性)。如需部署 PD 微服务,可以按照如下方式进行部署:
>
> ``` shell
> kubectl create namespace tidb-cluster && \
> kubectl -n tidb-cluster apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/pd-micro-service-cluster.yaml
> ```
>
> 查看 Pod 状态:
>
> ``` shell
> watch kubectl get po -n tidb-cluster
> ```
>
> ```
> NAME READY STATUS RESTARTS AGE
> basic-discovery-6bb656bfd-xl5pb 1/1 Running 0 9m
> basic-pd-0 1/1 Running 0 9m
> basic-scheduling-0 1/1 Running 0 9m
> basic-tidb-0 2/2 Running 0 7m
> basic-tikv-0 1/1 Running 0 8m
> basic-tso-0 1/1 Running 0 9m
> basic-tso-1 1/1 Running 0 9m
> ```
### 部署独立的 TiDB Dashboard
{{< copyable "shell-regular" >}}
Expand Down
12 changes: 12 additions & 0 deletions zh/modify-tidb-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,18 @@ PD 中[支持在线修改的配置项](https://docs.pingcap.com/zh/tidb/stable/d

对于部署在 Kubernetes 中的 TiDB 集群,如需修改 PD 配置参数,需要使用 [SQL](https://docs.pingcap.com/zh/tidb/stable/dynamic-config/#在线修改-pd-配置)、[pd-ctl](https://docs.pingcap.com/tidb/stable/pd-control#config-show--set-option-value--placement-rules) 或 PD server API 来动态进行修改。

### 修改 PD 微服务配置

> **注意:**
>
> PD 从 v8.0.0 版本开始支持[微服务模式](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(实验特性)。

在 PD 微服务各个组件首次启动成功后,PD 的部分配置项会持久化到 etcd 中,且后续将以 etcd 中的配置为准。因此,在 PD 微服务各个组件首次启动后,这些配置项将无法再通过 TidbCluster CR 来进行修改。

PD 微服务各个组件中[支持在线修改的配置项](https://docs.pingcap.com/zh/tidb/stable/dynamic-config#在线修改-pd-配置)里,除 `log.level` 外,其他配置项在 PD 微服务各个组件首次启动之后均不再支持通过 TidbCluster CR 进行修改。

对于部署在 Kubernetes 中的 TiDB 集群,如需修改 PD 微服务配置参数,你可以使用 [SQL](https://docs.pingcap.com/zh/tidb/stable/dynamic-config#在线修改-pd-配置)、[pd-ctl](https://docs.pingcap.com/tidb/stable/pd-control#config-show--set-option-value--placement-rules) 或 PD server API 来进行动态修改。

## 修改 TiProxy 组件配置

修改 TiProxy 组件的配置永远不会重启 Pod。如果你想要重启 Pod,需要手动杀死 Pod,或更改 Pod 镜像等配置,来手动触发重启。
44 changes: 42 additions & 2 deletions zh/scale-a-tidb-cluster.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ watch kubectl -n ${namespace} get pod -o wide

本小节介绍如何对 PD、TiKV、TiDB、TiProxy、TiFlash、TiCDC 进行垂直扩缩容。

- 如果要对 PD、TiKV、TiDB、TiProxy 进行垂直扩缩容,通过 kubectl 修改集群所对应的 `TidbCluster` 对象的 `spec.pd.resources``spec.tikv.resources``spec.tidb.resources` 至期望值。
- 如果要对 PD、TiKV、TiDB、TiProxy 进行垂直扩缩容,通过 kubectl 修改集群所对应的 `TidbCluster` 对象的 `spec.pd.resources``spec.tikv.resources``spec.tidb.resources``spec.tiproxy.replicas` 至期望值。

- 如果要对 TiFlash 进行垂直扩缩容,修改 `spec.tiflash.resources` 至期望值。

Expand All @@ -179,6 +179,46 @@ watch kubectl -n ${namespace} get pod -o wide
> - 如果在垂直扩容时修改了资源的 `requests` 字段,并且 PD、TiKV、TiFlash 使用了 `Local PV`,那升级后 Pod 还会调度回原节点,如果原节点资源不够,则会导致 Pod 一直处于 `Pending` 状态而影响服务。
> - TiDB 是一个可水平扩展的数据库,推荐通过增加节点个数发挥 TiDB 集群可水平扩展的优势,而不是类似传统数据库升级节点硬件配置来实现垂直扩容。

### 扩缩容 PD 微服务组件

> **注意:**
>
> PD 从 v8.0.0 版本开始支持[微服务模式](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(实验特性)。

PD 微服务通常用于解决 PD 出现性能瓶颈的问题,提高 PD 服务质量。可通过 [PD 微服务常见问题](https://docs.pingcap.com/zh/tidb/dev/pd-microservices#常见问题)判断是否需要进行 PD 微服务扩缩容操作。

- 目前,PD 微服务模式可将 PD 的时间戳分配和集群调度功能拆分为 `tso` 微服务和 `scheduling` 微服务单独部署。
- `tso` 微服务为主备架构,如遇到瓶颈建议采用垂直扩缩容。
- `scheduling` 微服务为调度组件,如遇到瓶颈建议采用水平扩缩容。

- 如果要对 PD 微服务各个组件进行垂直扩缩容,可以使用 `kubectl` 命令修改集群所对应的 `TidbCluster` 对象的 `spec.pdms.resources` 至期望值。

- 如果要对 PD 微服务各个组件进行水平扩缩容,可以使用 `kubectl` 命令修改集群所对应的 `TidbCluster` 对象的 `spec.pdms.replicas` 至期望值。

以下步骤以 `scheduling` 微服务为例说明如何进行水平扩缩容:

1. 按需修改 `TidbCluster` 对象的 `replicas` 值。例如,执行以下命令可将 `scheduling``replicas` 值设置为 `3`

```shell
kubectl patch -n ${namespace} tc ${cluster_name} --type merge --patch '{"spec":{"pdms":{"name":"scheduling", "replicas":3}}}'
```

2. 查看 Kubernetes 集群中对应的 TiDB 集群配置是否已对应更新:

```shell
kubectl get tidbcluster ${cluster_name} -n ${namespace} -oyaml
```

上述命令输出的 `TidbCluster` 中,`spec.pdms``scheduling.replicas` 值预期应与你之前配置的值一致。

3. 观察 `TidbCluster` Pod 是否新增或者减少:

```shell
watch kubectl -n ${namespace} get pod -o wide
```

PD 微服务组件通常需要 10 到 30 秒左右的时间完成扩容或者缩容。

## 扩缩容故障诊断

无论是水平扩缩容、或者是垂直扩缩容,都可能遇到资源不够时造成 Pod 出现 Pending 的情况。可以参考 [Pod 处于 Pending 状态](deploy-failures.md#pod-处于-pending-状态)来进行处理。
无论是水平扩缩容、或者是垂直扩缩容,都可能遇到资源不够时造成 Pod 出现 Pending 的情况。可以参考 [Pod 处于 Pending 状态](deploy-failures.md#pod-处于-pending-状态)来进行处理。
4 changes: 4 additions & 0 deletions zh/suspend-tidb-cluster.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ summary: 了解如何通过配置挂起 Kubernetes 上的 TiDB 集群。
* TiProxy
* PD

> **注意:**
>
> 如果集群中部署了 [PD 微服务](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(从 TiDB v8.0.0 版本开始支持),PD 微服务组件的 Pod 会在删除 PD 之后被删除。

## 恢复 TiDB 集群

在 TiDB 集群或组件被挂起后,如果你需要恢复 TiDB 集群,执行以下步骤:
Expand Down
4 changes: 4 additions & 0 deletions zh/upgrade-a-tidb-cluster.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ Kubernetes 提供了[滚动更新功能](https://kubernetes.io/docs/tutorials/ku

使用滚动更新时,TiDB Operator 会按 PD、TiProxy、TiFlash、TiKV、TiDB 的顺序,串行地删除旧版本的 Pod,并创建新版本的 Pod。当新版本的 Pod 正常运行后,再处理下一个 Pod。

> **注意:**
>
> 当集群中部署了 [PD 微服务](https://docs.pingcap.com/zh/tidb/dev/pd-microservices)(从 TiDB v8.0.0 版本开始支持)时,如果采用滚动更新来升级 TiDB 集群,TiDB Operator 会按照 PD 各个微服务组件、PD、TiKV、TiDB 的顺序,串行地删除旧版本的 Pod 并创建新版本的 Pod。当新版本的 Pod 正常运行后,再处理下一个 Pod。
滚动更新中,TiDB Operator 会自动处理 PD 和 TiKV 的 Leader 迁移。因此,在多节点的部署拓扑下(最小环境:PD \* 3、TiKV \* 3、TiDB \* 2),滚动更新 TiKV、PD 不会影响业务正常运行。对于有连接重试功能的客户端,滚动更新 TiDB 同样不会影响业务。

> **警告:**
Expand Down

0 comments on commit 154c622

Please sign in to comment.