首批通过分布式安全可靠测评,为关键业务系统打造
主备异构集群反复进行 Switchover 操作超时
更新时间:2026-04-08 09:46
在主备异构的集群间反复进行 Switchover(SO)切换时,需要等待迁移任务完成且 Transfer 日志回放结束,即将切换为主集群的备集群必须回放完所有日志(包括 Transfer 日志)才能成功。
详细说明
场景描述
存在两个异构集群:
A 集群架构为:3:3:3。
B 集群架构为:1:1:1。
部署模式:单可用区(Zone)。
初始拓扑为 A 集群为主库,B 集群为备库,进行两次 Switchover 操作:
第一次执行 Switchover,将 B 切换为主库,A 切换为备库,操作成功。
第二次执行 Switchover,试图切换回初始拓扑(A 主 B 备),操作失败。
前置知识
以场景描述章节中的两个异构集群为例,需要了解以下背景知识:
Switchover 操作要求目标主库(即将晋升为主库的那个备集群)必须回放完源主库(即当前正在担任主库的那个集群)产生的所有最新日志,确保数据强一致。
备库的日志流(LS)数量需要与主库保持一致。在初始拓扑中,B 备库有三条日志流。当第一次切换后,B 成为主库,它会根据自身 1:1:1 的架构进行均衡,最终变为一条日志流。此过程会产生 Transfer 日志。
Transfer 任务有特定要求:回放 Transfer 相关的日志流数据必须位于同一台物理服务器上。
问题原因
第一次 Switchover 成功后,B 集群作为新的主库会进行内部均衡,从三条日志流变为一条日志流,并生成相应的 Transfer 日志。
当执行第二次 Switchover,试图将 A 集群再次切换为主库时,A 集群作为备库,必须回放完所有从主库(B)接收的日志,包括上述 Transfer 日志。而回放 Transfer 日志的前提是完成对应的迁移操作,即将日志流迁移到同一台机器上。
问题在于,用户在执行第二次切换时,A 集群尚未完成迁移和 Transfer 日志的回放,因此切换失败。必须等待迁移完成、Transfer 日志被成功回放,并且 A 集群回放到最新的日志后,Switchover 才能成功。
注意事项:
如果用户数据量较大,迁移过程可能耗时很久。
必须保证磁盘空间充足,以确保迁移任务能够正常完成。
在上述例子中,由于 B 集群作为主库时只有一条日志流,A 集群在切换后也将使用一组 Unit 来承担这条日志流(而之前它使用了三组 Unit 来承担三条日志流)。
规避措施
如果仅为了进行 Switchover 切换演练,为了避免因等待迁移和回放而耗时过长,可以在执行切换演练前,登录数据库并修改配置,关闭以下二个配置项(关闭主备库的均衡相关配置项,需在主备库均生效),再进行演练操作。
-- 在 sys 租户和用户租户均可修改该配置项,关闭自动负载均衡功能
ALTER SYSTEM SET enable_rebalance = false tenant='all_user';
-- 在 sys 租户和用户租户均可修改该配置项,关闭 Transfer
ALTER SYSTEM SET enable_transfer = false tenant = 'all_user';
适用版本
OceanBase 数据库 V4.x 版本。