Chinaunix首页 | 论坛 | 博客
  • 博客访问: 548049
  • 博文数量: 159
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1264
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-20 14:15
个人简介

LoveMoney

文章存档

2016年(2)

2015年(8)

2014年(148)

2011年(1)

分类: Oracle

2014-06-04 09:04:37


          
实验针对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.s   这个脚本是用来关闭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

阅读(2505) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

CU博客助理2014-07-11 15:59:56

专家点评:较为详细的记述了在虚拟硬盘中的磁盘顺序不可预测的问题。有比较清晰的解决思路和较为详细的操作步骤。在遇到类似问题时,有一定的参考价值。留有痕迹,坚持下去一定会有很好的进步。(感谢参加原创评选活动,获奖结果即将公布)