Oracle RAC集群中的Voting Disk(表决磁盘)承载着节点成员资格与集群健康状态的关键信息,Oracle Clusterware通过多数派算法来决定哪些节点可以继续存活,避免脑裂。当Voting Disk因存储故障、人为误删或迁移需求而损坏时,集群可能无法正常启动,或者出现节点意外驱逐。重新配置Voting Disk并不是简单地把文件删掉再建一个,而是需要结合当前集群的运行状态、存储模型以及已有的OCR备份,制定一套严谨的操作流程。

下文将从Voting Disk的仲裁机制讲起,分析需要重新配置的典型场景,然后分别给出ASM磁盘组和裸设备两种环境的详细操作步骤,最后介绍验证方法与常见故障排查思路。
Voting Disk的仲裁机制与重配场景
Voting Disk存放的是集群成员列表和心跳计数等信息。Clusterware的CSS(Cluster Synchronization Services)进程会定期写入心跳,节点之间通过共享的Voting Disk交换状态。当集群出现网络隔离或节点故障时,拥有多数Voting Disk访问权的节点组可以继续运行,而少数派节点将被强制重启,这就是所谓的投票仲裁机制。因此Voting Disk的数量通常是奇数个,例如1个、3个或5个,以保证任何分区都能获得明确的多数。
需要重新配置Voting Disk的常见情况包括:底层LUN或磁盘盘符发生变化导致原路径失效;ASM磁盘组被误删除;存储阵列迁移后需要将Voting Disk重新定位到新的磁盘组;或者管理员在维护过程中使用dd等命令直接清空了表决磁盘内容。无论哪种原因,只要
这里有一个容易忽视的细节:Voting Disk与OCR(Oracle Cluster Registry)并不完全相同。OCR保存集群资源配置,而Voting Disk负责成员仲裁。重新配置Voting Disk前,必须确认OCR仍然可用或者有可靠备份,否则即便表决磁盘恢复,集群也无法加载资源配置。如果OCR也损坏了,则需要先恢复OCR,再处理Voting Disk。
重新配置前的关键准备与风险控制
在进行任何变更之前,必须备份OCR并记录当前集群状态。OCR备份可以使用ocrconfig命令导出,该操作不会影响在线集群。执行如下命令将OCR内容导出到本地文件:
# 备份OCR到本地路径 ocrconfig -export /tmp/ocr_backup_$(date +%Y%m%d).exp
同时,查看当前Voting Disk的配置和状态,确认问题范围。下面的命令可以列出集群中所有Voting Disk的路径和状态:
# 查询当前Voting Disk信息 crsctl query css votedisk
如果集群仍然可以启动,建议先停止相关资源以减少操作期间的数据写入。以grid用户执行
对于使用ASM的场景,还需要确认ASM实例能够正常启动并挂载目标磁盘组。例如使用srvctl status asm或者登录sqlplus查看v$asm_diskgroup。磁盘权限也是常见问题,grid用户需要拥有对原始设备或ASM磁盘的读写权限,必要时使用chown和chmod调整。
通过ASM重新配置Voting Disk的详细步骤
在Oracle 11g及之后的版本中,Voting Disk可以存放在ASM磁盘组中。这种方式的优势是管理统一,可以利用ASM的镜像和条带。重新配置时,如果原磁盘组已经损坏且无法挂载,可以新建一个磁盘组,然后把Voting Disk替换到新磁盘组。
第一步,以grid用户登录ASM实例,创建新的磁盘组。假设新磁盘组名为VOTE_DG,包含一块磁盘/dev/sdd1:
-- 以sysasm登录ASM实例 sqlplus / as sysasm -- 创建新的磁盘组用于存放Voting Disk create diskgroup VOTE_DG external redundancy disk '/dev/sdd1' name vote_disk1;
如果使用的是ASMLib设备,则磁盘路径可能是ORCL:VOTE_DISK1。创建完成后,确认磁盘组处于MOUNTED状态。
第二步,使用crsctl replace命令将Voting Disk替换到新磁盘组。该命令必须由root用户或具有相应权限的grid用户执行,并且要求集群处于停止状态或者至少CSS以独占模式运行。典型命令如下:
# 将Voting Disk替换到ASM磁盘组VOTE_DG crsctl replace votedisk +VOTE_DG
如果集群仍在运行,可以使用-force选项,但这不是推荐做法,因为可能引发节点重启。最好先停止集群:以root用户执行crsctl stop crs,然后在其中一个节点上执行替换命令。替换完成后,再次查询votedisk应该显示新磁盘组。
第三步,如果旧磁盘组仍然在线且希望回收空间,可以在确认Voting Disk已经迁移后,将旧磁盘组中的votedisk删除。不过ASM磁盘组中的Voting Disk无法单独删除,只能通过替换到新位置,然后重建旧磁盘组来移除。如果旧磁盘组已损坏,可以直接忽略。
裸设备环境下重新配置Voting Disk的注意事项
在较老的RAC版本或某些非ASM架构中,Voting Disk直接使用裸设备或块设备文件。重新配置时需要逐个添加新的表决磁盘路径,并删除失效路径。先查看当前配置:
crsctl query css votedisk
假设原路径为/dev/raw/raw1,需要替换为/dev/raw/raw2,可以先添加新设备,再删除旧设备:
# 添加新的表决磁盘 crsctl add votedisk /dev/raw/raw2 # 删除旧的表决磁盘 crsctl delete votedisk /dev/raw/raw1
注意添加和删除的顺序非常重要:必须先添加成功并验证集群能访问新设备,再删除旧设备,否则可能造成多数派丢失。另外,裸设备文件的属主和权限必须正确,通常为grid:asmadmin,权限660。可以使用ls -l /dev/raw/raw2检查,如果权限不对,执行chown grid:asmadmin /dev/raw/raw2和chmod 660 /dev/raw/raw2。
另一个常见问题是磁盘设备名在节点之间不一致。裸设备配置必须保证所有节点都能通过相同的路径访问同一个共享设备,否则会出现部分节点无法读取Voting Disk,导致启动失败。在多路径环境下,建议使用多路径设备如/dev/mapper/vote1,而不是底层物理设备。
重新配置后的验证与常见问题排查
完成Voting Disk替换后,需要重新启动集群并验证健康状态。首先以root用户执行crsctl start crs启动集群栈,然后在任一节点执行以下命令检查:
# 检查集群整体状态 crsctl check cluster -all # 查看资源状态 crsctl stat res -t # 查看Voting Disk信息 crsctl query css votedisk
如果crsctl stat res -t中数据库和监听资源正常,则说明重新配置成功。还可以执行ocrcheck验证OCR完整性。
常见问题包括:Voting Disk无法找到,通常是因为ASM磁盘组未挂载或磁盘路径错误;节点反复重启,可能是Voting Disk数量不足或权限问题导致多数派失败;替换命令执行报错,需要检查是否以正确用户身份执行,以及集群是否真的已停止。如果遇到PROC-26错误或类似权限错误,请检查磁盘组属主和权限设置。
最后提醒,重新配置Voting Disk属于高风险操作,建议先在测试环境完整演练,并确保有最新的OCR和数据库备份。实际生产环境操作时,务必申请维护窗口并与存储、网络团队协调,避免由于I/O超时或路径切换导致操作失败。
Oracle RACVoting Disk重新配置修改时间:2026-10-02 02:57:52