normal冗余下未显式定义failure group会导致所有磁盘默认归入同一组(group_0),两份镜像副本落在相同物理路径(如同一控制器、机框或背板),单点故障即同时丢失主副副本,冗余失效。
必须显式定义故障组(failure group),否则normal冗余形同外部冗余——asm不会自动划分,数据镜像可能落在同一物理控制器或机框上,单点故障即全挂。
为什么NORMAL冗余下不建failure group就等于没冗余
Oracle ASM的NORMAL冗余默认做两路镜像,但镜像副本必须落在不同failure group中才真正防止单点失效。若未指定failure group,所有磁盘会被自动归入同一个默认组(GROUP_0),此时两份副本实际写在同一套存储路径、同一RAID卡、甚至同一背板上。一旦该路径中断或控制器宕机,主副副本同时不可用,ORA-15042报错直接触发磁盘组DISMOUNT。
常见误操作包括:
- 建磁盘组时只写
CREATE DISKGROUP data NORMAL REDUNDANCY DISK '/dev/mapper/disk1', '/dev/mapper/disk2',漏掉FAILGROUP子句 - 误以为多路径设备(如
/dev/mapper/mpatha)天然隔离,其实它们仍可能映射到同一控制器 - 在RAC中跨节点使用共享LUN但未按物理存储拓扑分组,导致两个节点的磁盘被划进同一failure group
如何为双控制器存储正确划分failure group
典型企业级SAN或双控NAS环境,应将每个控制器下的磁盘划为独立failure group。例如:控制器A管理/dev/mapper/ctrla_disk1和/dev/mapper/ctrla_disk2,控制器B管理/dev/mapper/ctrlb_disk1和/dev/mapper/ctrlb_disk2。
建组命令必须显式声明:
CREATE DISKGROUP data NORMAL REDUNDANCY FAILGROUP ctrl_a DISK '/dev/mapper/ctrla_disk1', '/dev/mapper/ctrla_disk2' FAILGROUP ctrl_b DISK '/dev/mapper/ctrlb_disk1', '/dev/mapper/ctrlb_disk2';
关键点:
- 每个
FAILGROUP至少含1块磁盘;NORMAL模式下,整个磁盘组至少需2个failure group,且每个group内至少1块磁盘在线 - 磁盘路径必须真实属于对应控制器——可通过
lsscsi -v或存储厂商工具确认LUN归属 - 添加新磁盘时,必须指定其所属failure group,否则会进入默认组,破坏冗余设计
检查failure group是否生效且分布合理
建完后立刻验证,别等出事再查:
- 查当前分组:
SELECT NAME, FAILGROUP, PATH FROM GV$ASM_DISK WHERE GROUP_NUMBER = (SELECT GROUP_NUMBER FROM V$ASM_DISKGROUP WHERE NAME = 'DATA'); - 确认每块磁盘的
FAILGROUP非空且不全相同;若出现多个磁盘FAILGROUP值为GROUP_0,说明建组时未指定,需DROP重建 - 模拟单点故障:手动
ALTER DISKGROUP data DROP DISK '<disk_in_ctrl_a>'</disk_in_ctrl_a>,观察剩余磁盘是否仍在不同failure group中;若只剩一个group有磁盘,ORA-59048会立即报出
注意:v$asm_disk里FAILGROUP列为空或为GROUP_0,基本等于冗余配置失败。
RAC环境下failure group与节点亲和性无关
有人误以为“节点1的磁盘放failure group A,节点2的放B”能提升性能,这是错的。ASM的failure group纯粹是存储层容错单位,与RAC节点无绑定关系。RAC实例通过ASM实例统一访问所有磁盘组,数据分布由ASM内部算法决定,不受节点位置影响。
真正要避免的是:
- 把同一台存储柜里的所有LUN划进一个failure group
- 把iSCSI多路径的主备路径(如
mpatha和mpathb)分属不同failure group——它们实际通向同一控制器,不能算物理隔离 - 在添加OCR/VOTEDISK所在磁盘组时忽略failure group,导致集群心跳链路单点脆弱
最易被忽略的一点:即使你按控制器分好了failure group,如果底层存储网络(如FC交换机或iSCSI交换机)未做双平面冗余,那两个控制器之间的链路仍是单点——failure group解决不了网络层共模故障。











