0
点赞
收藏
分享

微信扫一扫

YashanDB 主备故障切换实践指南

1. 引言

随着企业对数据服务连续性要求的不断提高,数据库系统的高可用性成为核心关注点。YashanDB 支持基于物理备库的主备复制架构,通过日志同步实现主备库之间的数据一致性。当主库发生故障或需要进行计划性维护时,可通过主备切换将备库提升为主库,从而快速恢复服务。

本文旨在系统梳理 YashanDB 的主备切换方法,帮助数据库管理员(DBA)掌握从检查状态到执行切换、再到旧主库降备的完整流程,确保在各种场景下都能安全、高效地完成切换操作。

2. 主备切换方式概述

YashanDB 提供了两种主要的主备切换方式:

切换类型 使用场景 是否可逆 数据丢失风险
Switchover 计划性维护、升级、负载均衡等 ✅ 可逆 ❌ 无数据丢失
Failover 主库宕机、不可用等紧急情况 ⚠️ 不可逆(需手动降备) ⚠️ 可能有少量数据丢失

注意

  • Switchover 是一种“平滑”切换,适用于主备同步正常的情况。
  • Failover 是一种“强制”切换,仅用于主库无法访问的紧急场景,存在数据丢失风险。

3. Switchover(计划性切换)

3.1 适用场景

  • 主库硬件/软件升级
  • 网络调整或迁移
  • 负载均衡需求
  • 定期演练

