有关RAC的一些概念性和原理性的知识,请参考我的blog:
http://blog.csdn.net/tianlesoftware/archive/2010/02/27/5331067.aspx
这次实验是OCFS2+ASM来实现的,至于裸设备平台的搭建,以后在整理。在生产环境中还是raw+ASM比较多。
实验平台:Oracle10gR2RAC+RHEL4.0+VMWareGSX3.2.0
安装步骤:
1.安装前准备及OS安装配置
2.安装Oracle10gR2clusterware
3.安装Oracle10gR2database
4.配置netca
5.创建ASM实例
6.配置dbca创建数据库
7.检查RAC状态
8.RAC卸载
一.安装前准备及OS安装配置
HostOS准备
1.从OracleOTN下载oracle10gR2forx86linux,下2个zip,一个是clusterwarezip,一个是databasezip,compCD可选.
2.准备的RHEL5(x86)
3.搞清楚你的linux的kernelversion
4.从OracleOTN下载ocfs2,ocfs2tools,ocfs2console,ASMLib,ASMLibsupport,记住这些都是针对你的kernel的,不要下错
http://oss.oracle.com/projects/ocfs2/source.html
http://oss.oracle.com/projects/ocfs2/files/
http://oss.oracle.com/projects/ocfs2-tools/files/
注意,ocfs2tools和ocfs2console在一个页面下载。
http://www.oracle.com/technology/tech/linux/asmlib/index.html
该页面有下载地址,注意选择CPU类型。里面有asmlib和support。在同一个页面。
5.VMWareGSX3.2.0forlinux
虚拟机Workstation,GSXServer和ESX之间的区别
http://blog.csdn.net/tianlesoftware/archive/2010/02/22/5316767.aspx
OS安装
1.在vmwareconsole中创建redhat4实例,取名rac1.内存600M,硬盘12GB。
2.创建好后vmwareOS之后,加上一块NIC网卡
3.在gsx里用vdiskmanager创建ShareDisk。
ocfs2forOCRandvotingdisk,ASMforOracleDATA.
Dos下进入vmware的安装目录,运行一下命令
vmware-vdiskmanager创建pre-allocated并且是lsicontoller的硬盘1GB一个forocfs2forOCR+CRSvoting
vmware-vdiskmanager.exe-c-s500Mb-alsilogic-t2E:/VM/RACShare/ocfs2_ocr_crs.vmdk
vmware-vdiskmanager创建pre-allocated并且是lsicontoller的硬盘forOracledata&flashrecoveryarea
vmware-vdiskmanager.exe-c-s4096Mb-alsilogic-t2E:/VM/RACShare/asm_data.vmdk
vmware-vdiskmanager.exe-c-s2048Mb-alsilogic-t2E:/VM/RACShare/asm_recovery.vmdk
做好后,share目录就会产生你刚才创建的这些vmdk了.
4.到rac1的目录,打开rac1.vmx,在最后空白处添加这几段内容(一定要最后)
scsi1.present="TRUE"
scsi1.virtualDev="lsilogic"
scsi1.sharedBus="virtual"
这段是打开scsi1上的使用,并且设置成virtual,controller设置成lsilogic
然后依次添加
scsi1:1.present="TRUE"
scsi1:1.mode="independent-persistent"
scsi1:1.filename="E:/VM/RACShare/ocfs2_ocr_crs.vmdk"
scsi1:1.deviceType="plainDisk"
scsi1:2.present="TRUE"
scsi1:2.mode="independent-persistent"
scsi1:2.filename="E:/VM/RACShare/asm_data.vmdk"
scsi1:2.deviceType="plainDisk"
scsi1:3.present="TRUE"
scsi1:3.mode="independent-persistent"
scsi1:3.filename="E:/VM/RACShare/asm_recovery.vmdk"
scsi1:3.deviceType="plainDisk"
最后添加这个
disk.locking="false"
diskLib.dataCacheMaxSize="0"
diskLib.dataCacheMaxReadAheadSize="0"
diskLib.DataCacheMinReadAheadSize="0"
diskLib.dataCachePageSize="4096"
diskLib.maxUnsyncedWrites="0"
这段是对vmware使用共享硬盘的方式进行定义
保存退出之后,重新打开你的vmware-console,你就可以看到2个vmwareguestOS的配置中,都有这些硬盘出现了.
5.然后就安装你的vmwareOS,安装的时候,为了方便,把包全部装上,省得以后麻烦。
将rac1结点复制到rac2,在虚拟机中用新ID打开,修改IP地址,hostname,节点2创建完成。采用复制就省的安装2次系统,比较方便。
6.配置你的2个网卡的固定IP,hostname,DNS,gateway,timeserver(NTP)
/etc/sysconfig/network-script/ifcfg-eth0
/etc/sysconfig/network-script/ifcfg-eth1
修改机器名,IP和网关--默认网关必须设置,不然vipca报错
[root@rac1~]#vi/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.85.10.119
NETMASK=255.255.255.0
GATEWAY=10.85.10.253
修改主机名
vi/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rac1
修改完之后重启生效:
/etc/rc.d/init.d/networkrestart重新启动
查看DNS:
cat/etc/resolv.conf
同步时间:
1.在rac1上用root用户执行
#chkconfigtimeon#在系统引导的时候自动启动
2.在rac2上添加任务,每一分钟和rac1进行一次时间同步。
[root@rac2~]#crontab-l
*/1****rdate-s10.85.10.119
rac对节点间时间较敏感,如果不同步在安装clusterware时后会报错,而且在安装vipca的时候也会报错。具体时间同步参考我的blog:
Linux时间同步配置
http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5315587.aspx
linux下修改日期和时间
http://blog.csdn.net/tianlesoftware/archive/2009/11/13/4808096.aspx
7.安装结束后,进入OS,修改解析文件:/etc/hosts
如下
注:机器名和public名要一样
127.0.0.1localhost(必须要这样)
10.85.10.119rac1
10.85.10.121rac2
192.168.1.119rac1-priv
192.168.1.121rac2-priv
10.85.10.122rac1-vip
10.85.10.123rac2-vip
两个node都要一样.
修改后要确认这个hosts都正确(ping)
8.建立用户等效性
建立等效用户之后,2个结点直接Oracle用户互相访问就不在需要密码了,这样就为RAC管理提供了可能性,如果等效性没有配好,RAC肯定是装不起来的。
groupadddbaoinstall组在两个node上,创建oracle用户,主组oinstall,附加组是dba和disk
#groupaddoinstall
#groupadddba
#useradd-goinstall-Gdbaoracle
#passwdoracle
建立等效用户
在rac1:
[root@rac1opt]#su-oracle
[oracle@rac1~]$mkdir~/.ssh
[oracle@rac1~]$chmod700~/.ssh
[oracle@rac1~]$ssh-keygen-trsa
[oracle@rac1~]$ssh-keygen-tdsa
在rac2:
[root@rac2opt]#su-oracle
[oracle@rac2~]$mkdir~/.ssh
[oracle@rac2~]$chmod700~/.ssh
[oracle@rac2~]$ssh-keygen-trsa
[oracle@rac2~]$ssh-keygen-tdsa
切换回rac1,接着执行:
[oracle@rac1~]$cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
[oracle@rac1~]$cat~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys
提示:下列命令会提示你输入rac2的oracle密码,按照提示输入即可,如果失败可重新尝试执行命
令。
[oracle@rac1~]$scp~/.ssh/authorized_keysrac2:~/.ssh/authorized_keys
[oracle@rac1~]$sshrac2cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
[oracle@rac1~]$sshrac2cat~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys
[oracle@rac2~]$scp~/.ssh/authorized_keysrac1:~/.ssh/authorized_keys
确保2个node都有相互的结点信息。
两机相互执行,看看是否还需要输入密码
[oracle@rac1~]$sshrac1date
[oracle@rac1~]$sshrac2date
[oracle@rac1~]$sshrac1-privdate
[oracle@rac1~]$sshrac2-privdate
切换至rac2执行
[oracle@rac2~]$sshrac1date
[oracle@rac2~]$sshrac2date
[oracle@rac2~]$sshrac1-privdate
[oracle@rac2~]$sshrac2-privdate
9.在每个结点上创建目录
[root@rac2~]#mkdir-p/u01/app/oracle
[root@rac2~]#chown-Roracle:oinstall/u01
[root@rac2~]#chmod-R777/u01
这个目录给oracle和clusterware系统的
[root@rac2~]#mkdir-p/u02/oradata/orcl
[root@rac2~]#chown-Roracle:oinstall/u02
[root@rac2~]#chmod-R777/u02
这个目录给ocfs2用来装OCR,CRSvoting的
10.修改你的/etc/sysctl.conf,添加这些kernel参数
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
kernel.shmall=78643200
kernel.shmmax=314572800
kernel.shmmni=4096
kernel.sem=25032000100128
fs.file-max=65536
net.ipv4.ip_local_port_range=102465000
#sysctl-p立刻生效
kernel.shmall为物理内存除以pagesize;
kernel.shmmax为物理内存的一半;
fs.file-max为512乘以processes(如128个process则为65536);
net.ipv4.ip_local_port_range/net.core.rmem_default/net.core.rmem_max三个参数设置和官方文档不一样,这是根据metalink343431.1最新要求更改的;
net.ipv4.tcp_rmem/net.ipv4.tcp_wmem两个参数一般情况下无需设置,除非是在Dataguard/Streams等需很多网络传输情况下;
其它参数根据官方文档要求设置即可.
具体内容参考我的blog:
Linux内核参数及Oracle相关参数调整
http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4668741.aspx
11.设置用户资源限制
因为所有的进程都是以Oracle身份来运行的,因此需要定义Oracle用户能够使用的系统资源数量。
vi/etc/sysconfig/limits.conf
--使用HugePage内存技术,添加下面2行
Oraclesoftmemlock5242880
Oraclehardmemlock524280
--进程句柄数量
oraclesoftnproc2047
oraclehardnproc16384
--文件句柄
oraclesoftnofile65536
oraclehardnofile65536
将下面一行添加到/etc/pam.d/login文件中:
sessionrequired/lib/security/pam_limits.so
12.配置hangcheck-timer模块
Hangcheck-timer是Linux提供的一个内核级的IO-Fencing模块,这个模块会监控Linux内核运行状态,如果长时间挂起,这个模块会自动重启系统。这个模块在Linux内核空间运行,不会受系统负载的影响。这个模块会使用CPU的TimeStampCounter(TSC)寄存器,这个寄存器的值会在每个时钟周期自动增加,因此使用的是硬件时间,所以精度更高。
配置这个模块需要2个参数:hangcheck_tick和hangcheck_margin。
hangcheck_tick用于定义多长时间检查一次,缺省值是30秒。有可能内核本身很忙,导致这个检查被推迟,该模块还允许定义一个延迟上限,就是hangcheck_margin,它的缺省值是180秒。
Hangcheck-timer模块会根据hangcheck_tick的设置,定时检查内核。只要2次检查的时间间隔小于hangcheck_tick+hangchec_margin,都会认为内核运行正常,否则就意味着运行异常,这个模块会自动重启系统。
CRS本身还有一个MissCount参数,可以通过crsctlgetcssmiscount命令查看。
当RAC结点间的心跳信息丢失时,Clusterware必须确保在进行重构时,故障结点确实是Dead状态,否则结点仅是临时负载过高导致心跳丢失,然后其他结点开始重构,但是结点没有重启,这样会损坏数据库。因此MissCount必须大于hangcheck_tick+hangcheck_margin的和。
12.1查看模块位置:
[root@rac1~]#find/lib/modules-name"hangcheck-timer.ko"
/lib/modules/2.6.9-78.EL/kernel/drivers/char/hangcheck-timer.ko
/lib/modules/2.6.9-78.ELsmp/kernel/drivers/char/hangcheck-timer.ko
12.2配置系统启动时自动加载模块,在/etc/rc.d/rc.local中添加如下内容
[root@rac1~]#modprobehangcheck-timer
[root@rac1~]#vi/etc/rc.d/rc.local
modprobehangcheck-timer
12.3配置hangcheck-timer参数,在/etc/modprobe.conf中添加如下内容:
[root@rac1~]#vi/etc/modprobe.conf
optionshangcheck-timerhangcheck_tick=30hangcheck_margin=180
12.4确认模块加载成功:
[root@rac1~]#grepHangcheck/var/log/messages|tail-2
Feb2322:08:44rac1kernel:Hangcheck:startinghangchecktimer0.9.0(tickis30seconds,marginis180seconds).
13.安装ocfs2,ocfs2的console的rpm,
#rpm-ivh*.rpm
linux挂在windows共享的盘
1.启动nfs服务:servicenfsstart
2.mount-ousername=share,password=share//10.85.10.80/RAC/mnt
14.在每个node上这样操作
/etc/init.d/o2cbenable
然后编辑/etc/init.d/o2cb,删除掉靠近配置开头的那些带#的配置行
进入X,然后运行ocfs2console,把你的2个node都添加进去
添加后会生成/etc/ocfs2/cluster.conf文件
若不能apply,把/etc/ocfs2/cluster.Conf文件删了在运行即可。
node:
ip_port=7777
ip_address=10.85.10.119
number=0
name=rac1----注意:name是机器名
cluster=ocfs2
node:
ip_port=7777
ip_address=10.85.10.121
number=1
name=rac2
cluster=ocfs2
cluster:
node_count=2
name=ocfs2
15.先格式化分区fdisk/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde,/dev/sdf.
在一个结点执行格式化就可以了,因为他们是共享的。
[root@rac1init.d]#fdisk/dev/sdc
DevicecontainsneitheravalidDOSpartitiontable,norSun,SGIorOSFdisklabel
BuildinganewDOSdisklabel.Changeswillremaininmemoryonly,
untilyoudecidetowritethem.Afterthat,ofcourse,theprevious
contentwon'tberecoverable.
Warning:invalidflag0x0000ofpartitiontable4willbecorrectedbyw(rite)
Command(mforhelp):n
Commandaction
eextended
pprimarypartition(1-4)
p
Partitionnumber(1-4):1
Firstcylinder(1-130,default1):
Usingdefaultvalue1
Lastcylinderor+sizeor+sizeMor+sizeK(1-130,default130):
Usingdefaultvalue130
Command(mforhelp):w
Thepartitiontablehasbeenaltered!
Callingioctl()tore-readpartitiontable.
Syncingdisks.
在用fdisk-l就会看到新的分区sdb1,sdc1,sdd1,sde1,sdf1
格式化分区:
在一个node上mkfs.ocfs2-b4k-C32k-Loradatafiles/dev/sdb1(就是前面创建的第一个vmdk)
16.在每个node上
mount-tocfs2-odatavolume/dev/sdb1/u02/oradata/orcl
若在第二个结点挂不上,把系统重启一下就可以了
在挂载之前,/etc/init.d/o2cbstatus显示为CheckingO2CBheartbeat:Notactive。
在格式化和挂载文件系统之前,应验证O2CB在两个节点上均联机;O2CB心跳当前没有
活动,因为文件系统还没有挂载。挂载之后就会变成active。
问题1:若出现这样的错误,注意检查下防火墙是否关闭,关闭防火墙在看看。
o2net_connect_expired:1664ERROR:noconnectionestablishedwithnode0after30.0seconds,givingupandreturningerrors.
关闭防火墙命令:
1)永久性生效,重启后不会复原
开启:chkconfigiptableson
关闭:chkconfigiptablesoff
2)即时生效,重启后复原
开启:serviceiptablesstart
关闭:serviceiptablesstop
参考:BuildYourOwnOracleRAC10gRelease2ClusteronLinuxandFireWire
http://blog.csdn.net/tianlesoftware/archive/2009/11/13/4805700.aspx
修改参数,让ocfs2在系统启动时自动挂共享盘
ConfigureOCFStoMountAutomaticallyatStartup
修改你的/etc/fstab,添加类似这样的行
/dev/sdb1/u02/oradata/orclocfs2_netdev,datavolume00
到这里,我们的ocfs2forOCR,CRSvoting就OK了
RACOcfs2文件系统常见问题解决方法
http://blog.csdn.net/tianlesoftware/archive/2009/11/13/4805727.aspx
17.修改/etc/sysconfig/o2cb
把threshhold的值设置成600
[隔离时间(秒)]=(O2CB_HEARTBEAT_THRESHOLD-1)*2
(301-1)*2=600秒
为什么设成600,如果时间过短,会造成ocfs不能正常挂载。
具体参考我的blog:
解决OCFS2不能自动挂载提示o2net_connect_expired
http://blog.csdn.net/tianlesoftware/archive/2009/11/14/4806813.aspx
18.在每个node上安装ASMLibs,tools,support三个rpm文件
#rpm-ivh*.rpm--nodeps--force
然后运行/etc/init.d/oracleasmconfigure
回答oracle,dba,y,y就可以了
19.创建ASM
在一个node上:
通过以root用户身份运行以下命令来标记由ASMLib使用的磁盘:/etc/init.d/oracleasmcreatediskDISK_NAMEdevice_name
(提示:DISK_NAME应由大写字母组成。当前版本有一个错误,即假如使用小写字母,ASM实例将无法识别磁盘。)
记住,ASM在linux下面处理的对象是partition,不是disk,所以你那些vmdk要linux下面partition好才能用,所以先fdisk一下在创建.
/etc/init.d/oracleasmcreatediskVOL3/dev/sdc1
/etc/init.d/oracleasmcreatediskVOL2/dev/sdd1
创建好后,在这个node上运行/etc/init.d/oracleasmlistdisks查看
20.在另外一个node上
/etc/init.d/oracleasmscandisks
/etc/init.d/oracleasmlistdisks查看
21.在每个node上
Su-oracle
Cd/home/oracle
修改oracle用户家目录下的.bash_profile
注意ORACLE_SID,和后面建库要一致。
#.bash_profile
#Getthealiasesandfunctions
if[-f~/.bashrc];then
.~/.bashrc
fi
#Userspecificenvironmentandstartupprograms
PATH=$PATH:$HOME/bin
exportORACLE_BASE=/u01/app/oracle
exportORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
exportORA_CRS_HOME=$ORACLE_BASE/product/crs
exportORACLE_SID=rac1
exportPATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
exportPATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
exportPATH=${PATH}:$ORACLE_BASE/common/oracle/bin
exportORACLE_TERM=xterm
exportTNS_ADMIN=$ORACLE_HOME/network/admin
exportORA_NLS10=$ORACLE_HOME/nls/data
exportLD_LIBRARY_PATH=$ORACLE_HOME/lib
exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
exportCLASSPATH=$ORACLE_HOME/JRE
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
exportTHREADS_FLAG=native
exportTEMP=/tmp
exportTMPDIR=/tmp
第二个节点的ORACLE_SID=rac2其他都一样
二.安装Oracle10gR2clusterware
1.用Xmanager软件连上虚拟机之后运行clusterware的安装软件,Xmanager支持图形界面,所以能省很多事。
注:若出现这样:libXp.so.6:cannotopensharedobjectfile错误,安装下libXp包就可以了
2.确认你的安装目录是/u01/app/oracle/product/crs
3.增加相关结点信息
rac1rac1-privrac1-vip
rac2rac2-privrac2-vip
4.指定eth0的类型时public
5.指定OCR和VotingDisk
一般而言,如果采用存储来存放OCR和VotingDisk.存储本身就提供了redundancy策略,此时我们可以选择ExternalRedundancy选项,此时Oracle就不在考虑软件冗余了。如果没有使用存储设备或者存储为RAID0,那么就可以使用Oracle自己提供的软件冗余机制NormalRedundancy选项,此时就会激活MirrorLocation选项.用来指定镜像文件位置,Oracle的Clusterware在运行时会维护这个Mirror文件的内容同步。
OCR最多只有一份冗余:
/u02/oradata/orcl/OCRFile
/u02/oradata/orcl/OCRFile_mirror
VotingDisk最多可以定义2份冗余:
/u02/oradata/orcl/VotingFile
/u02/oradata/orcl/VotingFile_mirror1
/u02/oradata/orcl/VotingFile_mirror2
7.然后就开始安装了,结束时会提示用root在每个节点上运行orainstRoot.Sh和root.Sh脚本,在第二个结点上运行root.Sh后自动调用vipca这个命令,在第二个结点运行root.Sh之前要修改一下vipca命令,不然可能会报错。
RAC安装时需要执行4个脚本及意义
http://blog.csdn.net/tianlesoftware/archive/2010/02/22/5317034.aspx
注意:VIPCA命令也是用ROOT用户来运行的,只需要在一个结点运行就可以了。
进入$CRS_HOME/bin/目录,用vi来修改vipca和srvctl2个命令。
问题1:vipca报错,是redhat的bug
Runningvipca(silent)forconfiguringnodeapps
/home/oracle/crs/oracle/product/10/crs/jdk/jre//bin/java:errorwhileloading
sharedlibraries:libpthread.so.0:cannotopensharedobjectfile:
Nosuchfileordirectory
解决方法:
Remembertore-editthesefilesonallnodes:
<CRS_HOME>/bin/vipca
<CRS_HOME>/bin/srvctl
<RDBMS_HOME>/bin/srvctl
<ASM_HOME>/bin/srvctl
afterapplyingthe10.2.0.2or10.2.0.3patchsets,asthesepatchsetwillstillincludethosesettingsunnecessaryforOEL5orRHEL5orSLES10.Thisissuewasraisedwithdevelopmentandisfixedinthe10.2.0.4patchsets.
NotethatweareexplicitlyunsettingLD_ASSUME_KERNELandnotmerelycommentingoutitssettingtohandleacasewheretheuserhasitsetintheirenvironment(loginshell).
$vivipca
......
Linux)LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:$ORACLE_HOME/srvm/lib:$LD_LIBRARY_PATH
exportLD_LIBRARY_PATH
echo$LD_LIBRARY_PATH
echo$CLASSPATH
#Removethisworkaroundwhenthebug3937317isfixed
arch=`uname-m`
if["$arch"="i686"-o"$arch"="ia64"]
then
#LD_ASSUME_KERNEL=2.4.19
#exportLD_ASSUME_KERNEL
echo
fi
#Endworkaround
问题2:如果遇到这个错误:
#vipca
Error0(Native:listNetInterfaces:[3])
[Error0(Native:listNetInterfaces:[3])]
解决方法:
在CRS_HOME下运行oifcfg命令:
在rac1:
#./oifcfgsetif-globaleth0/10.85.10.119:public
#./oifcfgsetif-globaleth1/192.168.1.119:cluster_interconnect
#./oifcfggetif
eth010.85.10.119globalpublic
eth1192.168.1.119globalcluster_interconnect
在rac2:
/bin#./oifcfgsetif-globaleth0/10.85.10.121:public
/bin#./oifcfgsetif-globaleth1/192.168.1.121:cluster_interconnect
/bin#./oifcfggetif
eth010.85.10.121globalpublic
eth1192.168.1.121globalcluster_interconnect
然后在手工运行vipca添加nodeappsresource即可。
问题3:AnunexpectedexceptionhasbeendetectedinnativecodeoutsidetheVM.
UnexpectedSignal:11occurredatPC=0xB7503E29
Function=__libc_free+0x49
Library=/lib/tls/libc.so.6
修改主机名不正确导致的。
RHEL
/etc/sysconfig/network主机名,如果在/etc/hosts中解析不了。就报这个错误!
8.clusterware就安装好了.
确认一下.
$/u01/app/oracle/product/crs/bin/olsnodes-n
rac1pub1
rac2pub2
$ls-l/etc/init.d/init.*
-r-xr-xr-x1rootroot1951Oct414:21/etc/init.d/init.crs*
-r-xr-xr-x1rootroot4714Oct414:21/etc/init.d/init.crsd*
-r-xr-xr-x1rootroot35394Oct414:21/etc/init.d/init.cssd*
-r-xr-xr-x1rootroot3190Oct414:21/etc/init.d/init.evmd*
检查CRS安装启动情况:用Root用户执行:
$CRS_HOME/bin/crsctlcheckcrs
CSSappearshealthy
CRSappearshealthy
EVMappearshealthy
表明CRS安装完成,并且启动成功
#./crs_stat-t-v
注:如果clusterware安装失败,再次运行安装程序,里面可以把之前的安装删除掉,删除之后在进行安装。
三.安装Oracle10gR2database
1.检查Oracle的相关包。Oracle10g需要如下包
binutils-2.15.92.0.2-10.EL4
compat-db-4.1.25-9
control-center-2.8.0-12
gcc-3.4.3-9.EL4
gcc-c++-3.4.3-9.EL4
glibc-2.3.4-2
glibc-common-2.3.4-2
gnome-libs-1.4.1.2.90-44.1
libstdc++-3.4.3-9.EL4
libstdc++-devel-3.4.3-9.EL4
make-3.80-5
pdksh-5.2.14-30
sysstat-5.0.5-1
xscreensaver-4.18-5.rhel4.2
libaio-0.3.96
Toseewhichversionsofthesepackagesareinstalledonyoursystem,runthefollowingcommand:
rpm-qbinutilscompat-dbcontrol-centergccgcc-c++glibcglibc-common/
gnome-libslibstdc++libstdc++-develmakepdkshsysstatxscreensaverlibaioopenmotif21
2.在Xmanager中用oracle用户,运行database的runInstaller
3.ORACLE安装目录指定到/u01/app/oracle/product/10.2.0/db_1
4.把2个node选择上
5.选择InstalldatabaseSoftwareonly
6.会要求你用完全的root权限运行root.sh,分别在2个node上一一运行
7.安装完毕
四.netca创建监听
注:创建数据库过程应该遵循这个顺序:先配置监听,再配置ASM实例,最后创建数据库实例,这样可以减少出错的概率。
1.oracle用户在一个node上运行netca
2.选择所有node
3.选择Listenerconfiguration
4.添加一个LISTEN,1521port
然后结束配置
监听配置成功后,2个结点上的Listener都会坐位ApplicationResource注册到CRS中,这样CRS就可以监控Listener的运行状态。我们可以通过crs_stat-t-v查看Listener状态。
五.创建ASM实例
1.运行DBCA命令
2.选择configureAutomaticStorageManagement,来创建ASM实例
3.选择所有结点
4.输入密码和参数文件位置
如:/u02/oradata/orcl/dbs/spfile+ASM.ora
5.修改asm参数:asm_diskstring=ORCL:VOL*,这样能让Oracle自动发现这些硬盘
6.ASM实例创建完后,用CreateNew来创建ASM磁盘组。我们用VOL1来创建一个DATA组,VOL2创建FLASH_RECOVERY_AREA组。
注:Redundancy一般选external就是也就是不考虑冗余,假如选normal则是mirror,至少要一个FailGroup选High就是triplemirror,3倍镜像,需要三个FailGroup
7.创建完成后,能看到组的状态是Mount,ASM组必须mount之后才能使用。
ASM的相关信息参考blog:
OracleASM详解
http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5314541.aspx
六.配置dbca创建数据库
1.用oracle用户运行dbca
2.选择customdatabase
3.输入数据库的全局名,比如rac
4.输入系统的角色建立密码
5.选择ASM来存储,分别选择我们刚创建的DATA和FLASH_RECOVERY_AREA组
6.DatabaseServices这里,你选择Add你一个新的service,随便叫名字,比如oltp
然后选择TAFPolicy,是Basic。这个服务在RAC的Failover中会用到,如果在这里没有配置,也可以通过dbca命令,选择ServicesManagement来进行配置。具体参考Blog:
Oracle RAC Failover 详解
http://blog.csdn.net/tianlesoftware/archive/2010/03/03/5340788.aspx
7.开始创建数据库
七.检查RAC运行状态
1.用oracle用户login,运行
[oracle@rac1bin]$./srvctlstatusdatabase-drac
Instancerac1isrunningonnoderac1
Instancerac2isrunningonnoderac2
2.$srvctlstatusservice-drac-srac
Serviceorcltestisrunningoninstance(s)orcl2,orcl1
3.[oracle@rac1bin]$./srvctlstatusnodeapps-nrac1
VIPisrunningonnode:rac1
GSDisrunningonnode:rac1
Listenerisrunningonnode:rac1
ONSdaemonisrunningonnode:rac1
4.[oracle@rac1bin]$./srvctlstatusasm-nrac1
ASMinstance+ASM1isrunningonnoderac1.
5.[root@rac2bin]#./crs_stat-t
NameTypeTargetStateHost
------------------------------------------------------------
ora.rac.dbapplicationONLINEONLINErac1
ora....orcl.csapplicationONLINEONLINErac1
ora....ac1.srvapplicationONLINEONLINErac1
ora....ac2.srvapplicationONLINEONLINErac2
ora....c1.instapplicationONLINEONLINErac1
ora....c2.instapplicationONLINEONLINErac2
ora....SM1.asmapplicationONLINEONLINErac1
ora....C1.lsnrapplicationONLINEONLINErac1
ora.rac1.gsdapplicationONLINEONLINErac1
ora.rac1.onsapplicationONLINEONLINErac1
ora.rac1.vipapplicationONLINEONLINErac1
ora....SM2.asmapplicationONLINEONLINErac2
ora....C2.lsnrapplicationONLINEONLINErac2
ora.rac2.gsdapplicationONLINEONLINErac2
ora.rac2.onsapplicationONLINEONLINErac2
ora.rac2.vipapplicationONLINEONLINErac2
6.运行sqlplus/nolog
SQL>connect/assysdba
SQL>SELECTinst_id,instance_numberinst_no,instance_nameinst_name
,parallel,status,database_statusdb_status,active_statestate
,host_namehostFROMgv$instanceORDERBYinst_id;
INST_IDINST_NOINST_NAMEPARSTATUSDB_STATUSSTATEHOST
----------------------------------------------------------
11rac1YESOPENACTIVENORMALrac1
22rac2YESOPENACTIVENORMALrac2
7.客户端Failover测试
7.1修改C:/windows/system32/drivers/etc/hosts文件,添加如下内容
10.85.10.119rac1
10.85.10.121rac2
10.85.10.122rac1-vip
10.85.10.123rac2-vip
7.2修改tnsnames.Ora文件,增加一下内容:
RAC=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))
(LOAD_BALANCE=YES)
(
CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=RAC)
(
FAILOVER_MODE=
(TYPE=session)
(METHOD=basic)
(RETRIES=180)
(DELAY=5)
)
)
)
)
7.3客户端用sqlplus连接数据库
C:/DocumentsandSettings/Administrator>sqlplussystem/admin@rac
SQL*Plus:Release10.2.0.1.0-Productionon星期六2月2702:06:402010
Copyright(c)1982,2005,Oracle.Allrightsreserved.
连接到:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,RealApplicationClusters,OLAPandDataMiningoptions
SQL>selectinstance_namefromV$instance;
INSTANCE_NAME
--------------------------------
rac2
7.4关闭rac2数据库
[oracle@rac2~]$exportORACLE_SID=rac2
[oracle@rac2~]$sqlplus/assysdba
SQL*Plus:Release10.2.0.1.0-ProductiononSatFeb2702:58:482010
Copyright(c)1982,2005,Oracle.Allrightsreserved.
Connectedto:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,RealApplicationClusters,OLAPandDataMiningoptions
SQL>selectinstance_namefromv$instance;
INSTANCE_NAME
----------------
rac2
SQL>shutdownimmediate
Databaseclosed.
Databasedismounted.
ORACLEinstanceshutdown.
7.5在客户段再次查询,自动切换到了rac1
SQL>selectinstance_namefromV$instance;
INSTANCE_NAME
--------------------------------
rac1
八.RAC的卸载
卸载分为几个部分:database的卸载和clusterware(10.2版本说法)的卸载(10.1版本称为CRS:clusterreadyservice)。
oracledatabase的卸载可以利用很多方法-粗野的和温柔的,我这里利用dbca去卸载即可。
database的卸载会把所有节点的instance删除掉,并把唯一的database删除。
卸载database的第二步骤是把所有节点的listener卸载,可以利用netca卸载即可。
最后卸载clusterware,可以用Clusterware的安装程序来卸载,也可以利用脚本进行:
$ORA_CRS_HOME/install/rootdelete.sh-help
对本地节点和远程节点使用不用的命令,详细参考帮助。
[root@rac1install]#./rootdelete.sh--help
Usage:rootdelete[-help][local|remote][nosharedvar|sharedvar][sharedhome|nosharedhome][-downgrade[-version<version>]]
/-help:printthismessage
local:ifthisnodeisthenodewhereOUIistoberuntodeinstall,otherwiseuse'remote'
sharedvar:OCRisonasharedpath,otherwiseuse'nosharedvar'
sharedhome:CRShomeisonasharedpath,otherwuseuse'nosharedhome'
/-downgrade:OracleclusterwareandOCRwillberesetfordowngrade
/-version<version>:OCRlocationfilewillresetfordowngradetospecifiedversion,default:10.1
[root@rac1install]#./rootdelete.shlocalsharedvarsharedhome-downgrade
[root@rac1install]#./rootdelete.shremotesharedvarsharedhome-downgrade
最后在本地节点执行
$ORA_CRS_HOME/install/rootdeinstall.sh
即可。
脚本执行是比较安全的方式,完成之后把相关目录删除即可完成clusterware的卸载。
补充:RAC安装的相关问题解决方法:
问题一:
安装好RAC后,在用DBCA建库时选择ASM做为存储方案时,有时候会报错说ASM是单实例环境,不是RAC环境,这样就无法继续建库下来,出错信息如下:
TheASMinstanceconfiguredonthelocalnodeisasingle-instanceASM.Tocreateasingle-instancedatabaseusingthisASMinstance,restartDBCAandselectthesingle-instancedatabaseoption,tocreateaRACdatabaseusingthisASMinstance,convertittoRACASMfirst.
这个错误一般是发生在重装clusterware和database后,这样无论怎么样重启DBCA运行都会报同样的错。具体的解决办法便是在/etc/oratab里面的关于ASM的记录:+ASM1:/u01/app/oracle/product/10.2.0/db_1:N这么一行删除掉,再接着建库就可以了。
问题二:
创建ASM时报:ORA-12547:TNS:lostcontact
解决方法:
$cd$ORACLE_HOME/rdbms/lib
$make-fins_rdbms.mkioracle
问题三
1.counldnotstartclusterstack.ThismustberesolvedbeforeanyOCFS2filesystemcanbemounted
Thisproblemcanbecausedbydifferentversionofocfs2libandredhatkernel.selinuxisallowedisanotherpossiblereason.
tail-n100/var/log/messages:
May1812:10:27rac1kernel:SELinux:initialized(devconfigfs,typeconfigfs),notconfiguredforlabeling
May1812:10:27rac1kernel:audit(1211083827.759:7):avc:denied{mount}forpid=12346comm="mount"name="/"dev=configfsino=44504scontext=root:system_r:initrc_ttcontext=system_u:object_r:unlabeled_ttclass=filesystem
May1812:10:30rac1dbus:Can'tsendtoauditsystem:USER_AVCpid=2642uid=81loginuid=-1message=avc:denied{send_msg}forscontext=root:system_r:unconfined_ttcontext=user_u:system_r:initrc_ttclass=dbus
May1812:11:05rac1lastmessagerepeated7times
May1812:12:10rac1lastmessagerepeated13times
[root@rac1/]#vi/etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
[root@rac1/]#setenforce0
setenforce:SELinuxisdisabled
问题四
2.Theclusterstackhasbeenstarted.Itneedstoberunningforanyclusteringfunctionalitytohappen.
Pleaserun"/etc/init.d/o2cbenable"tohaveitstarteduponbootup.
o2cb_ctl:UnabletoaccessclusterservicewhilecreatingnodeCouldnotaddnoderac1
[root@rac1init.d]#./o2cbenable
WritingO2CBconfiguration:OK
StartingO2CBclusterocfs2:Failed
Clusterocfs2created
o2cb_ctl:Configurationerrordiscoveredwhilepopulatingclusterocfs2.Noneofitsnodeswereconsideredlocal.
Anodeisconsideredlocalwhenitsnodenameintheconfigurationmatchesthismachine'shostname.
StoppingO2CBclusterocfs2:OK
[root@rac1ocfs2]#pwd
/etc/ocfs2
[root@rac1ocfs2]#ls
cluster.conf
[root@rac1ocfs2]#mvcluster.confcluster.conf.Bak
问题5:在CRS安装时,最后执行root.sh时,后执行的节点上无法成功,提示:
#./root.sh
WARNING:directory'/u01/app/oracle/product/10.2.0'isnotownedbyroot
WARNING:directory'/u01/app/oracle/product'isnotownedbyroot
WARNING:directory'/u01/app/oracle'isnotownedbyroot
WARNING:directory'/u01/app'isnotownedbyroot
WARNING:directory'/u01'isnotownedbyroot
CheckingtoseeifOracleCRSstackisalreadyconfigured
SettingthepermissionsonOCRbackupdirectory
SettingupNSdirectories
FailedtoupgradeOracleClusterRegistryconfiguration
另外有一种提示为:PRIF-10:failedtoinitializetheclusterregistry
解决方法:关闭共享磁盘的锁定属性
SSA或者FASTT系列盘阵关闭磁盘锁定用:/usr/sbin/chdev-lhdiskn-areserve_lock=no
ESS,EMC,HDS,CLARIION系列盘阵关闭磁盘锁定用:/usr/sbin/chdev-lhdiskn-areserve_policy=no_reserve
在虚拟机上就是添加参数.disk.locking="false"