Oracle12C RAC节点损坏恢复方案研究

2019-06-10 07:52王启明
铁路计算机应用 2019年5期
关键词:网卡IP地址实例

王 健,王启明

(中国铁路北京局集团有限公司 信息技术所,北京 100860)

Oracle RAC在业界以高并行性和高可用性著称,其优势在于使用多个节点(数据库实例)构成一个数据库[1],在保证数据库高可用性的前提下更加充分的利用了多台主机的性能,RAC还可以通过增加集群节点进行性能扩展,为需要重新规划的应用提供了易伸缩性,以满足系统自身的调整。

在国内数据库市场,企业对数据库系统的稳定性和高可用性的要求越来越高,大部分企业选择Oracle RAC作为核心数据库[2],但在实际运维中会遇到服务器、操作系统、存储等软硬件设备故障导致RAC集群节点损坏的问题,此时集群的优势即会折损,后台数据库系统是否具有高可用性,能否保障关键数据的完整性和核心业务的连续性,成为影响大局的关键因素,而目前Oracle相关资料文献少有涉及RAC集群节点损坏恢复的完整方案,本文从实际案例出发,针对初次采用的Windows平台下Oracle12C RAC集群架构,介绍了本单位RAC节点损坏后,进行在线恢复的详细过程以及相关bug的解决办法,为后续数据库系统的运行维护积累了实用且宝贵的经验。

1 Oracle RAC原理及特点

Oracle RAC (Oracle Real Application Clusters)是Oracle新数据库版本中采用的一项新技术,也是Oracle支持网格计算环境的核心技术,解决了传统数据库应用中的高可用性问题[3]。

1.1 Oracle RAC原理

Oracle RAC工作原理是指在一个应用环境当中,所有的服务器管理和使用同一个数据库,目的是为了分散每台服务器的工作量,硬件设备至少需要两台及以上的服务器,并且还需要一台共享存储设备[4]。同时需要的软件有两类:集群软件和Oracle数据库中的RAC组件。所有服务器上的OS都应该保持版本一致,当某客户端发送请求到某台服务器的listener后,此服务器根据负载均衡配置策略,会把请求发送到本机的RAC组件处理也可能会发送到另外一台服务器的RAC组件,请求处理完成后,RAC会通过集群软件访问共享存储设备。从逻辑结构上看,每一个集群节点都有一个独立的实例,这些实例访问同一个数据库,节点间通过集群软件的通讯层来进行通讯。同时,为了减少I/O的消耗,采用了Cache Fusion[5]缓存融合技术,因此每一个数据库的实例,都保存了一份相同的数据库Cache,Oracle RAC结构如图1所示。

图1 Oracle RAC工作结构图

1.2 Oracle RAC特点

不同的集群产品都有各自的特点,RAC的特点包括:

(1)双机并行。RAC是并行模式,不是传统的主备模式。就是说,RAC集群的全部成员都能同时接收客户端的请求。

(2)高可用性。RAC是Oracle产品的高可用性解决方案,集群中只要还有一个节点存活,就能保证正常对外提供服务。

(3)易伸缩性。RAC能动态添加、删除节点,来满足系统自身的调整。

(4)低成本。能使用相对廉价的服务器来实现高吞吐量、高可用性的集群环境,这比对高端服务器增加硬件来实现高吞吐量、高可用性花费的成本低很多。

(5)高吞吐量。随着集群节点数量的增加,整个RAC的吞吐量也会不断增长[6]。

2 系统及数据库环境分析

2.1 既有系统及数据库环境

传统数据中心核心业务和关键业务的计算及存储主要都由RISC小型机完成,伴随着X86处理器可靠性及性能的提升,这些业务正在逐步迁移到X86平台[7]。2016年,本单位投产的货运系统,后台数据库环境整体都采用X86硬件架构,数据库操作系统为Windows Server 2012,为了保障系统的高可用性和业务并行处理能力,搭建了4节点Oracle12C RAC集群,配置信息如表1所示。

2.2 存在问题

如表1所示的多点数据库集群模式运行状态稳定,能够有效解决高并发访问情况下的单点瓶颈问题[8], 但是在勒索病毒爆发后,为计算机安装最新的安全补丁,修复“永恒之蓝”攻击漏洞的过程中,节点2在打完补丁重启后未能正常引导进入操作系统,最终节点系统崩溃,导致集群变为3节点运行,运行架构如图2所示。

表1 Oracle RAC配置信息

图2 Oracle RAC运行架构

虽然一个节点的损坏不会影响整体业务的正常运行,但是为计算机安装安全补丁是一件常态化的工作,甚至计算机本地磁盘组损坏都是系统运维中会遇到的问题,因此,不能让集群节点一味被动的削减,我们需要重新配置Oracle集群信息,在保证业务正常运行的前提下,在线修复损坏节点,恢复RAC集群原有结构,保证核心系统的高可用性。

