Oracle extended RAC 19C下 Voting Disk管理

众所周知,Oracle在一个机房内实现真正双活的唯一方式是RAC,而如果这个机房出现整个机房的故障(比如机房断电,油机忘了加油了,或者机房地震了,机房着火了,机房进水了等等),那么,双活也将不复存在。为了解决这个问题,Oracle将RAC的范围进行了扩大,原意是将RAC的节点们分布在物理位置不同的机房,这样一旦某个机房整个下线,其他机房的节点可以承担起原来RAC该承担的责任。愿景很美好,原理也说得通。

但是,实现这个目的,有两个关键的点,其中最需要考量的是多个机房之间的链路质量(存储链路和大二层问题),这个超出本文讨论的范围。其次是,第三地表决。双活里面,除了两个业务机房,还需要有第三个仲裁机构不属于这两个机房,来维持在极端情况下的正确选举存活节点(站点)。

在双活项目的实施里,大体有两种方案,早前为此写过一个片子,现在找不到了。大体是,一种是存储来做,一种是主机层来做。存储层来做的话,方案有很多,如EMC的vplex metro,HDS的GAD等等。这些方案对DBA来说是非常友好的,因为双活和第三地表决不由DBA来规划和控制。第二种,主机层做的双活(基于ASM),这部分除了链路DBA不能主导之外,剩下的,如faillure group,3nd voting都是需要DBA来介入的。

本文只取其中一个部分,就是3nd voting,来阐述在19C extended rac下,第三地表决的管理。

环境说明,4节点RAC

对于第三地表决盘的选用,土豪家庭可以选择在第三个机房单独弄个存储。一般家庭会在第三个机房放置一个NFS服务器,把NFS挂给所有的RAC节点,dd出一个文件,当做第三地quorum盘。除了NFS的方案,也可以在第三地使用ISCSI服务器,从ISCSI服务器上map一个盘到所有RAC节点上,此方式跟NFS相比,我个人觉得ISCSI的方式更好,因为NFS中是一个文件,考虑到NFS挂载,误删等等情况下,ISCSI更好。目前使用较多的是NFS。

根据Oracle官方白皮书《Oracle Clusterware 11g Release 2 (11.2) –Using standard NFS to support a third voting file for extended cluster configurations》中的方式,配置好NFS服务器,把文件系统挂载到各个RAC节点之后。使用如下方式dd创建一个文件当做第三地表决盘,注意,这里dd出来的文件,会被ASM当做一个member磁盘来使用。区分这里的voting disk 和voting file的区别。

在我的环境的初始安装中,我并没有配置NFS,使用Normal的冗余方式,从Site 1和Site 2中选了3块盘,做一个OCRC1的磁盘组来放置OCR和Voting file。做好了之后效果是下面这样的:

注意,这三个Voting disk都是来自存储上的LUN。s1和s2是两个站点,可以看到有两个盘来自s1,这样有违双活的设计目的,因为一旦s1站点的两个voting disk都掉了,那整个RAC集群都会失效。所以,只能在s1,s2,以及第三个站点上,各防止一个voting disk。下面就来做这个事情。

首先,我们先在NFS上,dd创建一个500M的文件当做voting disk:

然后,尝试向集群中添加,我以为会成功,事实上是不行的。

这里提示的是如果voting file在ASM上的话,是不允许用add的方式添加的。Oracle的引文中的意思是当前冗余度已经交由ASM来管理。同样,删除也是不行。

此后,准备用replace的方式来尝试将ASM上的voting全部替换到共享文件系统上,显然,也是不行的。

所以,对于要把dd出来的文件当做一个磁盘的时候,必须把这个文件添加进ASM磁盘组才行。注意,这里需要修改asm的disk string,不然添加会报错。

这里我有一个误区,我以为像在cfs上放置ocr一样,需要事先把这个文件dd或者touch出来,事实上,voting放到cfs上是不需要创建这个文件的。

下面是修改string之前的报错,修改之后,这个文件可以被加进ASM磁盘组。

在完成这个盘的添加操作和简单梳理之后,新的voting disk构成如下:

满足三地的基本需求。

在RAC的设计中,3块voting disk是允许坏一块的,坏一个的情况下,不影响集群稳定性。这里测试将NFS服务器关闭,来观察GI在这种情况下的动作。

我个人不喜欢NFS的另一个主要原因是,这个时候,NFS关闭了,其他主机执行df -h等命令是会hang住的。并且umount /vote3nd也是hang住的(需要强制卸载这个挂载点,主机才能响应重启命令,不然会一直挂起)。

命令行hang住

此时查询voting disk的情况如下,可以看到有个voting disk下线了,集群状态正常。

在集群日志中,有如下的信息:

日志也显示,目前只有2块voting disk,并且这是维持集群状态最少数量就是2。这个时候再减少voting disk,整个集群就会整个瘫痪。

在NFS服务器启动之后,事实上,有些时候,3nd voting disk是不会重新上线的。必须要在节点上,umount -l 再重新mount这个NFS目录才可以让第三个表决盘重新上线。

到这里,基本上常规的操作就差不多了。但是,如果有这样的需求,比如将所有的voting disk全部从ASM移动到cluster filesystem或者从cluster filesystem移动到ASM该怎么做呢?事实上,如开始测试的那样,对于已经在ASM上有voting disk,是不可以通过add 方式来添加voting file到文件系统上的。

如前文所说我这里有个误区,我以为要事先dd准备好文件。事实是不需要的。直接指定名字,replace即可。那个文件是replace的时候,css自己去格式化和创建的。

这里的vote_nfs_3是一个asm disk是一个voting disk,vote_nfs_1是一个voting file。可通过kfed看出。

vote_nfs_3:

vote_nfs_1:

发表评论