Oracle集群管理-如何管理votedisk文件

本文详细介绍了Oracle RAC环境中Votedisk的基本管理、恢复和迁移操作。Votedisk用于存储节点成员信息,对集群的正常运行至关重要。文章解释了Votedisk的备份与恢复流程,以及如何在不同ASM磁盘组间迁移Votedisk。

1 votedisk基本管理

在votedisk文件中存储节点的成员信息,每个节点在启动并且试图加入RAC集群时,都需要读取votedisk文件,以确定成员节点的资格。这个文件无疑时很重要的,索引在安装Clusterware时需要创建多个Voting文件,每个文件都有唯一的ID即为FUID。如果将Voting文件存储在ASM磁盘组中,那么通过磁盘组的冗余就可以保证Voting文件的安全。

为了保证Voting文件的安全,需要对它进行备份,并且在必要时对其进行恢复,如果有必要,可以增加其他的Voting文件或者删除多余的Voting文件,还可以把Voting文件从一个存储迁移到另外一个存储位置。

通过crsctl命令可以对Voting文件进行管理,

  1. 查看Voting文件

crsctl query css votedisk

从11.2版本开始,Voting文件不需要进行手工备份,只要Clusterware的结构做了修改,Voting文件便会自动备份到OCR中,如果添加新的Voting文件以前备份的Voting文件内容自动回复到新的Voting文件中

  1. 删除Voting文件

crsctl delete css votedisk fuid

  1. 添加Voting文件

crsctl add css votedisk +data

  1. 替换Voting文件(原来的文件被删除)

crsctl replace votedisk +database

2 votedisk基本恢复

  1. 全部丢失恢复

如果所有的Voting文件全部损坏,就需要从OCR中进行恢复,因为Voting文件损坏,Cluster是无法启动成功的,

这时需要以root身份启动集群到exclusive模式。在这个模式下集群不读取Voting文件

crsctl start crs -excl

查看Voting文件的状态,应该为空空着state字段为OFF

crsctl query css votedisk

如果Voting文件存储在ASM磁盘组中,那么通过命令

crsctl replace votedisk +database

可以从OCR中恢复Voting文件

crsctl query css votedisk

crsctl stop crs

crsctl start crs

表决磁盘(votedisk)是为因网络导致脑裂的情况而创建的。表决磁盘在11G存储在ASM中,且如果放入ASM将有几点要求。
第一:表决磁盘文件必须全部放入ASM中;
第二:表决磁盘存在asm中的个数不能删除和添加,而是通过asm的normal,high、external冗余级别决定的。
如:在normal中必须有3个故障组存在3个votedisk,在high中必须要有5个故障组存在5个votedisk,那么在external只有1个votedisk
第三:表决磁盘文件在11G不在支持dd命令对其的备份和还原,而是支持crsctl相关命令
第四:表决磁盘文件的个数要是奇数,便于投票选举,且表决磁盘文件的个数最多为15个,但一般没必要超过5个。
介绍一下对于网络导致脑裂中表决磁盘的选举过程。
假如我有三个RAC实例节点分别是A,B,C那么当A节点宕机了,那么在11G中通过先尝试停止响应的资源,进而剔除该节点,那么为什么会剔除该节点呢?那是因为当发生脑裂的时候
当发生脑裂的时候被分割成两部分,A 为一部分投票为1,BC为一部分投票为2,那么更具选举会选择票数多的那方,从而剔除A;刚刚这是三个节点的例子
那么对于两个实例组成的RAC怎么处理呢?那么这个时候表决磁盘就起到一定的作用了,当脑裂发生了,那么每一方都持一票,谁也不能剔除谁?这可怎么办呢?那么oracle会选择
存留首先获得表决磁盘文件多的那方,将组成一个集群从而剔除另一方。通常我们所说的磁盘心跳就是通过共享磁盘中的表决磁盘来检测的。
eg:


