Oracle RAC双活存储配置三个关键点

在Oracle RAC存储双活配置中,要实现真正的高可用和数据零丢失,故障组规划、多路径冗余、以及OCR/Voting Disk的跨阵列部署是三个不可妥协的关键点。它们共同构成了从物理层到集群管理层的完整保护链。下面将结合具体案例和操作代码,逐一深入剖析。

关键点一:基于物理隔离的ASM故障组规划

这是实现存储双活数据冗余的核心逻辑 。其原则是:将可能同时故障的物理单元(如一台独立存储阵列)定义为一个故障组(Failure Group),并确保ASM的镜像副本跨故障组存放

  • 目标:确保单个存储阵列的完全故障不会导致数据丢失或数据库不可用。

  • 配置实践

    假设有两套存储阵列(Array_A和Array_B),计划创建NORMAL冗余的DATA磁盘组。

    sql 复制代码
    -- 创建磁盘组时,显式指定故障组
    CREATE DISKGROUP DATA NORMAL REDUNDANCY
      FAILGROUP ARRAY_A DISK -- 故障组1:存储阵列A
        '/dev/mapper/disk_A1',
        '/dev/mapper/disk_A2'
      FAILGROUP ARRAY_B DISK -- 故障组2:存储阵列B
        '/dev/mapper/disk_B1',
        '/dev/mapper/disk_B2'
      ATTRIBUTE 'compatible.asm' = '19.0', 'compatible.rdbms' = '19.0';

    代码注释 :此命令强制ASM将disk_A1disk_A2(来自Array_A)视为一个故障单元,将disk_B1disk_B2(来自Array_B)视为另一个。ASM会确保每个数据区(Extent)的主副本和镜像副本分别存储在这两个不同的故障组中。

  • 验证与监控

    创建后必须验证磁盘与故障组的映射关系。

    sql 复制代码
    -- 查询磁盘组中每个磁盘所属的故障组
    SELECT name, path, failgroup, state
    FROM v$asm_disk
    WHERE group_number = (SELECT group_number FROM v$asm_diskgroup WHERE name = 'DATA')
    ORDER BY failgroup;

    预期结果 :应清晰显示disk_A1disk_A2FAILGROUPARRAY_Adisk_B1disk_B2的为ARRAY_B

关键点二:多路径软件与UDEV规则的冗余配置

