首批通过分布式安全可靠测评,为关键业务系统打造
执行 Failover 后数据的订正流程
更新时间:2026-05-09 07:56
执行 Failover 后,新主集群相比原主集群可能会丢失一部分数据,可以通过以只读模式启动原主集群来订正新主集群的数据。
执行 Failover 操作后,备集群升级为主集群,而原主集群在故障修复后是不能正常启动的,否则会出现双主集群的问题。如果需要查看原主集群中的数据,则可以使用 DISABLED 的方式启动原主集群,同时 OceanBase 数据库提供了 DISABLED 和 DISABLED WITH READ ONLY 两种只读方式。
只读模式
通常,我们会使用 DISABLED WITH READ ONLY 模式来启动主集群进入只读模式,而 DISABLED 模式则适用于无损 Failover 操作后原主集群做为备集群加入到集群关系。
DISABLED WITH READ ONLY 与 DISABLED 的对比:
- 两种状态的集群都禁止与其它集群传输日志。
- DISABLED WITH READ ONLY 仅支持 PRIMARY 角色的集群,包括原主集群与新主集群,DISABLED 则没有这个限制。
- 处于 DISABLED WITH READ ONLY 状态的集群支持普通租户的强一致性读,各个分区的日志会发生变化。
- 处于 DISABLED 状态的集群保证普通租户的日志不发生变化,适用于无损 Failover 后的接入流程。
- 无损 Failover 后原主集群的接入操作请参见 执行无损 Failover 后原主集群接入流程。
DISABLED WITH READ ONLY 模式的特性及使用限制如下:
- 只有集群角色为 PRIMARY 的集群才能进入只读模式。
- 处于只读模式的集群的普通租户支持强一致性读和弱一致性读操作。
- 处于只读模式的集群的普通租户不支持写入操作和 DDL 操作。
- 处于只读模式的集群不支持新建租户。
- 当处于 VALID 状态的主集群不可用或者不存在时,支持通过 Failover 命令将只读模式的集群切换为 VALID 状态的主集群。
数据订正步骤
在原主集群的所有 Server 上,指定特殊参数
-m disabled_with_readonly_cluster,启动 OBServer。只读模式要求原主集群的所有 Server 以特殊参数启动。集群启动后会进入 DISABLED WITH READ ONLY 状态。该状态会在集群内部持久化,后续 Server 重启不再要求指定特殊参数。bin/observer -m disabled_with_readonly_cluster原主集群启动后,执行以下命令,查看集群状态,确认进入 DISABLED WITH READ ONLY 状态即只读模式状态。
obclient> SELECT CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_CLUSTER; +--------------+-------------------------+ | CLUSTER_ROLE | CLUSTER_STATUS | +--------------+-------------------------+ | PRIMARY | DISABLED WITH READ ONLY | +--------------+-------------------------+ 1 row in set原主集群以只读模式启动后,会进行自我隔离,即不会从新主集群或者其他备集群同步数据,自身也不会向其他集群同步数据,保证数据安全性。在用户侧,普通租户仅支持读操作,不支持写入和 DDL 操作,并且保证数据冻结在 Failover 之前的快照版本。
登录集群的普通租户,订正新主集群与原主集群的数据。OceanBase 数据库默认开启了强一致性读,不需要特殊配置,直接订正数据即可。您也可以通过以下方法分别在新主集群与原主集群上强制指定强一致性读。
设置 Session 变量
obclient> SET ob_read_consistency =STRONG;在 SQL 语句中指定 Hint
obclient> SELECT /*+read_consistency(strong) */ FROM table_name;
适用版本
OceanBase 数据库 V3.x 版本。