整理文档时发现自己在2010年写的一个RAC容灾方案,觉得有一些用,分享出来。当时为了验证此方案,做了很多PoC。方案相对比较复杂,但是也提供了一种思路,读者需要对RAC的架构有一定了解。本方案为当年个人测试验证,不代表任何官方观点。方案环境为:Oracle 11.2.3+AIX 6.1.7。存储使用IBM DS8800,启用同步复制MetroMirror。本方案的核心点是如何保证在出现站点故障时,RAC voting device票数大于半数,以便恢复CRS。
生产环境有两个站点,主站点和备站点,主站点有节点Node1, 备站点有Node2、Node3。三个节点配置Oracle RAC。主站点和备站点各有一个NFS服务器,提供voting device的NFS Quorum。主站点存储和备站点存储分别配置一个LUN,映射给本站点的NFS服务器。两个LUN配置MetroMirror关系。主NFS将识别的LUN创建vg(vgnfs)和文件系统(/vote1),将此文件系统作为NFS文件系统,而RAC节点的voting device的NFS Quorum文件位于此NFS文件系统上。
当主站点故障后,Node1,NFS服务器分区及主站点的存储均出现故障,备站点Node2,Node3因为只能访问本地一个voting disk,因此Oracle CRS也会异常终止。
此时,在备NFS服务器上将vgnfs导入并挂在/vote1文件系统。然后在node2和node3上mount备NFS服务器上的/vote1文件系统后,重新启动两个节点的CRS服务。此时由于node2和node3可以识别到两个vote设备,因此可以启动成功。
2.1环境介绍
主站点的RAC节点为:
node1:172.16.69.225
主站点NFS服务器:
node1:172.16.58.157
备站点的RAC节点为:
node2:172.16.69.226
node3:172.16.69.227
备站点的nfs服务器
node2:172.16.58.158
2.2配置NFS
2.2.1 配置NFS服务器
在两个NFS服务器上,首先创建grid用户和oinstall组,用户和组的ID号需要与三个RAC节点相同。将grid归属到oinstall组里。
#mkgroup id='1000' adms='root'oinstall
#mkuser id='1100' pgrp='oinstall'groups='asmadmin,asmdba,asmoper,dba' home='/home/grid' grid
在主备站点的两个DS8K上分别配置两个LUN,分别映射给主NFS server和备NFS server。在两个DS8K上,LUN ID分别为0400和1400。两个LUN之间配置Metro Mirror的PPRC关系:
dscli> lspprc 0400
ID State Reason Type SourceLSS Timeout (secs) Critical ModeFirst Pass Status
=============================================================================== 0400:1400 Full Duplex - Metro Mirror 04 60 Disabled Invalid
主NFS服务器识别0400的盘符为hdisk12,备NFS服务器识别的1400的盘符为hdisk38。PPRC的关系为0400->1400的MetroMirror关系。
在主NFS上用hdisk12创建vg—vgnfs,并创建文件系统/vote1
smit mkvg->Add an Original Volume Group
vg创建成功以后,创建文件系统/vote1
root@node1[/]#smit jfs2à Add an Enhanced JournaledFile System-> vgnfs
文件系统创建成功以后,在主NFS上mount该文件系统:
#mount /vote1
将RAC三个节点的IP地址和主机名加入到两个NFS服务器的/etc/hosts文件中:
172.16.69.225 node1
172.16.69.226 node2
172.16.69.227 node3
然后,分别在主备NFS上启动NFS服务(备NFS服务器上需要先执行#mkdir /vote1),设置/vote1为NFS文件:
root@node1[/]#smit mknfs
root@node1[/]#smit nfs-> Network FileSystem (NFS) -> Add a Directory to Exports List
在两个NFS服务器上查看:
root@node2[/]#exportfs
/vote1-public,sec=sys:krb5p:krb5i:krb5:dh,rw
root@node1[/]#exportfs
/vote1-public,sec=sys:krb5p:krb5i:krb5:dh,rw
2.2.2 配置NFS客户端(NFS客户端不能使用普通方式mount,需要先修改/etc/filesystems文件)
修改三个RAC节点的/etc/filesystems文件,增加mount选项:
/vote:
dev= "/vote"
vfs= nfs
nodename=172.16.58.157
mount= true
options=rw,bg,hard,intr,rsize=32768,wsize=32768,timeo=600,vers=3,proto=tcp,noac,sec=sys
account= false
然后在三个RAC节点上mount /vote1文件系统
# mount /vote1
# df -g
Filesystem GB blocks Free %Used Iused %Iused Mounted on
172.16.58.157:/vote1 10.00 9.51 5% 8 1% /vote1
2.3配置voting device
在初始情况下,RAC的voting device位于一块普通的磁盘上,只有一份:
$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 5e27688ef35c4fc8bfb6d0e095faab57 (/dev/rhdisk2) [DATA1DG]
Located 1 voting disk(s).
需要将其替换到有包含两个磁盘,并且包含一个NFS Quorum设备、冗余属性为Normal的DG上。
在两个站点的DS8K上分别创建一个LUN,LUN ID均为1200,不配置PPRC,映射给三个RAC节点。
2.3.1 配置DG
RAC节点识别到的盘符为hdisk7和hdisk9.
接下来,在三个节点上修改磁盘的属性
# cat /tmp/1.sh
## Change ownership to gridand oracle
for pv in `lsdev -Cc disk |grep -i mpio | awk '{print $1}'`
do
chdev -l $pv -areserve_policy=no_reserve -a algorithm=round_robin
chown grid:oinstall/dev/r$pv
chmod g+rw /dev/r$pv
done
#sh /tmp/1.sh
用hdisk7和hdisk9创建一个新的DG,DGVOTE:
#su – grid
$sqlplus / as sysasm
SQL> CREATE DISKGROUPDGVOTE NORMAL REDUNDANCY
FAILGROUP FG1 DISK'/dev/rhdisk8' SIZE 10G FAILGROUP FG2 DISK '/dev/rhdisk10' SIZE 10G;
#dd if=/dev/zero of=/vote1/qq bs=1M count=500
在NFS server上进行操作:
#chown -R grid:oinstall/vote1
#chmod -R 777 /vote1
2.3.2 为DG增加NFS quorum
#su - grid
$sqlplus / as sysasm
SQL> alter system setasm_diskstring='/dev/rhdisk*', '/vote/q*';
SQL>ALTER DISKGROUPDGVOTE ADD QUORUM DISK '/vote1/qq' SIZE 500M;
2.3.3 替换voting device
# crsctl replacevotedisk +DGVOTE
替换成功以后,进行确认:
# crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. OFFLINE 28f0d723b4df4feabf93e6ab27831841 () []
2. ONLINE 115be1be59734f6bbf6c4c9c3ecefd66 (/dev/rhdisk9) [DGVOTE]
3. ONLINE 5af523cf33f04f64bff19de4b7c73b32 (/vote1/qq) [DGVOTE]
Located 3 voting disk(s).
3 故障处理
3.1站点故障发生
当主站点(主站点的服务器,主站点的存储)和主NFS server发生故障以后,RAC的node2和node3的CRS会由于voting device数量不够而异常停止.
3.2数据库紧急恢复
首先在DS8K上对NFS文件系统所在的磁盘上进行failoverpprc的操作,以便备用NFS服务器可以导入vgnfs
dscli> failoverpprc-remotedev IBM.2107-75BGP81 -type mmir 1400:0400
CMUC00196I failoverpprc:Remote Mirror and Copy pair 1400:0400 successfully reversed.
在备用NFS服务器上importvg
在备用服务器上mount文件系统:
#mount /vote
在RAC的三个节点上,将/etc/filesystems中主用NFS服务器的IP由172.16.58.157改为备用NFS服务器的IP地址:172.16.58.158
sed"s/172.16.58.157/172.16.58.158/g" /etc/filesystems > /tmp/1;cp -Rp/tmp/1 /etc/filesystems
先重启node2和node3和NFS client服务:
#stopsrc-s rpc.mounted
#startsrc-s rpc.mounted
在RAC的node2和node3上mount文件系统:
#mount /vote1
在node2和node3上启动CRS:
#crsctl stop crs -f
#crsctl start crs
此时由于vote票数为两票,node2和node3的crs和数据库实例可以正常启动:
# crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. OFFLINE 28f0d723b4df4feabf93e6ab27831841 () []
2. ONLINE 115be1be59734f6bbf6c4c9c3ecefd66 (/dev/rhdisk9) [DGVOTE]
3. ONLINE 5af523cf33f04f64bff19de4b7c73b32 (/vote1/qq) [DGVOTE]
3.3站点故障恢复后
在站点故障恢复以后,首先启动RAC node1的CRS服务:
#crsctl start crs
然后,恢复dg中offline的磁盘:
SQL> selectGROUP_NUMBER,NAME from v$asm_diskgroup;
GROUP_NUMBER NAME
-----------------------------------------
2 DATA2DG
4 DGVOTE
SQL> selectDISK_NUMBER,STATE,PATH,FAILGROUP from v$asm_disk where GROUP_NUMBER=4;
DISK_NUMBER STATE PATH FAILGROUP
----------- --------
1 NORMAL /dev/rhdisk9 DGVOTE_0001
3 NORMAL /vote1/qq DGVOTE_0003
0 NORMAL DGVOTE_0000
此时,需要将hdisk7的状态由offline变为online,以便voting device的数量恢复为3:
SQL> alter diskgroupDGVOTE online disk DGVOTE_0000;
Diskgroup altered.
再次查看:
SQL> selectDISK_NUMBER,STATE,PATH,FAILGROUP from v$asm_disk where GROUP_NUMBER=4;
DISK_NUMBER STATE PATH FAILGROUP
----------- --------
1 NORMAL /dev/rhdisk9 DGVOTE_0001
3 NORMAL /vote1/qq DGVOTE_0003
0 NORMAL /dev/rhdisk7 DGVOTE_0000
$ crsctl query cssvotedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 115be1be59734f6bbf6c4c9c3ecefd66 (/dev/rhdisk9) [DGVOTE]
2. ONLINE 5af523cf33f04f64bff19de4b7c73b32 (/vote1/qq) [DGVOTE]
3. ONLINE 46afbaaf3f094f56bf6dd2cdc1b73c9d (/dev/rhdisk7) [DGVOTE]
站点故障恢复以后,备用NFS服务器无需切换到主用NFS服务器,但需要需要恢复vgnfs所在磁盘的PPRC关系,即进行failback操作,以便做到数据一致:
dscli> failbackpprc-remotedev IBM.2107-75BGP81 -type mmir 1400:0400
CMUC00197I failbackpprc:Remote Mirror and Copy pair 1400:0400 successfully failed back.
dscli> lspprc 1400
ID State Reason Type SourceLSS Timeout (secs) Critical ModeFirst Pass Status
============================================================================================
1400:0400 Full Duplex - Metro Mirror 14 60 Disabled Invalid