此实验针对RHEL 5.4版本Linux系统、Oracle10G RAC和StarWind5软件
在搭建Oracle RAC的时候,我们不可避免的需要使用共享存储,对于大多数没有硬件环境的技术人员,这是件很苦逼的事情,好不容易发现一个不错的虚拟存储软件,在创建多个共享磁盘后,在开机的时候,往往会因为discover发现磁盘这一步骤出错,因为StarWind和Linux本身的关系,不能一一对应所使用的磁盘,从下面的结构可以看出这步的易错性:
StarWind划分了3个disk,1个data disk,1个vote disk,1个ocr disk。分别映射到Linux的sdb,sdc,sdd。
data disk 5GB ---> sdb
ocr disk 2GB ---> sdc
vote disk 1GB ---> sdd
当Linux系统重启后,有可能出现以下的对应关系:
vote disk 1GB ---> sdb
data disk 5GB ---> sdc
ocr disk 2GB ---> sdd
发生这样的情况,是因为iscsi服务是开机启动的,在自启动iscsi服务的时候会自动发现StarWind上的磁盘,并自动且随意分配磁盘号(sdX),因此,我们需要关闭自动启动的iscsi服务,避免oracle rac开机自动启动,虽然实验存在这样的缺陷,无法使得rac开机自动启动,但是这也让我们学会了如何去解决磁盘映射错乱和掌握oracle rac的开机/关机顺序。
接下来我们来看oracle rac是如何启动的:
1.需要共享磁盘
2.需要data、vote、ocr磁盘上的信息正确
3.需要oracleasm磁盘被2个节点正常扫描到
4.需要crs进程被启动
一般crs进程启动后,rac的各项服务:vip gsd 等会自动拉起。
以上4个步骤,我们用几个脚本来手动执行,一来可以理清顺序,二来避免手动敲命令导致的错误,我们将这些脚本编写好放到/etc/iscsi/目录下,以下脚本需要按照顺序依次执行:
==开机后需要执行的脚本==
00discover.sh 这个脚本是用来发现StarWind共享磁盘主机的共享磁盘,节点A执行后,在节点B上执行:
iscsiadm --mode discovery --type sendtargets --portal 192.168.19.106
01svc.sh 这个脚本是用来关闭iscsi的开机自动启动,并且手动启动iscsi服务,节点A执行后,在节点B上执行:
chkconfig iscsi off
chkconfig iscsid off
service iscsi restart
service iscsid restart
02unlogin.sh 在启动iscsi的服务后,会错乱的对应共享磁盘关系,因此需要手动卸载共享磁盘,节点A执行后,在节点B上执行:
iscsiadm -m node --logoutall=all
1sdb.sh 卸载完成所有共享磁盘后,手动指定sdb磁盘为StarWind共享磁盘的data disk,节点A执行后,在节点B上执行:
iscsiadm --mode node --targetname iqn.2008-08.com.starwindsoftware:pc-20131104ytpx-data --portal 192.168.19.106 --login
2sdc.sh 手动指定sdc磁盘为StarWind共享磁盘的ocr disk,节点A执行后,在节点B上执行:
iscsiadm --mode node --targetname iqn.2008-08.com.starwindsoftware:pc-20131104ytpx-ocr --portal 192.168.19.106 --login
3sdd.sh 手动指定sdd磁盘为StarWind共享磁盘的vote disk,节点A执行后,在节点B上执行:
iscsiadm --mode node --targetname iqn.2008-08.com.starwindsoftware:pc-20131104ytpx-voting --portal 192.168.19.106 --login
4vgon.sh 手动激活sdb创建的ocrvg 和 sdd创建的votevg,节点A执行后,在节点B上执行:
vgchange -ay ocrvg
vgchange -ay votevg
5raw.sh 手动设置ovrlv为raw1 和 votelv为raw2,并赋予正确的权限,节点A执行后,在节点B上执行:
raw /dev/raw/raw1 /dev/ocrvg/ocrlv
raw /dev/raw/raw2 /dev/votevg/votelv
sleep 2
chown oracle:oinstall /dev/raw/raw*
sleep 3
chmod 660 /dev/raw/raw*
6scanasm.sh 扫描ASM磁盘,节点A执行后,在节点B上执行:
/etc/init.d/oracleasm scandisks
/etc/init.d/oracleasm listdisks
7startcrs.sh 提示需要root用户启动crs进程,节点A执行后,在节点B上执行:
echo ""
echo " Please use 'root' use execuite ' /etc/init.d/init.crs start ' open crs process in raca an racb!"
echo ""
CRS启动后,需要检查CRS启动状态,crsctl check crs检查crs启动状态,crs_stat -t -v查看RAC服务状态。
如果RAC服务未启动,则执行下面提到的2startcrsapp.sh脚本启动RAC实例等服务。
接下来我们来看oracle rac是如何关闭的:
1.停止RAC的监听
2.停止RAC的数据库实例
3.停止RAC的ASM实例
4.停止RAC的APPS
5.停止RAC的CRS
6.以上停完后,就可以停机了
6-1.去激活vg
6-2.卸载共享磁盘
启动的顺序刚好相反:
0-1.装载共享磁盘
0-2.激活VG
0-3.激活对应raw和分配权限
1.启动CRS
2.启动APPS
3.启动ASM实例
4.启动RAC数据库实例
5.启动RAC监听
==关机需要执行的脚本==
[root@RACB ~]# su - oracle
[oracle@RACB ~]$ cd dbscript/
[oracle@RACB dbscript]$ ll
total 16
-rw-r--r-- 1 oracle oinstall 255 May 3 01:01 1stopcrsapp.ssh.sh
-rw-r--r-- 1 oracle oinstall 216 May 3 00:58 2startcrsapp.sh
-rw-r--r-- 1 oracle oinstall 106 May 3 01:04 2stopcrs.sh
-rw-r--r-- 1 oracle oinstall 178 May 3 01:09 3stopsystem.sh
[oracle@RACB dbscript]$ cat 1stopcrsapp.ssh.sh
#停止RAC的监听
srvctl stop listener -n racb
srvctl stop listener -n raca
#停止RAC的实例
srvctl stop instance -d rac -i rac1
srvctl stop instance -d rac -i rac2
#停止RAC的ASM实例
srvctl stop asm -n racb
srvctl stop asm -n raca
#停止RAC的APPS
srvctl stop nodeapps -n raca
srvctl stop nodeapps -n racb
#执行完以上步骤后输出RAC状态
crs_stat -t -v
[oracle@RACB dbscript]$ cat 2stopcrs.sh
#执行完1stopcrsapp.ssh.sh脚本后,需要root用户停止crs进程,在节点A上执行完后,在节点B上执行:
echo " "
echo " Please use 'root' user execuite /etc/init.d/init.crs stop in raca and racb!"
echo " "
[oracle@RACB dbscript]$ cat 3stopsystem.sh
#执行完2stopcrs.sh脚本后,就可以关机了:
echo ""
echo " Please use init 0 close system to raca and racb !"
echo " And please don't forget open the raca and racb system in /etc/iscsi/ to active vg and raw !"
echo ""
如果不想关机,而是需要启动RAC,可以按照以下步骤进行:
[oracle@RACB dbscript]$ cat 1startcrs.sh
#需要root用户在两个节点启动CRS进程
echo ""
echo " Please use 'root' use execuite /etc/init.d/init.crs start open crs process in raca an racb!"
echo ""
启动好CRS进程后,可以通过执行crsctl check crs检查crs启动状态。
[oracle@RACB dbscript]$ cat 2startcrsapp.sh
#执行完1startcrs.sh脚本后,可以启动RAC相关服务了
#启动RAC APPS
srvctl start nodeapps -n raca
srvctl start nodeapps -n racb
#启动RAC ASM实例
srvctl start asm -n raca
srvctl start asm -n racb
#启动RAC 实例
srvctl start instance -d rac -i rac1
srvctl start instance -d rac -i rac2
#启动RAC 服务
crs_start ora.rac.cxmfyl.cs
#启动RAC 监听
srvctl start listener -d rac -i rac1
srvctl start listener -d rac -i rac2
说明:
crs_start ora.rac.cxmfyl.cs 这个启动后,下面两个srv就会自动启动,若没有启动,可手动启动,如下命令:
crs_start ora.rac.cxmfyl.rac1.srv
crs_start ora.rac.cxmfyl.rac2.srv
查看数据库实例状态:
srvctl status database -d rac
列出rac节点信息:
$srvctl config database -d rac
racb rac1 /oracle/product/10.2.0/db_1
raca rac2 /oracle/product/10.2.0/db_1
阅读(2481) | 评论(1) | 转发(0) |