Voting Disk(表决磁盘)是Oracle RAC集群架构中最关键的组件之一,它负责在集群节点之间出现通信故障时,裁定哪些节点可以继续存活、哪些节点必须被驱逐。一旦Voting Disk丢失或损坏,整个集群将无法正常启动,严重时甚至需要重新配置集群件。因此,对Voting Disk进行定期备份,并熟练掌握其恢复流程,是每一位Oracle DBA的必修课。

一、Voting Disk的工作原理与备份的必要性
在一个Oracle RAC集群中,多个节点通过内部私有网络进行心跳通信。当节点之间的网络出现异常,或者某个节点发生故障时,集群必须做出决策:哪些节点继续提供服务,哪些节点被强制下线。这个决策过程就依赖Voting Disk来完成。
Voting Disk的核心规则是"多数表决"机制。每个节点在访问Voting Disk时会持续写入心跳信息,当集群发生脑裂(Split Brain)时,能够访问到超过半数Voting Disk副本的节点组将被保留,无法获得多数票的节点组会被驱逐。举例来说,如果集群配置了3个Voting Disk,某节点只能访问其中1个,那么该节点将失去仲裁资格而被重启。
正是由于Voting Disk承载了如此关键的仲裁职能,Oracle官方强烈建议在生产环境中对其进行备份。尤其是在Oracle 11g R2之前的版本中,Voting Disk的损坏往往意味着集群的完全瘫痪。从11g R2开始,如果Voting Disk存放在ASM磁盘组中,Oracle会自动进行备份,但DBA仍然需要了解手动备份与恢复的方法,以应对各种异常场景。
二、Voting Disk的多种备份方式
1. 使用crsctl命令手动备份
Oracle 10g和11g R1版本中,备份Voting Disk最标准的方式是使用crsctl命令。该命令会将Voting Disk的内容导出为一个文件,存放在指定路径下。具体命令如下:
# 以root用户执行备份操作 # 将Voting Disk备份到指定文件 crsctl backup votedisk /backup/voting_disk_bak_20240101.dmp # 备份完成后验证备份文件 ls -l /backup/voting_disk_bak_20240101.dmp
备份文件生成后,建议将其拷贝到集群之外的安全存储上,例如NFS共享目录或磁带库。需要注意的是,执行该命令必须使用root用户,并且一次只能备份一个Voting Disk,如果有多个副本需要分别执行。
2. 使用dd命令进行物理镜像备份
除了官方命令,也可以使用操作系统层面的dd命令对Voting Disk所在的裸设备或块设备做镜像备份。这种方式在紧急恢复时非常有效:
# 使用dd备份Voting Disk裸设备 dd if=/dev/raw/raw1 of=/backup/voting_dd_bak.img bs=4k # 恢复时使用反向操作 dd if=/backup/voting_dd_bak.img of=/dev/raw/raw1 bs=4k
使用dd备份时要特别注意if和of参数不能写反,一旦写反会把备份文件清空。同时要记录好每个Voting Disk副本与备份文件的对应关系,避免恢复时弄混顺序。在11g R2之前,使用dd之前建议先执行crsctl stop crs关闭集群,保证数据一致性。
3. 11g R2以后的自动备份机制
从Oracle 11g R2开始,Grid Infrastructure引入了新的架构。如果Voting Disk存放在ASM磁盘组中(这也是当前的推荐做法),Oracle会将其元数据自动备份到ASM磁盘组中,DBA无需手动干预。可以通过以下命令查看当前Voting Disk的位置和状态:
# 查看Voting Disk的存放位置 crsctl query css votedisk # 输出示例 ## STATE File Universal Id File Name Disk group -- ----- ----------------- --------- --------- 1. ONLINE 7a5bc85c8f4f4fbbfba5e3a2b1c8d9e (/dev/asm-disk1) [OCRVD] Located 3 voting disk(s).
在自动备份机制下,即使某个磁盘损坏,只要ASM磁盘组的冗余级别满足要求(Normal冗余至少3块盘,High冗余至少5块盘),集群就可以自动在存活的磁盘上重建Voting Disk,无需人工恢复。
三、Voting Disk的恢复操作详解
1. 使用备份文件恢复
当Voting Disk损坏且无法自动修复时,可以使用之前备份的文件进行恢复。恢复操作必须在root用户下执行,且需要在所有节点上关闭Oracle Clusterware之后进行:
# 1. 在所有节点关闭集群件 crsctl stop crs # 2. 使用备份文件恢复Voting Disk crsctl restore votingdisk /backup/voting_disk_bak_20240101.dmp # 3. 恢复完成后重新启动集群 crsctl start crs
恢复完成后,建议使用crsctl check crs命令在所有节点验证集群状态,并通过ocrcheck和crsctl query css votedisk确认相关组件均已恢复正常。
2. 重建与迁移Voting Disk
在某些场景下,例如存储迁移或磁盘规划调整,需要将Voting Disk迁移到新的位置。在11g R2之前,需要先用delete选项移除旧的,再用add选项添加新的:
# 向集群添加新的Voting Disk crsctl add votedisk /dev/raw/raw3 # 移除旧的Voting Disk crsctl delete votedisk /dev/raw/raw2 # 强制模式(集群关闭状态下添加) crsctl add votedisk /dev/raw/raw3 -force
在11g R2及以后的版本中,操作被大幅简化,直接指定目标ASM磁盘组即可完成迁移:
# 将Voting Disk迁移到新的ASM磁盘组 crsctl replace votedisk +NEW_DG
replace命令会自动完成旧副本的删除和新副本的创建,整个过程对集群运行影响很小。迁移完成后务必使用crsctl query css votedisk确认新的位置已经生效,并且所有副本状态均为ONLINE。
四、日常运维中的注意事项
首先,Voting Disk的备份策略应该与OCR的备份策略统一规划。OCR记录了集群的所有配置信息,Voting Disk负责仲裁,两者共同构成集群件的基石。建议将两者的备份文件存放在集群外部的存储介质上,并定期演练恢复流程,确保备份真实可用。
其次,Voting Disk的副本数量必须保持奇数。这是因为多数表决机制依赖于奇数个副本,如果配置为偶数,一旦发生脑裂可能出现两组节点各获得一半票数的僵局。Oracle允许的最小配置是1个副本(外部冗余),但生产环境强烈建议至少3个副本,分布在不同的故障组甚至不同的存储设备上。
最后,要建立日常巡检机制。定期执行crsctl query css votedisk检查副本状态,一旦发现某个副本状态异常,应及时排查底层存储问题。对于运行在ASM上的集群,还要关注ASM磁盘组的容量和冗余状态,避免因磁盘组故障导致Voting Disk全部丢失。只有将备份、监控、演练三者结合,才能真正做到对集群件的全方面保护。
Oracle RACVoting Disk集群仲裁盘修改时间:2026-09-02 11:42:48