3.2 操作前提

  • 主备库同步状态正常(transport_lag = 0, apply_lag = 0
  • 备库连接稳定,角色为 STANDBY
  • 所有客户端会话已妥善处理

3.3 操作步骤

步骤一:检查主备状态

-- 查看当前数据库角色
SELECT database_id, database_name, log_mode, open_mode, database_role FROM V$DATABASE;

--查看复制状态(在主库上执行)
select STATUS, DATABASE_MODE, SYNCHRONIZATION_STATUS, SYNCHRONIZED from v$ARCHIVE_DEST_STATUS;

-- 查看复制状态(在备库上执行)
SELECT connection, status, peer_addr, transport_lag, apply_lag FROM V$REPLICATION_STATUS;

输出示例:

          DATABASE_ID DATABASE_NAME                                                    LOG_MODE          OPEN_MODE         DATABASE_ROLE    
--------------------- ---------------------------------------------------------------- ----------------- ----------------- -----------------
           3411206185 yashandb                                                         ARCHIVELOG        READ_WRITE        PRIMARY              

1 row fetched.


STATUS            DATABASE_MODE     SYNCHRONIZATION_STATUS SYNCHRONIZED
----------------- ----------------- ---------------------- ------------
NORMAL            OPEN              SYNC                   YES         

1 row fetched.


CONNECTION        STATUS            PEER_ADDR                                                        TRANSPORT_LAG    APPLY_LAG 
----------------- ----------------- ---------------------------------------------------------------- ------------- ------------ 
CONNECTED         NORMAL            192.168.3.110:1602                                                           0            0

1 row fetched.

步骤二:在备库执行 Switchover

ALTER DATABASE SWITCHOVER;

提示
执行期间,主库所有会话将被中断,且无法建立新连接,直到切换完成。

步骤三:验证切换结果

切换完成后,再次查询 V$DATABASEV$REPLICATION_STATUS,确认角色已互换,且同步恢复正常。

4. Failover(故障切换)

4.1 适用场景

  • 主库服务器宕机
  • 主库进程异常终止
  • 主库网络中断导致不可达

4.2 操作前提

  • 主库确实不可用(无法连接、无响应)
  • 备库具备足够的归档日志(received_lfn 最大)
  • 建议选择 gap_seq# = 0 的备库以减少数据丢失

4.3 操作步骤

步骤一:选择最优备库

-- 查询各备库的接收日志量和缺口
SELECT connection, status, received_lfn, gap_seq# FROM V$REPLICATION_STATUS;

选择策略:

  • 若所有 gap_seq# = 0,选 received_lfn 最大的备库。
  • 若存在 gap_seq# > 0,优先选择 gap_seq# 最小但 received_lfn 最大的备库。

步骤二:执行 Failover

ALTER DATABASE FAILOVER;

警告
Failover 后原主库不能再直接打开,否则可能导致“脑裂”(Split-Brain)问题!

步骤三:验证新主库状态

SELECT database_id, database_name, log_mode, open_mode, database_role FROM V$DATABASE;

成功标志:

  • open_mode = READ_WRITE
  • database_role = PRIMARY

5. 旧主库降备(Failover 后操作)

当旧主库恢复后,必须将其降为备库,不能直接 OPEN

5.1 操作流程(在备库上执行)

步骤一:关闭monit

yasboot monit stop -c yashandb -d

步骤二:重启旧主库至 MOUNT 阶段

yasboot node restart -c yashandb -n 1-2 -m mount

步骤三:执行降备命令

ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

步骤四:打开数据库

ALTER DATABASE OPEN;

步骤五:验证备库状态

SELECT open_mode, database_role FROM V$DATABASE;

正常输出:

OPEN_MODE         DATABASE_ROLE     
----------------- ----------------- 
READ_ONLY         STANDBY          

1 row fetched.
SELECT connection, status, received_lfn, gap_seq# FROM V$REPLICATION_STATUS;

正常输出:

CONNECTION        STATUS                     RECEIVED_LFN     GAP_SEQ# 
----------------- ----------------- --------------------- ------------ 
CONNECTED         NORMAL                             2828            0

1 row fetched.

5.2 异常处理

状态 含义 处理建议
NEED REPAIR 数据不一致,存在未应用的 redo 在主库上手动修复(BUILD DATABASE REPAIR STANDBY standby_name;)或在备库全量build
REDO MISMATCH redo 存在分歧但未应用 使用 ALTER SYSTEM IGNORE STANDBY MISMATCHED REDO 快速修复

重要提醒
若旧主库直接 OPEN 再降备,极易引发脑裂,导致数据冲突,必须严格遵循“先 MOUNT → 降备 → OPEN”的顺序。

6. 使用 yasboot 工具进行远程切换

YashanDB 提供了强大的命令行工具 yasboot,支持远程执行主备切换,极大提升了运维效率。

6.1 常用命令

命令 功能
yasboot node switchover 执行计划性切换
yasboot node failover 执行故障切换
yasboot node status 查看节点状态
yasboot node config show/set/unset 查看/修改配置参数

6.2 示例

# 执行 Switchover
yasboot node switchover -c yashandb -n 1-2

# 执行 Failover
yasboot node failover -c yashandb -n 1-1

# 查看节点状态
yasboot node status -c yashandb -n 1-1 -d

优势

  • 支持跨主机远程操作
  • 自动化任务流,减少人为失误
  • 可集成到监控告警系统中实现自动化切换

7. 最佳实践与注意事项

类别 建议
切换前准备 定期检查 V$REPLICATION_STATUS,确保 lag 为 0
Failover 选择 尽量选择 received_lfn 最大、gap_seq# 最小的备库
避免脑裂 旧主库恢复后必须先 MOUNT 再降备,禁止直接 OPEN
监控告警 配置 transport_lagapply_lag 的阈值告警
文档记录 每次切换后应记录时间、原因、操作人及结果

8. 总结

YashanDB 的主备切换机制设计合理,兼顾了灵活性与安全性。通过合理的规划与规范的操作流程,可以在不影响业务的前提下完成主备切换。无论是计划内的 Switchover 还是突发的 Failover,只要遵循本文所述步骤,即可有效保障数据库的高可用性。

未来,随着 YashanDB 在金融、电信等关键行业的深入应用,其高可用架构将持续优化,为用户提供更稳定、更智能的数据库服务。

参考资料

  • YashanDB 官方文档《主备切换手册》
  • YashanDB 工具手册《yasboot 命令介绍》

📌 说明:本文为原创技术分享,欢迎转载,请注明出处。如需合作或交流,欢迎联系作者。

举报

相关推荐

0 条评论