在 Ubuntu 上构建 Oracle 数据库的高可用
一、方案总览与选型
- Oracle Real Application Clusters RAC:多节点共享存储,同一数据库可被多个实例并发访问,提供故障切换与负载均衡,适合同一机房内的高并发与高可用场景。
- Oracle Data Guard:主库与一个或多个备库(物理/逻辑)通过 Redo 日志持续同步,支持最大保护/最高可用/最高性能三种保护模式,用于灾难恢复与计划内切换。
- Oracle GoldenGate:基于日志的实时变更捕获与复制,支持异构平台与跨地域,适合零停机迁移、多活/近实时与选择性复制。
- Maximum Availability Architecture MAA:以RAC + Data Guard为核心的端到端最佳实践,兼顾性能、可用性与容灾。
- Pacemaker + Corosync:通用 Linux 集群栈,可做资源管理与故障转移(如应用/监听器/VIP),与 Oracle 配合使用增强本地高可用。
- 网络与负载均衡:客户端/服务器端负载均衡(如 LOAD_BALANCE=YES、PMON 反馈),或 HAProxy/Nginx 对外提供统一接入与健康检查。
- 备份与快速回滚:RMAN 常规/增量备份与周期性恢复演练;Flashback 技术用于误删/误改的快速回滚,缩短 RTO。
二、两种落地架构
- 架构A(同城双活/高性能):RAC(Ubuntu 节点 ×2)+ 共享存储(SAN/NAS/集群文件系统)+ Data Guard 异地/同城备库。RAC 提供节点级高可用与负载均衡;Data Guard 提供站点级容灾与切换能力。
- 架构B(成本优先/快速上线):单实例主库 + Data Guard 物理备库,对外通过 VIP/HAProxy 提供连接入口,主备角色可切换,满足大多数业务连续性需求。
三、关键配置要点(以 Data Guard 为例)
- 基础准备
- 主库启用强制日志:
ALTER DATABASE FORCE LOGGING; 并开启归档;主备两端安装相同版本 Oracle 软件,配置 listener.ora/tnsnames.ora 互通,完成口令文件拷贝与连通性测试(如 tnsping)。
- 核心参数(示例)
- 唯一标识:
DB_UNIQUE_NAME 区分主备;
- 成员列表:
LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri_db,std_db)';
- 本地归档:
LOG_ARCHIVE_DEST_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES)';
- 远程传输:
LOG_ARCHIVE_DEST_2='SERVICE=std_db LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std_db'(可按需改为 SYNC/AFFIRM 提升零丢失能力);
- 角色切换:
FAL_SERVER/FAL_CLIENT 自动拉取缺失归档;
- 目录映射:
DB_FILE_NAME_CONVERT、LOG_FILE_NAME_CONVERT 处理主备目录差异;
- 自动化:
STANDBY_FILE_MANAGEMENT=AUTO;
- 兼容性:
COMPATIBLE 保持一致;口令文件建议 REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 并确保 SYS 密码一致。
- 备库创建与同步
- 方式一:RMAN 备份集/镜像拷贝 + 备库控制文件;
- 方式二:主库生成备控:
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/stdby.ctl'; 拷贝至备库并恢复;
- 备库启动到 Managed Recovery(
MRP/LSP 进程)或 Real-Time Apply 以实时应用 Redo。
- 保护模式选择
- 最大保护(零丢失,事务需等待备库写入确认,备库不可用时主库会停机);
- 最高可用(正常零丢失,备库短时不可用时自动降级为最高性能);
- 最高性能(主库提交不等待备库,性能优先)。
四、验证与运维
- 日常健康检查
- 主备同步:
V$ARCHIVE_DEST_STATUS、V$MANAGED_STANDBY、V$DATAGUARD_STATS 查看传输/应用延迟与状态;
- 保护模式:
SELECT protection_mode, protection_level FROM V$DATABASE;
- 日志缺口:
V$ARCHIVE_GAP;RFS/LNS 进程是否正常。
- 切换演练
- 计划内切换(Switchover):
ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY/SWITCHOVER TO PRIMARY; 验证应用透明切换;
- 故障切换(Failover):备库
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;(必要时 ALTER DATABASE ACTIVATE STANDBY DATABASE;)后对外启用新主库。
- 备份与回滚
- RMAN 全备/增量 + 定期恢复演练;
- Flashback Database/Query/Table 处理误删/误改,显著降低 RTO。
五、常见陷阱与建议
- RAC 在 Ubuntu 上的支持:RAC 官方长期以 Linux x86-64 为主,生产上更常见于 RHEL/OEL/SLES;在 Ubuntu 上可行但需充分验证内核参数、OFED/网络、共享存储与集群栈的兼容性,建议先在测试环境完成全链路演练。
- 网络与存储:至少准备双网卡/多路径,公网/私网分离;共享存储需具备冗余与多路径(如 multipathd),避免单点。
- 版本与补丁:主备 Oracle 版本/补丁保持一致;
COMPATIBLE 一致;REMOTE_LOGIN_PASSWORDFILE 与 SYS 口令一致。
- 监控与告警:部署 Nagios/Zabbix/Prometheus 监控实例、监听、Data Guard 状态与延迟,结合 告警 实现主动运维。
- 连接入口高可用:对外使用 SCAN/服务名 或 VIP + HAProxy/Keepalived 提供统一接入与健康检查,避免单实例/单监听器单点。