跳转到主要内容

Oracle RAC 与 DataGuard 高可用架构实战:从部署到灾备切换

博主
2 分钟
230 字
--

在去 IOE 的浪潮下,虽然 MySQL 和 PostgreSQL 正在崛起,但在金融、电信等核心交易场景中,Oracle RAC (Real Application Clusters) 依然是高可用数据库的“皇冠明珠”。它提供了无与伦比的实例级高可用和透明的应用切换能力。

本文将复盘我在维护一套核心交易系统(Oracle 19c RAC + ADG)时的实战经验,涵盖架构设计、稳定性优化及灾难恢复。

1. Oracle RAC 架构稳定性优化

RAC 虽然提供了高可用,但如果配置不当,Cache Fusion 产生的内联通信(Interconnect)反而会成为性能杀手。

1.1 私有网络(Private Network)

私网是 RAC 的生命线。

  • 巨型帧 (Jumbo Frames): 务必在私网网卡和交换机上开启 Jumbo Frames (MTU 9000)。实测在重负载下,能降低 CPU 中断并提升 15% 以上的吞吐量。
  • HAIP (Highly Available IP): 11gR2 引入的特性,允许私网多网卡负载均衡和故障转移。建议配置至少两块物理网卡绑定,确保私网带宽充足(万兆起步)。

1.2 共享存储与 ASM

  • 多路径 (Multipath): 必须配置多路径软件(如 DM-Multipath 或存储厂商自带软件),防止单条光纤故障导致磁盘掉线。
  • ASM 磁盘组规划:
    • +OCR_VOTE: 存放 OCR 和 Voting Disk,配置 Normal Redundancy(3个 Failure Groups)。
    • +DATA: 存放数据文件,External Redundancy(依赖底层存储 RAID)。
    • +FRA: 存放归档日志和 Flashback Logs。

1.3 避免节点驱逐 (Node Eviction)

RAC 最怕的就是节点脑裂(Split-Brain)导致的重启。

  • 调整 CSS 参数: 适当增加 misscount 参数(默认 30s),在网络抖动频繁的环境下,给 CSS 更多容忍时间。
  • HugePages: 开启大页内存,锁定 SGA,防止内存换页(Swap)导致的系统卡顿,进而引发节点驱逐。

2. DataGuard 容灾建设最佳实践

RAC 解决了单点故障,而 DataGuard (ADG) 解决了数据容灾。

2.1 保护模式选择

  • 最大可用性 (Maximum Availability): 核心交易系统首选。正常情况下同步传输(SYNC),网络中断时自动降级为异步,兼顾数据零丢失和业务连续性。
  • 最大性能 (Maximum Performance): 仅做报表或读写分离场景使用(ASYNC)。

2.2 归档日志传输优化

为了追上主库的写入速度,备库应用日志(Apply)的效率至关重要。

  • 开启并行应用: DB_RECOVERY_FILE_DEST_SIZE 要足够大。
  • 日志压缩: 开启 Oracle Net 压缩,减少带宽占用。
    REDO_TRANSPORT_COMPRESS_ALL=TRUE
    

2.3 真正的读写分离 (Active DataGuard)

ADG 允许备库在 Apply 日志的同时以 Read Only 模式打开。

  • 应用透明连接: 配置 TAF (Transparent Application Failover) 和 Service,让报表类 SQL 自动路由到备库执行,释放主库压力。

3. 灾难恢复演练:Switchover vs Failover

不做演练的容灾都是耍流氓。

3.1 计划内切换 (Switchover)

通常用于系统维护或机房搬迁。这是无损的,主备角色互换。

-- 主库端
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;

-- 备库端
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;

经验: 切换前务必检查 V$ARCHIVE_DEST_STATUS 确保所有日志已同步。

3.2 灾难切换 (Failover)

当主库无法恢复(如存储损坏、机房断电)时使用。可能会丢失少量数据(取决于保护模式)。

-- 备库端
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
ALTER DATABASE ACTIVATE STANDBY DATABASE;
ALTER DATABASE OPEN;

注意: Failover 后,原主库必须重建(Flashback Database 可以快速恢复,无需重做)。

4. 总结

Oracle RAC + DataGuard 依然是目前最稳健的商业数据库高可用方案。运维的核心在于对“等待事件”的敏感度——无论是 RAC 的 gc cr block busy 还是 DG 的 RFS network write,都能指引我们找到架构的短板。

分享文章