导读
本文由知乎数据库负责人代晓磊老师老师撰写,全面介绍了知乎几十套 TiDB、数据总量达 PB 级别的数据库在线迁移经验,详细分享了三种场景和方案,为同城机房迁移提供了详尽的指导。
文章首先概述了在线机房迁移的基本条件,包括对专线和资源的要求,确保迁移过程中的稳定性和性能。接着,详细阐述了两种主要的迁移方案:使用 TiDB 的 Placement Rules 进行跨云跨 Kubernetes 集群的副本投放迁移,以及通过 TiCDC 链接的主备集群迁移。此外,还提供了其他场景的迁移建议,如业务双写和凌晨写入的特殊情况。
要想搞定在线机房迁移之 TiDB 数据库迁移,看完本文基本上所有的迁移方案你都可以搞定了(数据库迁移方案和流程大同小异)。本文中 3 种 TiDB 在线迁移的场景和方案,大家可以根据各自的业务场景各取所需了。
在线机房 prepare 阶段
一般在线机房迁移都是同城,且机房距离在 150 km,需要具备条件:
1. 专线要求
- 数据中心距离在 150 km 以内,通常位于同一个城市或两个相邻城市;
- 数据中心间的网络至少采用2条光纤专线连接,并且要求延迟 3 ms 左右,并且长期稳定运行;
- 双专线且带宽大于 200 Gbps。
2. 资源要求
- 物理机:比之前的配置要好,尤其当前的高密机型,考虑好硬盘 pv、cpu、内存资源规划;
- K8s :版本选择,以及环境搭建完毕,到达可用程度,并且可以绑定物理机nodes 资源;
- Operator:TiDB-operator 尽量选择高版本,做好调研和测试验证,到达可用状态。
在线 TiDB 集群迁移切换方案
在之前我写过的多云多活文章中有提及切换方案,并且基于线上的核心集群实施成功,相当于帮我们在线数据库迁移打好了坚实的基础。
因为知乎的 TiDB 是 all in K8s,我就先按照 K8s 给大家展示方案。

整体的迁移架构如上图所示,可以看到:
- 从结构上看,上方 K8s 集群 online 代表当前老机房的 TiDB 集群部署,里面包含了 TiDB 集群的各个组件。下方是新建立一套 k8s 集群,里面也部署了 TiDB 集群;
- 中间 2 个红框代表的同步链路,一个是基于 TiDB placement-rule 副本投放,从视图上还是同一套 TiDB 集群的迁移链路。另外一个是由 TiCDC 同步的上下游 2 套不同的 TiDB 集群(上下游的版本可以不一样)。
下面我们分别来聊下这两种迁移方案:
一、跨云跨 k8s 的 TiDB placement-rule 副本投放迁移(60% tidb 集群都由此方案迁移)
迁移架构说明

Placement Rules 是 PD 在 4.0 版本引入的一套副本规则系统,用于指导 PD 针对不同类型的数据生成对应的调度。通过组合不同的调度规则,用户可以精细地控制任何一段连续数据的副本数量、存放位置、主机类型、是否参与 Raft 投票、是否可以担任 Raft leader 等属性。Placement Rules 特性在 TiDB v5.0 及以上的版本中默认开启( 5.0 之前开启需要通过 pd-ctl 命令:config set enable-placement-rules true 开启)。默认开启 placement-rule 后的情况如下:
# ./pd-ctl -i
» config placement-rules show
[
{
"group_id": "pd",
"id": "default",
"start_key": "",
"end_key": "",
"role": "voter",
"is_witness": false,
"count": 5
}
注:“count”: 5 副本是因为之前我 config set max-replicas 5 修改过集群副本量
如果我想给这个 TiDB 集群实现同城双中心的副本放置 3 个 voter 副本在老集群,

最低0.47元/天 解锁文章
859

被折叠的 条评论
为什么被折叠?