[grid@rac-one peer]$ crsctl get css disktimeout
CRS-4678: Successful get disktimeout 200 for Cluster Synchronization Services.
[grid@rac-one peer]$ 

通过ocssd进程来管理

3 votedisk迁移

如何移动表决磁盘文件到另一asm磁盘组呢?
eg:
[grid@rac-two ~]$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.4.0 Production on Tue Mar 25 23:31:24 2014

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> col name for a20
SQL> col path for a40
SQL> set linesize 200
SQL> select a.name,b.name,b.path,b.voting_file from v$asm_disk b,v$asm_diskgroup a where a.group_number=b.group_number;

NAME                 NAME                 PATH                                     V
-------------------- -------------------- ---------------------------------------- -
DATADG               DATADG_0000          /dev/asm-diskg                           N
TESTDG               TESTDG_0004          /dev/asm-diskh                           N
TESTDG               TESTDG_0000          /dev/asm-diski                           N
TESTDG               TESTDG_0001          /dev/asm-diskj                           N
TESTDG               TESTDG_0003          /dev/asm-diskf                           N
GIDG                     GIDG_0001            /dev/asm-diskc                           Y
TESTDG               TESTDG_0002          /dev/asm-diskk                           N
GIDG                     GIDG_0000            /dev/asm-diskd                           Y
GIDG                     GIDG_0002            /dev/asm-diske                           Y
DATADG               DATADG_0001          /dev/asm-diskb                           N

10 rows selected.

SQL> exit
另外还可以使用crsctl query css votedisk 获得信息


[grid@rac-two ~]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   3da4160ba0334f66bf4b2e6e9b38cceb (/dev/asm-diskd) [GIDG]
 2. ONLINE   2797b9ed25e84f34bf8fa5948c8fedb6 (/dev/asm-diske) [GIDG]
 3. ONLINE   69ade332aa214f3abfd8b77a410019b0 (/dev/asm-diskc) [GIDG]
Located 3 voting disk(s).

当votedisk属于asm组从而移动votedisk的时候将不能使用crsctl add css votedisk命令,否则会报错。但是如果原先votedisk属于集群文件系统文件,那么可以使用该命令进而replace
完成操作。
[grid@rac-two ~]$ crsctl add css votedisk +testdg
CRS-4671: This command is not supported for ASM diskgroups.
CRS-4000: Command Add failed, or completed with errors.
将votedisk从磁盘组GIDG 移动到TESTDG


[grid@rac-two ~]$ crsctl replace votedisk +TESTDG
Successful addition of voting disk 98f8244772c74fc0bf8c5ddc699775f1.
Successful addition of voting disk aa123f79eef94f9ebf12ed0953a3caa6.
Successful addition of voting disk 42e16333baa44f78bf00840265bff13d.
Successful deletion of voting disk 3da4160ba0334f66bf4b2e6e9b38cceb.
Successful deletion of voting disk 2797b9ed25e84f34bf8fa5948c8fedb6.
Successful deletion of voting disk 69ade332aa214f3abfd8b77a410019b0.
Successfully replaced voting disk group with +TESTDG.
CRS-4266: Voting file(s) successfully replaced


[grid@rac-two ~]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   98f8244772c74fc0bf8c5ddc699775f1 (/dev/asm-diski) [TESTDG]
 2. ONLINE   aa123f79eef94f9ebf12ed0953a3caa6 (/dev/asm-diskk) [TESTDG]
 3. ONLINE   42e16333baa44f78bf00840265bff13d (/dev/asm-diskf) [TESTDG]
Located 3 voting disk(s).
[grid@rac-two ~]$  
备份表决磁盘文件。
刚刚介绍了无需备份,任何改变都会自动备份到ocr中。
如果磁盘文件损坏了那么如何修复呢?
首先要独占模式启动crs资源
crsctl start crs -excl
如果是存在asm中,使用crsctl replace votedisk +diskgroup
完成修复
如果是存在集群文件系统,那么需要查看votedisk信息,crsctl query css votedisk然后删除原先的失效的votedisk,进而在添加votedisk
命令为:crsctl add css votedisk ‘path',
然后再使用root停止crs,crsctl stop crs
然后再使用root启动crs ,crsctl start crs

 
原文链接:https://blog.youkuaiyun.com/rhys_oracle/article/details/22112133