2.3 研究方法及实现目标

虽然Oracle RAC为需要重新规划的应用提供了易伸缩性,可以动态地添加、删除节点,以满足系统自身的调整规划,但目前Windows Server 2012+Oracle 12C RAC实施案例较少,通过查阅Oracle官方技术支持站点获取帮助资料,参考以往Unix、Linux平台Oracle 11g R2 RAC添加、删除节点实施案例,借鉴其中的关键技术及成功经验,进而实现以下目标:

(1)能够在不停集群即保证现场货运业务连续性的情况下,获得水平的扩展,要在保留节点删除之前损坏的数据库实例,在集群中删除故障节点的信息后,在线新增节点,恢复集群原有架构。

(2)对整个实施过程以及在过程中遇到的各类问题认真总结,为X86架构Windows平台下Oracle RAC集群运维积累经验,提高数据库系统管理水平,确保核心系统运行安全稳定。

3 方案实施步骤

3.1 恢复前工作准备

3.1.1 操作系统安装

对损坏的集群节点2重新安装操作系统,要求与其他节点版本保持一致,更改主机名为tjhyrac2。

3.1.2 操作系统配置

(1)Host表修改

从保留节点的C:WindowsSystem32driversetchosts 复制到节点2相应的目录。

(2)网络配置

配置公网和私网IP。设置节点2两块网卡的IP地址,分别命名为Pub和Priv并设置网卡优先级,将Pub网卡设置为优先。

(3)服务配置

安装相关服务、开启远程桌面访问,将节点2上的Computer Browser设置为自动和启动状态。

(4)注册表配置

(5)共享配置

在节点2服务器上,使用net use命令配置节点间通信[9]:

在其他各节点运行:

(6)存储配置

在磁盘管理中,各磁盘删除磁盘号,然后直接联机。

3.1.3 数据备份

选择现场应用相对空闲时段进行节点恢复,恢复前可使用常用的3种备份方法:RMAN备份、逻辑备份和冷备份[10],或将数据库迁移至第三方环境。

3.2 损坏节点在线恢复

RAC集群中节点2系统出现故障,需要删除节点2信息,添加新节点。

3.2.1 删除节点

(1)节点确认

登录任一节点,执行:

在保留节点查看节点信息是否为unpin状态,如果不是使用下面命令,将节点设置为unpin状态。

crsctl unpin css -n(节点主机名)

(2)删除故障节点实例

在保留节点使用Oracle用户通过dbca删除故障节点实例。

(3)更新集群列表

保留节点更新GRID_HOME集群列表,在保留的节点执行:

更新ORACLE_HOME集群列表,在保留节点上执行:

(4)删除节点

在任一保留的节点上删除tjhyrac2节点,执行以下操作:

(5)验证

验证tjhyrac2节点被删除,在任一保留的节点上执行操作:

(6)删除VIP地址

删除tjhyrac2节点VIP地址。通过命令crsctl status res -t检查,如果VIP2还在,需要删除VIP,命令如下:

3.2.2 添加节点

3.2.2.1 添加节点前检验

在保留节点使用grid用户进行添加节点前检验。

如果报错:无法从节点XXX检索exectask,请检查共享。

如果无法共享,执行:

3.2.2.2 加入集群

将新增节点加入集群,在D:>Grid_homeaddnode下执行:

添加节点后遇到报错:“INS-30132 RUNNING ADDNODE.BAT DUE TO CVU CHECKFRAMEWORKSETUP() API ERROR”,其原因是由于触发BUG:24522899,导致无法添加节点,具体解决办法如下:

(1)修改相关文件

在执行添加命令的节点,修改$GRID_HOMEcvcvdataadmin.xml文件,将下面一段的内容替换上面一段的内容:

(2)删除临时文件

在需要添加的节点上,到%temp%目录下删除CVU_12.1.0.2.0_。

(3)替换文件cvu.jar

在以下路径检查cvu.jar文件的大小和时间是否相同。如果不同,在所有节点上复制和替换最新的文件cvu.jar到另外的目录下。

(4)重新运行addNode.bat

此时运行会遇到the error:INS-40394,执行如下步骤:

a.取消OUI Window;

b.在运行addNode.bat的节点编辑HOSTS注释本地主机的VIP地址和要添加的节点的VIP地址;

c.重新运行addNode.bat;

d.添加完成后放开本地主机的VIP地址和要添加节点的VIP地址的注释。

e.按默认执行。添加节点过程如图3所示。

图3 Oracle12C添加节点过程图

3.2.3 配置GRID

根据提示执行操作,在新添加的节点上运行如下命令:

