在去 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,都能指引我们找到架构的短板。