<think>我们正在处理关于如何正确重启Oracle集群(RAC)的问题。根据提供的引用内容,我们可以总结出以下步骤和注意事项: 1. **引用[1]中提到**:RAC集群的停止和启动过程。启动集群中的数据库可以使用`srvctl start database`命令,该命令会在集群的每个节点上启动数据库实例。同样,停止集群也应该有相应的命令。 2. **引用[2]中提到**:Oracle RAC运行于集群之上,提供了高可用性。如果集群内的一个节点发生故障,Oracle可以继续在其余的节点上运行。因此,在重启集群时,我们需要确保集群的高可用性不受影响,即重启操作应该是滚动重启(逐个节点重启)还是整个集群同时重启,这取决于维护需求。 3. **引用[3]中提到**:在解决集群主机重启问题时,修改了系统配置(如大页内存配置)并解决了问题。这提醒我们在重启集群前需要检查系统配置,确保配置正确,避免重启后出现问题。 4. **引用[4]中提到**:集群时间同步(NTP和CTSS)。在重启集群时,需要确保时间同步服务正常运行,以避免集群节点间的时间不一致导致问题。 根据以上信息,我们可以整理出重启Oracle集群的步骤: ### 重启Oracle集群的步骤 #### 1. 准备工作 - 确保所有节点间的网络通信正常(如私有网络、公共网络)[^2]。 - 检查系统配置(如大页内存配置)是否正确,避免重启后出现问题[^3]。 - 确保时间同步服务(NTP或CTSS)已配置并正常运行[^4]。 #### 2. 停止集群(按顺序停止) - **停止数据库**:使用`srvctl`命令停止整个数据库。 ```bash srvctl stop database -d <database_name> ``` - **停止实例(可选,如果不需要逐个停止,上一步已停止整个数据库)**:也可以逐个节点停止实例,但通常直接停止整个数据库更方便。 - **停止Oracle集群件(Clusterware)**:在每个节点上以root用户执行以下命令停止集群件。 ```bash # 在节点1执行: crsctl stop crs # 在节点2执行: crsctl stop crs # ... 以此类推 ``` 或者,可以使用以下命令一次性停止整个集群(在其中一个节点上执行即可): ```bash crsctl stop cluster -all ``` #### 3. 重启操作系统(如果需要) - 如果是因为操作系统维护需要重启,则按计划重启每个节点。注意:建议采用滚动重启(即逐个节点重启)以避免整个集群同时不可用。 - 重启节点1:`reboot` - 等待节点1重启完成,并验证集群服务是否在该节点上自动启动(如果没有,需要手动启动集群件)。 - 然后重启节点2:`reboot` - 以此类推。 #### 4. 启动集群(按顺序启动) - **启动Oracle集群件(Clusterware)**:在每个节点上以root用户执行以下命令启动集群件。 ```bash crsctl start crs ``` 或者,使用以下命令一次性启动整个集群: ```bash crsctl start cluster -all ``` - **检查集群状态**:确保集群件在所有节点上都正常运行。 ```bash crsctl check cluster -all ``` - **启动数据库**:使用`srvctl`命令启动整个数据库。 ```bash srvctl start database -d <database_name> ``` - **检查数据库状态**: ```bash srvctl status database -d <database_name> ``` #### 5. 验证 - 检查集群资源状态: ```bash crsctl stat res -t ``` - 检查数据库实例是否在所有节点上正常运行。 - 检查监听器状态: ```bash srvctl status listener ``` - 通过SQL*Plus连接到数据库,执行一些查询以确保数据库正常运行。 ### 注意事项 - **滚动重启**:对于高可用性要求高的环境,建议采用滚动重启(即一个节点一个节点地重启),这样在整个过程中数据库服务不会中断(除了该节点上的实例暂时不可用,其他节点仍可提供服务)[^2]。 - **时间同步**:重启后确保所有节点的时间同步,避免因时间偏差导致集群问题[^4]。 - **日志检查**:重启过程中和重启后,检查集群日志和数据库日志,确保没有错误信息。 - 集群日志位置:`$GRID_HOME/log/<node_name>` - 数据库日志位置:`$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace` ### 示例命令总结 ```bash # 停止整个数据库 srvctl stop database -d orcl # 停止整个集群(所有节点上的集群件) crsctl stop cluster -all # 重启操作系统(按节点逐个进行) reboot # 启动整个集群(所有节点上的集群件) crsctl start cluster -all # 启动数据库 srvctl start database -d orcl ``` §§ 相关问题 §§ 1. 如何检查 Oracle RAC 集群的健康状态? 2. Oracle RAC 滚动升级的操作步骤是什么? 3. 如何配置 Oracle 集群的时间同步服务(NTP/CTSS)? 4. 在 Oracle RAC 中如何添加或删除节点? 5. Oracle 集群件(Clusterware)日志文件的位置和查看方法? [^1]: 停止和启动数据库的命令参考 [^2]: 滚动重启以确保高可用性 [^3]: 重启前检查系统配置(如大页内存) [^4]: 确保时间同步服务正常运行</think>### 正确重启 Oracle RAC 集群的步骤 #### 📋 重启前检查 1. **检查集群状态** ```bash crsctl check cluster -all # 验证集群健康状态[^2] crsctl stat res -t # 检查所有资源状态 ``` 2. **验证时间同步** 确保 NTP/CTSS 服务正常运行[^4]: ```bash crsctl check ctss # 检查集群时间服务 ntpq -p # 检查NTP同步状态 ``` 3. **确认归档空间** ```sql SELECT * FROM V$RECOVERY_AREA_USAGE; # 检查闪回区空间[^1] ``` #### ⚙️ 重启步骤(推荐滚动重启) ```mermaid graph LR A[停止数据库] --> B[停止节点1集群服务] B --> C[重启节点1操作系统] C --> D[启动节点1集群服务] D --> E[验证节点1状态] E --> F[按序重启其他节点] ``` 1. **停止数据库** ```bash srvctl stop database -d <db_name> # 停止整个数据库[^1] ``` 2. **按节点滚动重启**(保持服务可用) **节点1操作:** ```bash crsctl stop crs # 停止集群服务[^3] reboot # 重启操作系统 crsctl start crs # 启动集群服务 crsctl check cluster # 验证节点状态 ``` 重复以上步骤逐个重启其他节点 3. **启动数据库** ```bash srvctl start database -d <db_name> # 启动数据库[^1] ``` #### ✅ 重启后验证 ```bash crsctl stat res -t # 检查资源状态 srvctl status database -d <db_name> # 验证数据库状态[^1] SELECT INSTANCE_NAME, STATUS FROM GV$INSTANCE; # 检查所有实例 ``` #### ⚠️ 关键注意事项 1. **大页内存配置** 确认 `/etc/sysctl.conf` 中的 `vm.hugetlb_shm_group` 正确配置[^3]: ```bash grep hugetlb /etc/sysctl.conf ``` 2. **避免全集群同时停机** 滚动重启可确保至少有一个节点保持服务可用[^2] 3. **时间同步容差** 节点间时间差需 ≤ 1 秒,否则会导致集群驱逐[^4] 4. **存储验证** ```bash asmcmd lsdg # 检查ASM磁盘组状态 ``` > 📌 **紧急情况**:若节点重启后无法加入集群,检查: > ```bash > olsnodes -s -t # 查看节点状态 > crsctl query css votedisk # 检查投票盘状态 > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值