利用OracleCRS搭建应用的高可用集群【IT168技术文档】前言:CRS的简介和由来从Oracle10gR1RAC开始,Oracle推出了自身的集群软件,这个软件的名称叫做OracleClusterReadyService(Oracle集群就绪服务),简称CRS。从Oracle10gR2开始,包括最新的11g,Oracle将其更名为Clusterware(集群件),但通常意义上我们认为CRS=Clusterware=OracleClusterReadyService=OracleClusterSoftware.CRS一般用来搭建Oracle的并行数据库,即RAC,但除了与RAC的接口之外,CRS还提供了一组高可用性的应用程序接口(API),用来搭建一般应用程序的高可用集群,即一般我们常说的双机热备,比如使用CRS实现MySQL的双机热备。这种主备模式的双机热备还可以包括许多第三方的应用程序,比如虚拟IP、磁盘组、文件系统、MySQL数据库、Apache,或者单节点的Oracle实例,或者单节点的ASM,等等,都可以作为资源注册到CRS中去,由CRS来启动,关闭,监测应用程序的状态,还可以设置应用程序相互的依赖关系,保证多组资源正确的启动顺序。本文就以保护单节点oracle实例为例,演示如何使用CRS来实现上述功能。使用的主要的软件有:Solaris10u4,OracleCRS10.2.0.2,OracleRDMBS10.2.0.3,VxVM5.0,磁盘阵列型号是AMS1000。系统拓扑图大致如下:主要操作步骤如下:一、准备工作:软件安装,数据库创建1.安装Solaris10,VeritasVolumeManager,安装过程略2.创建用户组dba/oinstall,oracle用户,并修改相应profile和/etc/hosts文件修改rhosts文件,配置oracle用户的对等连接;连接心跳网线;如果生产环境中推荐心跳网络使用千兆,推荐每台机器有两块网卡分别连接两个网络交换机;在操作系统中启动心跳网卡;准备共享磁盘,这里使用的是SAN环境下的共享盘ams_wms0_0098,大小为20G;3.下面使用静默方式来安装Oracle集群软件、数据库软件这种安装创建方式的优点是创建速度比较快,并且不需要运行图形界面,适合远程安装和建库;缺点是不直观,需要手工编写响应文件;这一步CRS的安装只需要在一个节点上做:oracle@rac01$../clusterware/runInstaller-silent-responsefile/tmp/shahand/crs.rspcrs.rsp文件内容参考“五-7”部分CRS的runInstaller运行完毕以后,要手工在两个节点上运行root.sh,并要手工运行$CRS_HOME/cfgtoollogs/configToolAllCommands检查CRS安装配置正确:检查设置了正确的心跳网络:root@rac01#$CRS_HOME/bin/oifcfggetife1000g010.198.88.0globalpublice1000g1192.168.2.0globalcluster_interconnect使用静默方式安装Oracle数据库软件,这一步两个节点都要做:./runInstaller-silent-responsefile/tmp/shahand/db.rspdb.rsp文件内容参考“五-8”部分4.创建oracle数据库文件所需要的盘组、逻辑卷、文件系统、挂载文件系统并设置权限;只需要在一个节点上做;手工检查数据库orcl的状态,可以登陆数据库selectstatusfromv$instance查看。二、Oracle集群软件资源的手工注册1.注销crs本身自带的ons、gsd、vip资源root@rac01#crs_stop-allAttemptingtostop`ora.rac01.gsd`onmember`rac01`Attemptingtostop`ora.rac01.ons`onmember`rac01`Attemptingtostop`ora.rac02.gsd`onmember`rac02`Attemptingtostop`ora.rac02.ons`onmember`rac02`Stopof`ora.rac02.gsd`onmember`rac02`succeeded.Stopof`ora.rac02.ons`onmember`rac02`succeeded.Stopof`ora.rac01.gsd`onmember`rac01`succeeded.Stopof`ora.rac01.ons`onmember`rac01`succeeded.Attemptingtostop`ora.rac01.vip`onmember`rac01`Attemptingtostop`ora.rac02.vip`onmember`rac02`Stopof`ora.rac02.vip`onmember`rac02`succeeded.Stopof`ora.rac01.vip`onmember`rac01`succeeded.root@rac01#crs_unregisterora.rac01.gsdroot@rac01#crs_unregisterora.rac01.onsroot@rac01#crs_unregisterora.rac01.viproot@rac01#crs_unregisterora.rac02.viproot@rac01#crs_unregisterora.rac02.onsroot@rac01#crs_unregisterora.rac02.gsdroot@rac01#crs_stat-tCRS-0202:Noresourcesareregistered.2.创建虚拟IP资源:root@rac01#crs_profile-createhavip-tapplication-a/oracle/crs/bin/usrvip\-ooi=e1000g0,ov=10.198.94.139,on=255.255.248.0root@rac01#crs_registerhaviproot@rac01#crs_setpermhavip-orootroot@rac01#crs_setpermhavip-uuser:oracle:r-xroot@rac01#crs_stat-t-vNameTypeR/RAF/FTTargetStateHost----------------------------------------------------------------------ha_vipapplication0/10/0OFFLINEOFFLINEroot@rac01#crs_starthaviproot@rac01#crs_stat-t-vNameTypeR/RAF/FTTargetStateHost----------------------------------------------------------------------havipapplication0/10/0ONLINEONLINErac013.准备控制其他资源启动、关闭、检查的脚本文件dg.sh/fs.sh/db.sh/lsnr.sh这四个脚本文件内容参考“五-3/4/5/6”部分对crs_profile命令中的选项和参数做简单说明:(1)选项-r定义了该资源所依赖的资源,在下面的例子中,资源oradata_mount启动时依赖于disk_group先启动,需要停止disk_group的时候必须先停止资源oradata_mount,资源orcl_db的启动则同时依赖于oradata_mount/disk_group/havip/listener;(2)参数-o包括:ci的意思是crs对资源状态的监测间隔(checkinterval),单位为秒;ra:crs重启资源的尝试次数,RESTART_ATTEMPTS,次数到达以后将重新分配;fi:资源状态出现错误以后,crs的尝试间隔,FAILURE_INTERVAL,单位是秒;ft:资源状态出现错误以后,crs的尝试次数,FAILURE_THRESHOLD;这些参数可以使用默认值,分别是60秒/1/0秒/0。(3)参数-a是指ACTION_SCRIPT,参数值为资源启动、关闭、监测的脚本,脚本固定的三个参数为start/stop/check;管理数据库监听的部分:修改$ORACLE_HOME/network/admin/listener.ora文件,将其中(HOST=rac01)部分修改成(HOST=10.198.94.139)(虚拟IP地址)crs_profile-createlistener-tapplication-a/oracle/crs/crs/public/lsnr.sh-rhavip-o\ci=180,ra=6,ft=2,fi=12crs_registerlistenercrs_setpermlistener-orootcrs_setpermlistener-uuser:oracle:r-xcrs_startlistener管理磁盘组和逻辑卷的部分:crs_profile-createdisk_group-tapplication-a/oracle/crs/crs/public/dg.sh-rhavip-o\ci=180,ra=6,ft=2,fi=12crs_registerdisk_groupcrs_setpermdisk_group-orootcrs_setpermdisk_group-uuser:oracle:r-x注:本身磁盘组的启动并不依赖于虚拟IP的启动,这里之所以设置两者的依赖关系,是为了防止虚拟IP在一个节点启动,而磁盘组在另外一个节点启动,造成资源不一致的情况出现。管理文件系统的部分:crs_profile-createoradata_mount-tapplication-a/oracle/crs/crs/public/fs.sh-rdisk_group-o\ci=180,ra=6,ft=2,fi=12crs_registeroradata_mountcrs_setpermoradata_mount-orootcrs_setpermoradata_mount-uuser:oracle:r-x管理数据库实例的部分:crs_profile-createorcl_db-tapplication-a/oracle/crs/crs/public/db.sh-r\oradata_mountlistener-oci=180,ra=6,ft=2,fi=12crs_registerorcl_dbcrs_setpermorcl_db-orootcrs_setpermorcl_db-uuser:oracle:r-xcrs_startorcl_db4.确保脚本具有执行属性,并把public和profile的内容拷到第二个节点上。#chmod+x/oracle/crs/crs/public/*#rcp-r-p/oracle/crs/crs/public/*rac02:/oracle/crs/crs/public/5.启动所有的资源下面可以看到,在crs启动和关闭资源的过程中,其顺序是按照前面定义的资源依赖关系进行的:root@rac01#crs_stop-allAttemptingtostop`orcl_db`onmember`rac01`Stopof`orcl_db`onmember`rac01`succeeded.Attemptingtostop`oradata_mount`onmember`rac01`Stopof`oradata_mount`onmember`rac01`succeeded.Attemptingtostop`