D:appgrid12.1.0gridcrsconfig>gridconfig.bat执行完成后,点击确定。

3.2.4 安装Oracle软件

在节点1 Oracle软件安装路径下进入目录addnode执行:

addnode.bat "CLUSTER_NEW_NODES={tjhyrac2}"

按默认执行即可。

3.2.5 启动实例

如果添加节点的实例未启动,可在任一节点手动启动节点2的实例。

srvctl start instance -d oratjhy -n tjhyrac2。

3.2.6 创建初始化文件

如果发现所添加节点的初始化文件未创建,可手动创建initoratjhy2.ora(根据该节点实际的实例名来定),并从节点1的初始化文件,复制如下内容,添加到initoratjhy2.ora。

SPFILE='+DATA/oratjhy/spfileoratjhy.ora'

同理,配置监听参数文件和数据库口令文件。

3.2.7 创建OraMTS Service服务

在%ORACLE_HOME%in下执行命令如下:oramtsctl.exe -new -host tjhyrac2至此,节点2恢复工作全部完成。

4 方案实施效果

为了确保集群运行安全稳定,方案实施后,我们针对RAC的原理及特性,对删除、添加节点后RAC的有效性进行验证。

4.1 RAC有效性测试-重启服务器

测试目的:验证Oracle RAC中的一个节点发生故障后,另一个节点能否自动接管交易处理,以及故障恢复后节点处理能力能否恢复正常。

测试步骤:(1)利用客户端连接节点2,执行事先准备好的SQL脚本,同时将节点2服务器重启模拟节点故障;(2)继续稳定运行10 min;(3)故障节点开始恢复,同时启动该节点上的Oracle 实例;(4)继续稳定运行10 min。

测试结果:(1)步骤1后被测试数据库RAC切换成功,切换过程中,交易响应时间延长;(2)切换后VIP漂移到另一个实例,交易在1 min内能够恢复正常;(3)步骤3后故障节点恢复后,VIP重新漂回,受理交易恢复正常。

测试结果符合预期,测试结果通过。

4.2 RAC有效性测试-停实例

测试目的:考察系统在一定并发下,手动异常停止节点2数据库实例后,另一个数据库实例能否自动接管交易处理,以及故障恢复后节点处理能力能否恢复正常。

测试步骤:(1)手动(shutdown abort)停止节点2数据库实例,场景持续运行5 min;(2)启动停止的数据库实例,场景持续运行5 min。

测试结果:(1)手动停止数据库实例后,另一节点实例会很快(2 s内)接收请求(Failover机制生效);(2)步骤2重启停止节点实例后,受理交易正常。

实际测试结果符合预期,测试结果通过。

4.3 RAC有效性测试-心跳网络异常

测试目的:验证数据库RAC中的心跳网络异常后(主备网卡置down),另一节点能否自动接管交易处理,故障恢复后节点处理能力能否恢复正常。

测试步骤:(1)将节点1的网卡置down,观察交易处理、响应时间及各主机资源情况,验证VIP是否可以正常切换;(2)恢复该节点心跳主备网卡,重启CRS,交易稳定运行5 min,观察被测试系统交易恢复情况。

测试结果:(1)宕掉节点2的心跳主备网卡,由于RAC集群由4节点组成,不会出现脑裂,节点2实例重启,CRS重启,节点2的VIP漂移到节点1;交易切换至其它节点;(2)节点2心跳主备网卡故障恢复后,VIP回漂,数据库可正常启动并加入RAC,交易不受影响。

实际测试结果符合预期,测试结果通过。

从以上3个场景可以看出:如果其中某个节点发生问题,都实现了无用户干预的自动故障切换,通过损坏节点的恢复,提升了数据库的可靠性[11]。

5 结束语

通过该方案的研究与相关难点问题的解决,成功实现了Windows平台下Oracle12C RAC集群在线恢复损坏节点,验证了Oracle RAC的易伸缩性,满足了核心系统自身的调整需要,也为其他平台下的节点恢复提供了参考。虽然RAC有着众多的优点,但是由于部署一套RAC会涉及到服务器、操作系统、存储设备、HBA卡等多方面的技术,且从实现上比单实例数据库更复杂,RAC自身也存在不少Bug,今后,还将对如何进一步提高RAC的稳定性、兼容性及性能调优等方面进行深入研究,为生产系统运维及开发提供更好的技术支撑。

猜你喜欢
网卡IP地址实例
部署Linux虚拟机出现的网络故障
铁路远动系统几种组网方式IP地址的申请和设置
Server 2016网卡组合模式
公安网络中IP地址智能管理的研究与思考
挑战Killer网卡Realtek网游专用Dragon网卡
《IP地址及其管理》教学设计
完形填空Ⅱ
完形填空Ⅰ
USB故障又一原因