Oracle11g RAC双NFS仲裁容错方案

说明:

整理文档时发现自己在2010年写的一个RAC容灾方案,觉得有一些用,分享出来。当时为了验证此方案,做了很多PoC。方案相对比较复杂,但是也提供了一种思路,读者需要对RAC的架构有一定了解。本方案为当年个人测试验证,不代表任何官方观点。方案环境为:Oracle 11.2.3+AIX 6.1.7。存储使用IBM DS8800,启用同步复制MetroMirror。本方案的核心点是如何保证在出现站点故障时,RAC voting device票数大于半数,以便恢复CRS。

1.方案介绍

生产环境有两个站点,主站点和备站点,主站点有节点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 配置步骤

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

原文发布于微信公众号 - 大魏分享(david-share)

原文发表时间:2016-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

认识Kubernates(K8S)

在后端开发中,在介绍Jenkins的可伸缩部署方式上,主要有两种方式:一种是基于Docker(或者docker-swarm 集群)的部署方式,另外一种是基于ku...

6878
来自专栏calvin

jira webhook 事件触发并程序代码调用jenkins接口触发构建操作

开发管理工具触发站点构建事件,事件处理中需要调用Jenkins接口开始构建动作。 我的应用场景: 使用jira作为管理工具,在jira中创建自定义的工作流来...

6033
来自专栏Felix的技术分享

Stetho的通信原理

3003
来自专栏信安之路

Window 提权基础

再加上个人的理解写出的关于 Windows 提权基础的文章,其中有些地方因为不太实用所以做了适当修改,感谢 @hl0rey 的帮助和建议。

1930
来自专栏openshift持续集成

jenkins邮件插件中的内容参数设置

众所周知,Jenkins默认提供了一个邮件通知,能在构建失败、构建不稳定等状态后发送邮件。但是它本身有很多局限性,比如它的邮件通知无法提供详细的邮件内容、无法定...

8548
来自专栏北京马哥教育

NFS实现(双httpd + php-fpm + nfs + mysql 搭建discuz论坛)

NFS相关介绍 一、NFS简介 1. NFS(Network File System): NFS是一个文件共享协议, 也是是在类Unix系统中在内核中实现的文件...

3457
来自专栏MYSQL轻松学

Percona Toolkit 常用工具使用介绍

Percona Toolkit 是一组高级的命令行工具,用来管理 MySQL 和系统任务,主要包括: 1、验证主节点和复制数据的一致性 2、有效的对记录行进行归...

3786
来自专栏散尽浮华

Centos6.X 下安装并使用VNC的操作记录

VNC是一个的"远程桌面"工具。,通常用于“图形界面”的方式登录服务器,可视化操作。废话不多说了,操作记录如下: 1)安装桌面环境 [root@vm01 ~]#...

3487
来自专栏容器云生态

Docker1.12尝试

前言:在docker1.12中默认增加了swarm mode 编排功能,并且官方支持更多的插件来进行docker的网路和外接存储插件,不过目前测试swarm m...

45110
来自专栏小狼的世界

Kubernetes基础:编排调度的那些Controllers

Kubernetes提供了很多Controller资源来管理、调度Pod,包括Replication Controller、ReplicaSet、Deploym...

1532

扫码关注云+社区

领取腾讯云代金券