构建多活数据中心

最近更新时间:2024-10-16 17:40:11

我的收藏

操作场景

多活数据中心是指部署在不同地域的多个数据中心同时对外提供服务,多个数据中心之间的数据可以实时同步,当某个数据中心出现灾难性事故时,可以将发生异常的数据中心的流量划拨到其他数据中心,实现跨地域的、快速故障转移,保证业务的正常运行。
多活数据中心是通过创建多个双向同步来实现,每个双向同步由两个单向同步任务来构建,所以单向同步的约束、操作限制等要求都需要满足,请参考 数据同步 中的对应同步场景。

注意事项

DTS 在执行全量数据同步时,会占用一定源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行。
为了避免数据重复,请确保需要同步的表具有主键或者非空唯一键,对于没有主键或者非空唯一键的表,有数据重复的风险 。
用户应提前规划好数据,每个数据中心负责更新(增、删、改)不同主键的数据,避免主键冲突或者相同主键数据互相覆盖等情况。如果因为业务原因,多个源端负责的主键存在交叉,请选择合理的冲突策略,使同步行为和数据符合预期。

应用限制

多个同步任务配置中 DDL 不能形成环形链路。
仅 MySQL/TDSQL-C MySQL/MariaDB/Percona 之间的同步链接支持双向同步。

DDL 配置原则

为了方便用户理解,如下原则将结合具体的场景来解释说明,以三活地域中心为例,实例 A(北京地域),实例 B(上海地域),实例 C(广州地域),分别建立 A<->B,B<->C,C<->A 三个双向同步任务。

多个同步任务配置中 DDL 不能形成环形链路,否则可能造成 DDL 语句在系统中循环,进而引发错误。 示例:图中蓝色线条1、3、5三个同步任务中,最多只能在两个同步任务中选择 DDL,如果选择三个就构成环形链路了。
同一个库表对象不能接收多个数据中心的 DDL 同步,否则多个数据中心的 DDL 可能在目标端形成冲突,进而引发错误。 示例:实例 A 和 C 有相同名称的表需要同步到实例 B 中,则同步任务1和4中,只能在一个任务选择 DDL。
在校验阶段,同步系统会结合当前用户的所有其他同步任务,判断正在新建的同步任务是否会造成 DDL 循环或者冲突,并给出提示供用户参考。

典型场景推荐配置

多活数据中心是通过创建多个双向同步来实现,每个双向同步由两个单向同步任务来构建,多活数据中心的每个同步任务的操作步骤和普通的单向同步操作步骤一致,只是在如下配置有差异。

本文针对典型多活数据中心场景做出以下推荐配置,请用户参考操作。
以三活地域中心为例,实例 A(北京地域),实例 B(上海地域),实例 C(广州地域),分别建立 A<->B(任务1和2),B<->C(任务3和4),C<->A(任务5和6) 三个双向同步任务。
场景
时间要求
同步任务
初始化类型
已存在同名表
冲突处理机制
同步操作类型
场景一:实例 A 有库表结构和数据,实例 B、C 为空
需要等任务1进行到“同步增量”阶段再创建任务2
任务1
结构初始化 + 全量数据初始化
前置校验并报错
请用户自行选择。冲突策略的生效对象仅对当前发生主键冲突时的主键数据。
DDL 参考配置原则进行选择,其他操作类型建议所有的同步任务保持一致。
任务2
不选择
忽略并继续执行
需要等任务3进行到“同步增量”阶段再创建任务4
任务3
结构初始化 + 全量数据初始化
前置校验并报错
任务4
不选择
忽略并继续执行
需要等任务5进行到“同步增量”阶段再创建任务6
任务5
结构初始化 + 全量数据初始化
前置校验并报错
任务6
不选择
忽略并继续执行
场景二:实例 A、B、C 都有库表结构和数据
任务1-6
全量数据初始化
忽略并继续执行

操作步骤

构建多活数据中心即创建多个双向同步,详细步骤请参考 构建双向同步数据结构