故障组保护的是"存储阵列级"故障,而多路径解决的是"路径级"故障。两者必须配合使用,缺一不可

  • 目标:确保服务器到单一存储阵列的每条物理路径都可用,避免因HBA卡、交换机或单条链路故障导致存储访问中断。
  • 配置实践
    1. 多路径配置 :使用multipath配置,确保每个LUN通过至少两条独立路径可见。

      bash 复制代码
      # 查看多路径聚合后的磁盘,确认来自不同存储的LUN
      [root@racnode1 ~]# multipath -ll
      # 输出示例:同一个LUN通过两条路径访问(如active/ready状态)
      3600a098038314c6a744b4a6d412b714d dm-0 NETAPP,LUN
      size=500G features='3 queue_if_no_path' hwhandler='0' wp=rw
      |-+- policy='service-time 0' prio=50 status=active
      | `- 2:0:0:0 sdb 8:16 active ready running  # 路径1
      `-+- policy='service-time 0' prio=10 status=enabled
        `- 3:0:0:0 sdc 8:32 active ready running  # 路径2
    2. UDEV规则 :为ASM磁盘配置持久化、一致的设备名和正确的权限,这是Oracle官方推荐的做法。

      bash 复制代码
      # /etc/udev/rules.d/99-oracle-asm.rules
      # 规则:使用WWID或DM_NAME绑定设备,并设置grid用户和asmadmin组权限
      ENV{DM_NAME}=="3600a098038314c6a744b4a6d412b714d", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
      ENV{DM_NAME}=="3600a098038314c6a744b4a6d412b714e", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
      # 重新加载规则
      udevadm control --reload-rules && udevadm trigger

      代码注释 :通过DM_NAME(多路径设备名)而非易变的sdX来绑定,确保ASM磁盘名称在重启后保持不变,这对RAC集群的稳定性至关重要。

关键点三:OCR与Voting Disk的跨阵列高可用部署

集群管理文件(OCR/Voting Disk)的高可用级别必须不低于甚至高于数据文件 。在双活存储中,最佳实践是将其部署在三个独立的故障组中。

  • 目标:防止因存储阵列故障导致集群脑裂或管理功能丧失。

  • 配置方案

    通常采用 HIGH冗余 级别,并利用三个独立的存储位置:

    1. 存储阵列A
    2. 存储阵列B
    3. 一个独立的第三站点(如一套NFS服务器或另一套小存储)
    sql 复制代码
    -- 创建用于OCR/Voting的高冗余磁盘组
    CREATE DISKGROUP OCR_VOTE HIGH REDUNDANCY
      FAILGROUP ARRAY_A DISK '/dev/mapper/ocr_vote_a1'   -- 存储阵列A
      FAILGROUP ARRAY_B DISK '/dev/mapper/ocr_vote_b1'   -- 存储阵列B
      FAILGROUP NFS_SITE DISK '/nfs_volume/ocr_vote_nfs' -- NFS第三站点
      ATTRIBUTE 'compatible.asm' = '19.0', 'compatible.rdbms' = '19.0',
               'compatible.advm' = '19.0';

    代码注释HIGH REDUNDANCY要求至少三个故障组。这样,即使任意两个故障组(如两个存储阵列)同时失效,仍有一个副本可用,集群可以继续运行。NFS站点的配置需遵循Oracle特定参数(如hard, intr, noac, vers=3等)以确保稳定性和性能。

  • 迁移现有OCR/Voting Disk(如适用):

    bash 复制代码
    # 1. 备份OCR
    ocrconfig -manualbackup
    # 2. 将Voting Disk添加到新磁盘组
    crsctl replace votedisk +OCR_VOTE
    # 3. 将OCR迁移到新磁盘组
    ocrconfig -add +OCR_VOTE
    ocrconfig -delete +原磁盘组名

总结:三大关键点的协同作用

为了更直观地理解这三个关键点如何协同工作,构建一个完整的双活存储保护体系,可以参考下表:

关键点 防护层级 主要作用 配置冗余要求 故障影响缓解
ASM故障组 数据逻辑层 实现数据跨存储阵列镜像,防止阵列级故障导致数据丢失。 NORMAL需2个故障组,HIGH需3个。 一个存储阵列宕机,数据访问不中断。
多路径+UDEV 物理路径层 实现到单一存储的路径冗余和设备名持久化,防止链路或控制器单点故障。 每个LUN至少2条活跃路径。 单条HBA卡、光纤线或交换机端口故障,存储访问不中断。
OCR/Voting Disk高可用 集群管理层 确保集群管理功能在存储故障时仍可用,防止脑裂。 推荐HIGH冗余,部署在3个独立故障组。 两个存储位置失效,集群仍能维持法定票数并运行。

协同工作流示例

  1. 正常运行时 :应用数据通过多路径写入DATA磁盘组,ASM自动将数据镜像写入ARRAY_AARRAY_B两个故障组。集群心跳通过OCR_VOTE磁盘组在三个位置同步。
  2. 存储阵列A故障
    • 多路径层:到阵列A的所有路径失效,但到阵列B的路径正常。
    • ASM层 :故障组ARRAY_A状态变为OFFLINE。由于数据在ARRAY_B中有完整镜像,DATA磁盘组保持MOUNTED,数据库实例无感知,持续提供服务。
    • 集群层OCR_VOTE磁盘组中位于阵列A的副本失效,但凭借HIGH冗余,位于阵列B和NFS站点的副本仍能维持集群法定票数,集群软件(CRS)继续运行。
  3. 恢复 :阵列A修复后,重新上线。ASM自动将ARRAY_A故障组中的磁盘重新加入并同步数据,恢复完整的NORMAL冗余状态。

综上所述,一个健壮的Oracle RAC存储双活环境,必须像搭积木一样,将这三大关键点层层落实、环环相扣。任何一层的缺失或配置不当,都可能在高压力故障场景下成为整个系统可用性的短板。


参考来源

相关推荐
弹简特1 小时前
【Java项目-轻聊】10-实现会话管理模块
java·开发语言·数据库
网管NO.12 小时前
MySQL 8.0 JSON 操作 | 新增 / 查询 / 修改,适配新兴业务
数据库·mysql·json
江畔柳前堤2 小时前
github实战指南00-命令在哪里执行?
人工智能·线性代数·oracle·数据挖掘·github·word
yurenpai(27届找实习中)2 小时前
Feed 流推送与附近商户:从推模式到 GeoHash,一条 Timeline 的完整旅程
java·数据库·oracle·feed
IT策士2 小时前
MySQL 系列:第1篇 数据库时代与MySQL
数据库·mysql
ExC1dNtqz2 小时前
Redis 分布式锁进阶第六篇讲解
数据库·redis·分布式
小胖xiaopangss3 小时前
Redis 基础入门与实践指南
数据库·redis·缓存
liulilittle3 小时前
甲骨文云中国大陆定向 QoS 原理及绕过解决方案
服务器·开发语言·网络·计算机网络·oracle·通信·qos
江畔柳前堤3 小时前
github实战指南05-Fork与开源协作
人工智能·线性代数·oracle·开源·github·word