oracle 10gRAC on OEL5u5 with raw device based on virtualbox

概述

学习oracle rac没有环境是个头疼的问题,接下来的文档教您搭建一个简单的rac环境,以供学习、研究。

[文章中涉及的图片请参考附件的pdf文档中]

oracle10gRAC_OEL5u5_rawdevice_virtualbox

1.环境信息

本文安装涉及的环境参考后续文档,本文档主要涉及在Oracle Enterprise Linux上使用virtualbox搭建oracle 10205 rac环境,此文档仅供测试、学习使用。

1.1.OS信息

操作系统使用的是oracle unbreakable linux 5 update 5 x86_64

 

1.2.oracle介质

oracle10201 64位安装包、10205patch包、clusterware安装包

 

1.3.虚拟机

由于资源所限,共享存储使用oracle自己的虚拟机-oracle VM来实现,版本参考下图:

 

 

后续VBoxManager的相关命令均给予"Version 4.1.18 r78361"

 

1.4.共享存储

此文档中涉及的共享存储使用virtualbox模拟,并使用raw device作为oracle rac中的ocrvoting diskspfiledatafile等等,每个raw作为单独的一个实体,提供给ocrvoting disk等等。

 

2.OS环境的准备

2.1.OS的安装

在虚拟机中安装OEL5U5 x64,如下是选择的基本package

GNOME Desktop Environment

Editors

Graphical Internet

Text-based Internet

Development Libraries

Development Tools

Server Configuration Tools

Administration Tools

Base

System Tools

X Window System

 

Oracle在后续的安装会要求配置很多的系统参数,例如:sysctl.confpam.d等,同时还会要求创建oracle用户、组等,为了免去这些麻烦,最好将oracle-validated这个rpm包给打上,这样会省去很多后续配置参数的麻烦,如下是oracle10205想在oel5u5上安装成功必要的一些包。

多说一句:oracle 10g certificate的平台是OEL4,而不是OEL5,所以后续需要一些配置、以及注意事项才能顺利安装。

 

2.2.rpm

一些需要的rpm包,一些包x86x64的版本都需要,最好安装oracle之前将如下的rpm包搞定:

binutils-2.17.50.0.6-2.el5

compat-libstdc++-296-2.96-138

compat-libstdc++-33-3.2.3-61

elfutils-libelf-0.125-3.el5

elfutils-libelf-devel-0.125

gcc-4.1.1-52

gcc-c++-4.1.1-52

glibc-2.5-12

glibc-common-2.5-12

glibc-devel-2.5-12

glibc-headers-2.5-12

libaio-0.3.106

libaio-devel-0.3.106

libgcc-4.1.1-52

libstdc++-4.1.1

libstdc++-devel-4.1.1-52.e15

libXp-1.0.0-8

make-3.81-1.1

openmotif-2.2.3

sysstat-7.0.0

unixODBC-2.2.11

unixODBC-devel-2.2.11

 

关于rpm包的安装、依赖性问题,建议使用yum来搞定,将Oracle Enterprise Linux安装文件制作成本地的源,让yum来自己解决依赖性问题,会省去很多的事情。

 

2.3.YUM配置

配置本地的yum源需要注意两个地方即可,一个是/etc/yum.repos.d/xxx.repo配置文件,另外一个则是将ISO光盘介质中的文件,都拷贝到本地的一个目录中,例如:/root/source,其中Server目录中含有大量所需的rpm包。

 

[root@node1 yum.repos.d]# pwd

/etc/yum.repos.d

[root@node1 yum.repos.d]# more Server.repo

[Server]

enabled = 1

name = server

baseurl = file:///root/source/Server

gpgcheck = 1

gpgkey = file:///root/source/RPM-GPG-KEY-oracle

 

2.4.虚拟机中网卡的设置

为了能够与外部环境隔离,在没有插网线、或者无线网络环境下仍然能够使用,将每个节点两块网卡均设置成为"Host-Only",如下图:

 

2.5.节点IP设置

每个节点有两块网卡,eth0eth1,其中eth0作为public的网卡,eth1作为两个节点之间通讯、内部连接的private地址。而在eth0上,将在后续配置vipca时自动设置上浮动IP(vip),切勿手工写死vipeth0上(eth0:1的方式设置2ip),否则后续将无法浮动,安装会遇到问题,遭遇到例如:"the virtual hostname(s),vip..you have specified appears to be already assigned to another system on the network.please ensure that the virtual hostname(s) that you use for each of the nodes in the cluster are not in use "的报错。

hosts文件的内容:

#public

192.168.56.105 node1.localdomain node1

192.168.56.106 node2.localdomain node2

#virtual

192.168.56.115 node1-vip.localdomain node1-vip

192.168.56.116 node2-vip.localdomain node2-vip

#private

172.10.0.1 node1-priv.localdomain node1-priv

172.10.0.2 node2-priv.localdomain node2-priv

 

3.共享存储的准备

进入virtualbox的安装目录中,使用VBoxManage工具来创建共享存储所需的disk

3.1.节点1上的磁盘准备

两个ocr,分别给500M的大小。三个voting disk分别给500M大小。

ocr01.vdi  500M

ocr02.vdi  500M

VBoxManage createhd –filename E:vmsharediskocr01.vdi –size 500 –format VDI –variant Fixed

VBoxManage createhd –filename E:vmsharediskocr02.vdi –size 500 –format VDI –variant Fixed

[例子:]

D:softwarevirtualbox>VBoxManage createhd –filename E:vmsharediskocr01.vdi –size 500 –format VDI –variant Fixed

0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%

Disk image created. UUID: b44d4885-31d7-4b53-b9a2-17ec36531c51

voting disk准备

VBoxManage createhd –filename E:vmsharediskvote01.vdi –size 500 –format VDI –variant Fixed

VBoxManage createhd –filename E:vmsharediskvote02.vdi –size 500 –format VDI –variant Fixed

VBoxManage createhd –filename E:vmsharediskvote03.vdi –size 500 –format VDI –variant Fixed

 

control file

VBoxManage createhd –filename E:vmsharediskcontrol01.vdi –size 110 –format VDI –variant Fixed

VBoxManage createhd –filename E:vmsharediskcontrol02.vdi –size 110 –format VDI –variant Fixed

VBoxManage createhd –filename E:vmsharediskcontrol03.vdi –size 110 –format VDI –variant Fixed

 

VBoxManage createhd –filename E:vmsharediskspfile.vdi –size 10 –format VDI –variant Fixed

VBoxManage createhd –filename E:vmsharediskpwdfile.vdi –size 10 –format VDI –variant Fixed

 

按照上述的规律,将后续所需的redosystemsysauxtempundotbsusers所需的数据文件准备好。需要注意undotbsredo的分配,两个节点各自拥有一个undotbs,每个节点缺省需要两组redo,以thread#来区分所属节点(thread1thread2)。

3.2.磁盘的attach

由于是使用虚拟机模拟共享存储,在节点1VBoxManage创建完毕后,还需要将创建的一个个disk"挂接"attach)到节点1上,详细如下:

//ocr

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 1 –device 0 –type hdd –medium E:vmsharediskocr01.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 2 –device 0 –type hdd –medium E:vmsharediskocr02.vdi –mtype shareable

//voting disk

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 3 –device 0 –type hdd –medium E:vmsharediskvote01.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 4 –device 0 –type hdd –medium E:vmsharediskvote02.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 5 –device 0 –type hdd –medium E:vmsharediskvote03.vdi –mtype shareable

//control file

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 6 –device 0 –type hdd –medium E:vmsharediskcontrol01.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 7 –device 0 –type hdd –medium E:vmsharediskcontrol02.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 8 –device 0 –type hdd –medium E:vmsharediskcontrol03.vdi –mtype shareable

//spfile and pwdfile

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 9 –device 0 –type hdd –medium E:vmsharediskspfile.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 10 –device 0 –type hdd –medium E:vmsharediskpwdfile.vdi –mtype shareable

//redo log group

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 11 –device 0 –type hdd –medium E:vmsharediskredo1_01.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 12 –device 0 –type hdd –medium E:vmsharediskredo1_02.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 13 –device 0 –type hdd –medium E:vmsharediskredo1_03.vdi –mtype shareable

…..

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 19 –device 0 –type hdd –medium E:vmsharediskredo3_03.vdi –mtype shareable

//system,sysaux,undotbs

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 20 –device 0 –type hdd –medium E:vmsharedisksystem01.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 21 –device 0 –type hdd –medium E:vmsharedisksysaux01.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 22 –device 0 –type hdd –medium E:vmsharediskundotbs01.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 23 –device 0 –type hdd –medium E:vmsharediskundotbs02.vdi –mtype shareable

//temp,users

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 24 –device 0 –type hdd –medium E:vmsharedisktemp01.vdi –mtype shareable

VBoxManage storageattach oel5u5_1 –storagectl "SATA Controller" –port 25 –device 0 –type hdd –medium E:vmsharediskuser01.vdi –mtype shareable

 

3.3.磁盘设置shareable

将已经attach到节点1上的各个disk设置成为shareable的。

//ocr

VBoxManage modifyhd E:vmsharediskocr01.vdi –type shareable

VBoxManage modifyhd E:vmsharediskocr02.vdi –type shareable

//voting disk

VBoxManage modifyhd E:vmsharediskvote01.vdi –type shareable

VBoxManage modifyhd E:vmsharediskvote02.vdi –type shareable

VBoxManage modifyhd E:vmsharediskvote03.vdi –type shareable

//control file

VBoxManage modifyhd E:vmsharediskcontrol01.vdi –type shareable

VBoxManage modifyhd E:vmsharediskcontrol02.vdi –type shareable

VBoxManage modifyhd E:vmsharediskcontrol03.vdi –type shareable

//spfile and pwdfile

VBoxManage modifyhd E:vmsharediskspfile.vdi –type shareable

VBoxManage modifyhd E:vmsharediskpwdfile.vdi –type shareable

//redo log

VBoxManage modifyhd E:vmsharediskredo1_01.vdi –type shareable

VBoxManage modifyhd E:vmsharediskredo1_02.vdi –type shareable

D:softwarevirtualbox>VBoxManage modifyhd E:vmsharediskredo1_01.vdi –type shareable

D:softwarevirtualbox>VBoxManage modifyhd E:vmsharediskredo1_02.vdi –type shareable

D:softwarevirtualbox>VBoxManage modifyhd E:vmsharediskredo1_03.vdi –type shareable

D:softwarevirtualbox>VBoxManage modifyhd E:vmsharediskredo2_01.vdi –type shareable

D:softwarevirtualbox>VBoxManage modifyhd E:vmsharediskredo2_02.vdi –type shareable

D:softwarevirtualbox>VBoxManage modifyhd E:vmsharediskredo2_03.vdi –type shareable

D:softwarevirtualbox>VBoxManage modifyhd E:vmsharediskredo3_01.vdi –type shareable

D:softwarevirtualbox>VBoxManage modifyhd E:vmsharediskredo3_02.vdi –type shareable

D:softwarevirtualbox>VBoxManage modifyhd E:vmsharediskredo3_03.vdi –type shareable

//system,sysaux,undotbs,temp

VBoxManage modifyhd E:vmsharedisksystem01.vdi –type shareable

VBoxManage modifyhd E:vmsharedisksysaux01.vdi –type shareable

VBoxManage modifyhd E:vmsharediskundotbs01.vdi –type shareable

VBoxManage modifyhd E:vmsharediskundotbs02.vdi –type shareable

 

如下是节点1disk的配置情况

3.4.节点2上的磁盘设置

由于磁盘已经创建出来,并且attach到节点1上,在节点2需要做的就是重复节点1上,attachmodify shareable的操作,这里不再赘述。

 

4.raw device准备

4.1.OEL 5下面raw device的绑定

raw deviceOEL 4OEL 5上的处理是不同的,OEL 5是通过udev来绑定的与之前OEL 4上不同,参考如下:

编辑/etc/udev/rule.d/60-raw.rules文件,添加如下的内容。

[root@node1 rules.d]# more 60-raw.rules

# Enter raw device bindings here.

#

# An example would be:

#   ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"

# to bind /dev/raw/raw1 to /dev/sda, or

#ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"

# to bind /dev/raw/raw2 to the device with major 8, minor 1.

#ocr

ACTION=="add",KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"

ACTION=="add",KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"

#votingdisk

ACTION=="add",KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"

ACTION=="add",KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw4 %N"

ACTION=="add",KERNEL=="sdf1", RUN+="/bin/raw /dev/raw/raw5 %N"

#controlfile

ACTION=="add",KERNEL=="sdg1", RUN+="/bin/raw /dev/raw/raw6 %N"

ACTION=="add",KERNEL=="sdh1", RUN+="/bin/raw /dev/raw/raw7 %N"

ACTION=="add",KERNEL=="sdi1", RUN+="/bin/raw /dev/raw/raw8 %N"

#spfile and pwdfile

ACTION=="add",KERNEL=="sdj1", RUN+="/bin/raw /dev/raw/raw9 %N"

ACTION=="add",KERNEL=="sdk1", RUN+="/bin/raw /dev/raw/raw10 %N"

#redo

ACTION=="add",KERNEL=="sdl1", RUN+="/bin/raw /dev/raw/raw11 %N"

ACTION=="add",KERNEL=="sdm1", RUN+="/bin/raw /dev/raw/raw12 %N"

ACTION=="add",KERNEL=="sdn1", RUN+="/bin/raw /dev/raw/raw13 %N"

#system,sysaux,undotbs

ACTION=="add",KERNEL=="sdo1", RUN+="/bin/raw /dev/raw/raw14 %N"

ACTION=="add",KERNEL=="sdp1", RUN+="/bin/raw /dev/raw/raw15 %N"

ACTION=="add",KERNEL=="sdq1", RUN+="/bin/raw /dev/raw/raw16 %N"

ACTION=="add",KERNEL=="sdr1", RUN+="/bin/raw /dev/raw/raw17 %N"

#temp,user

ACTION=="add",KERNEL=="sds1", RUN+="/bin/raw /dev/raw/raw18 %N"

ACTION=="add",KERNEL=="sdt1", RUN+="/bin/raw /dev/raw/raw19 %N"

 

root下面使用start_udev来重启udev服务,然后通过raw -qa来查询raw device是否绑定上了:

[root@node1 ~]# raw -qa

/dev/raw/raw1:  bound to major 8, minor 17

/dev/raw/raw2:  bound to major 8, minor 33

/dev/raw/raw3:  bound to major 8, minor 49

/dev/raw/raw4:  bound to major 8, minor 65

/dev/raw/raw5:  bound to major 8, minor 81

/dev/raw/raw6:  bound to major 8, minor 97

/dev/raw/raw7:  bound to major 8, minor 113

/dev/raw/raw8:  bound to major 8, minor 129

/dev/raw/raw9:  bound to major 8, minor 145

/dev/raw/raw10: bound to major 8, minor 161

/dev/raw/raw11: bound to major 8, minor 177

/dev/raw/raw12: bound to major 8, minor 193

/dev/raw/raw13: bound to major 8, minor 209

/dev/raw/raw14: bound to major 8, minor 225

/dev/raw/raw15: bound to major 8, minor 241

/dev/raw/raw16: bound to major 65, minor 1

/dev/raw/raw17: bound to major 65, minor 17

/dev/raw/raw18: bound to major 65, minor 33

/dev/raw/raw19: bound to major 65, minor 49

 

4.2.raw device权限、宿主设置

raw device是要给oracle使用的,其中ocrvoting disk应该是root:oisnatll的,其余都设置为oracle:oinstallchmod设置为660。还是在60-raw.rules中添加如下信息:

#config for the owner and privs

ACTION=="add", KERNEL=="raw1", OWNER="root", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw2", OWNER="root", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw3", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw4", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw5", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw6", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw7", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw8", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw9", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw10", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw11", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw12", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw13", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw14", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw15", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw16", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw17", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw18", OWNER="oracle", GROUP="oinstall", MODE="660"

ACTION=="add", KERNEL=="raw19", OWNER="oracle", GROUP="oinstall", MODE="660"

 

4.3.关于rc.local、关于raw[1-19]

关于rc.local。在很多教程中有不少提及如果重启OS,配置在60-raw.rules文件中的配置信息会丢失掉,需要在rc.local中添加OS启动时执行的脚本。我在实施的时候没有遇到此问题。权限、宿主、raw device的信息都不会因为OSreboot而丢失。

关于raw[1-19]通配符。如果连续添加19条记录确实是一件比较恼人的事情,网上不少教程提及了raw[1-19]这样的通配符,但我没有配置成功,时钟无法"偷懒"

备注:raw device的配置需要在两个节点都进行,第一个节点配置完毕后,可以讲配置文件60-raw.rules拷贝至第二节点。

 

5.oracle软件相关准备

5.1.用户、宿主、目录

下面是准备安装oracle软件的用户、宿主、目录等,如果你打了oracle-validated包,oracle用户、宿主(oinstall,dba)都已经创建好了,也准备完毕了。

准备目录,授权等。(在两个节点分别处理)

[oracle@node1 ~]$ id oracle

uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba)

//CRS_HOME

mkdir -p /opt/app/oracle/product/10.2.0/crs

//ORACLE_HOME

mkdir -p /opt/app/oracle/product/10.2.0/db_1

mkdir -p /opt/app/oracle/oraInventory

//权限、宿主

chown -R oracle:oinstall /opt/app/oracle/product/10.2.0/db_1

chown -R oracle:oinstall /opt/app/oracle/product/10.2.0/crs

chown -R oracle:oinstall /opt/app/oracle/oraInventory

chmod -R 775 /opt/app/oracle/product/10.2.0/db_1

chmod -R 775 /opt/app/oracle/product/10.2.0/crs

chmod -R 775 /opt/app/oracle/oraInventory

 

5.2.配置oracle用户的profile

主要将$ORACLE_HOME,$ORACLE_CRS_HOME等环境变量添加进去。

# User specific environment and startup programs

TMP=/tmp; export TMP

TMPDIR=$TMP; export TMPDIR

ORACLE_BASE=/opt/app/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME

ORACLE_SID=node1; export ORACLE_SID

ORACLE_TERM=xterm; export ORACLE_TERM

ORACLE_CRS_HOME=/opt/app/oracle/product/10.2.0/crs;export ORACLE_CRS_HOME

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_CRS_HOME/bin

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH

export PATH

if [ $USER = “oracle” ]; then

if [ $SHELL = “/bin/ksh” ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

fi

别忘记source .bash_profile,让环境变量生效,注意相应的目录。

5.3.limits.conf

配置/etc/security/limits.conf文件。如果安装了rpmoracle-validated,你会发现里面的内容已经帮你添加好了。

more /etc/security/limits.conf

# End of file

oracle   soft   nofile    131072

oracle   hard   nofile    131072

oracle   soft   nproc    131072

oracle   hard   nproc    131072

oracle   soft   core    unlimited

oracle   hard   core    unlimited

oracle   soft   memlock    50000000

oracle   hard   memlock    50000000

 

5.4./etc/pam.d/login

login文件中添加一条记录

session    required     pam_limits.so

5.5./etc/sysctl.conf

检查sysctl.conf文件,maskumask相应的行。安装了oracle-validated包之后,大量的参数更改工作已经为你准备好了,只需要注释、开启相应的行即可。

示例片段:

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 1073741824

# For 11g, recommended value for file-max is 6815744

#fs.file-max = 6815744

# For 10g, uncomment 'fs.file-max 327679', comment other entries for this parameter and re-run sysctl -p

fs.file-max = 327679

 

5.6.配置hangcheck-timer

在两个节点的/etc/modprobe.conf中添加如下条目

options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

然后分别load,使之生效modprobe -v hangcheck-timer

需要将modprobe hangcheck-timer命令加入rc.local中,否则os重启后配置会失效。

5.7.配置ssh等价

oracle rac的安装一般在一个节点发起,是通过ssh等价将所需的内容拷贝到两外节点的。

su – oracle

mkdir ~/.ssh

chmod 700 ~/.ssh

/usr/bin/ssh-keygen -t rsa # Accept the default settings.

exit

 

The RSA public key is written to the ~/.ssh/id_rsa.pub file and the private key to the ~/.ssh/id_rsa file

[oracle@node1 .ssh]$ pwd

/home/oracle/.ssh

[oracle@node1 .ssh]$ ls

id_rsa  id_rsa.pub

//同样在node2节点也做同样操作,生成id_rsaid_rsa.pub文件。

node1上生成authorized_keys,并把这个authorized_keys拷贝到node2.ssh目录中。

su – oracle

cd ~/.ssh

cat id_rsa.pub >> authorized_keys

scp authorized_keys node2:/home/oracle/.ssh/

exit

登陆到node2节点,进行配置。

su – oracle

cd ~/.ssh

//node2生成的密钥id_rsa.pub信息追加到authorized_keys中,

然后将这个拥有两边rsa密钥信息的文件,传到node1相应目录中覆盖node1中的authorized_keys

cat id_rsa.pub >> authorized_keys

scp authorized_keys rac1:/home/oracle/.ssh/

exit

//至此等价性基本配置完毕了,测试一下ssh等价性。

su – oracle

ssh node1 date

ssh node2 date

ssh node1.localdomain date

ssh node2.localdomain date

exec /usr/bin/ssh-agent $SHELL

/usr/bin/ssh-add

 

5.8.加压安装包介质

解压cpio.gz压缩包

[oracle@node1 clusterware]$ ls

10201_clusterware_linux_x86_64.cpio.gz

[oracle@node1 clusterware]$ gunzip 10201_clusterware_linux_x86_64.cpio.gz

[oracle@node1 clusterware]$ ls

10201_clusterware_linux_x86_64.cpio

[oracle@node1 clusterware]$ cpio -idmv < 10201_clusterware_linux_x86_64.cpio

 

5.9.dbca_raw_config文件

.bash_profile中设置环境变量 DBCA_RAW_CONFIG=/home/oracle/dbca_raw_config。这个环境变量仅仅是在安装的时候使用的,后续rac的管理,不需要这个环境变量。

dbca_raw_config文件中的内容如下:

 

[oracle@node1 ~]$ more dbca_raw_config

control1=/dev/raw/raw6

control2=/dev/raw/raw7

control3=/dev/raw/raw8

spfile=/dev/raw/raw9

pwdfile=/dev/raw/raw10

redo1_1=/dev/raw/raw11

redo2_1=/dev/raw/raw12

redo3_1=/dev/raw/raw13

system=/dev/raw/raw14

sysaux=/dev/raw/raw15

undotbs1=/dev/raw/raw16

undotbs2=/dev/raw/raw17

temp=/dev/raw/raw18

users=/dev/raw/raw19

备注:redo的数量请按照实际情况设置,示例是不足够的。缺省情况:两个节点,每个节点(thread)需要2组的redo,少于2组,启动到mount状态时会报错的。请确保最少每个节点有2redo

例如:ORA-01618: redo thread 2 is not enabled – cannot mount

5.10.安装前的环境检查

CRS提供脚本来做安装前的prerequisites检查,示例如下:

[oracle@node1 cluvfy]$ pwd

/home/oracle/clusterware/clusterware/cluvfy

[oracle@node1 cluvfy]$ ./runcluvfy.sh stage -pre crsinst -n node1,node2 -verbose

//这个脚本会自动的检查两个节点是否满足crs的安装条件

[oracle@node1 cluvfy]$ ./runcluvfy.sh stage -pre crsinst -n node1,node2 -verbose

Performing pre-checks for cluster services setup

Checking node reachability…

Check: Node reachability from node "node1"

Destination Node                      Reachable?

————————————  ————————

node1                                 yes

node2                                 yes

Result: Node reachability check passed from node "node1".

 

 

Checking user equivalence…

 

Check: User equivalence for user "oracle"

Node Name                             Comment

————————————  ————————

node2                                 passed

node1                                 passed

Result: User equivalence check passed for user "oracle".

 

Checking administrative privileges…

 

Check: Existence of user "oracle"

Node Name     User Exists               Comment

————  ————————  ————————

node2         yes                       passed

node1         yes                       passed

Result: User existence check passed for "oracle".

 

Check: Existence of group "oinstall"

Node Name     Status                    Group ID

————  ————————  ————————

node2         exists                    54321

node1         exists                    54321

Result: Group existence check passed for "oinstall".

 

Check: Membership of user "oracle" in group "oinstall" [as Primary]

Node Name         User Exists   Group Exists  User in Group  Primary       Comment

—————-  ————  ————  ————  ————  ————

node2             yes           yes           yes           yes           passed

node1             yes           yes           yes           yes           passed

Result: Membership check for user "oracle" in group "oinstall" [as Primary] passed.

 

Administrative privileges check passed.

 

Checking node connectivity…

 

 

Interface information for node "node2"

Interface Name                  IP Address                      Subnet

——————————  ——————————  —————-

eth0                            192.168.56.106                  192.168.56.0

eth1                            172.10.0.2                      172.10.0.0

 

 

Interface information for node "node1"

Interface Name                  IP Address                      Subnet

——————————  ——————————  —————-

eth0                            192.168.56.105                  192.168.56.0

eth1                            172.10.0.1                      172.10.0.0

 

Check: Node connectivity of subnet "192.168.56.0"

Source                          Destination                     Connected?

——————————  ——————————  —————-

node2:eth0                      node1:eth0                      yes

Result: Node connectivity check passed for subnet "192.168.56.0" with node(s) node2,node1.

 

Check: Node connectivity of subnet "172.10.0.0"

Source                          Destination                     Connected?

——————————  ——————————  —————-

node2:eth1                      node1:eth1                      yes

Result: Node connectivity check passed for subnet "172.10.0.0" with node(s) node2,node1.

 

Suitable interfaces for VIP on subnet "172.10.0.0":

node2 eth1:172.10.0.2

node1 eth1:172.10.0.1

 

Suitable interfaces for the private interconnect on subnet "192.168.56.0":

node2 eth0:192.168.56.106

node1 eth0:192.168.56.105

 

Result: Node connectivity check passed.

 

 

Checking system requirements for 'crs'…

No checks registered for this product.

Pre-check for cluster services setup was unsuccessful on all the nodes.

上面的unsuccessful说明还有一些check条件不满足,但我查了一圈也没查个所以然,还是继续吧。

6.CRS的安装

CRS的安装从./runInstaller开始,记得加上-ignoreSysPrereqs,因为缺省oracle官方的文档建议oracle10g安装在RHEL 4这个版本上,在安装之前会检查缺省的OS版本信息,所用加上-ignoreSysPrereqs来规避。接下来将是大约27png的截图,仔细研究这些截图上的信息也是一件有意思的事情,例如:在./runInstaller之后,会提示"Y/N",大约是所要root权限,图片没截下来,有兴趣的可以仔细看看。

[welcome]

 

 

[specify the inventory dir]

[specify the CRS_HOME]

[prerequisite checks]

[specify the cluster config]

[手工加上另外节点的信息,我理解第二个节点的信息应当自动出现,而不是手工增加,但依旧没查出个所以然]

[添加后的状态]

 

 

[如下这个报错就是因为手工将vip写死在了eth0网卡上–eth0:1,删除这个eth0:1网卡设置后顺利通过]

 

 

[两块网卡的职责,各自分别负责publicprivate]

 

 

[specify the OCR information]

[specify the voting disk]

[install summary]

[processing]

[shit.遭遇报错了,报错的大致原因是在node2上没有创建oraInventory目录的权限,归根到底是忘记在node2上授权了,按照报错的指引,授权后,重新跑一下脚本即可]

$ORACLE_BASE/crs/oui/bin/runInstaller -attachHome -noClusterEnabled ORACLE_HOME=/opt/app/oracle/product/10.2.0/crs ORACLE_HOME_NAME=OraCrs10g_home CLUSTER_NODES=node1,node2 CRS=true "INVENTORY_LOCATION=/opt/app/oracle/oraInventory" LOCAL_NODE=node2

[最后需要执行经典的root.sh脚本]

[root.sh执行过程中的一些log信息]

[node2上执行root.sh时报错了]

 

"error while loading shared libraries: libpthread.so.0"似乎是个安装时会遇到的bug整个的安装进度也被卡在了这里,几次retry都无法通过,如下是解决方法:

$ORACLE_CRS_HOME/bin目录下的vipca,srvctl文件中的LD_ASSUME_KERNEL=2.4.19export LD_ASSUME_KERNEL都注释掉,unset LD_ASSUME_KERNEL

然后重新retry一下,详见:bug 3937317

//一些辅助性质的诊断:

在任意节点使用oifcfg来配置publicvip网络,记得使用root用户执行

[root@node2 bin]# ./oifcfg setif -global eth0/192.168.56.0:public

PRIF-50: duplicate interface is given in the input

//public的配置看来已经存在了

[root@node2 bin]# ./oifcfg setif -global eth1/172.10.0.0:cluster_interconnect

PRIF-50: duplicate interface is given in the input

//private的配置也有了,将interface的信息都list出来看看

[root@node2 bin]# ./oifcfg getif

eth0  192.168.56.0  global  public

eth1  172.10.0.0  global  cluster_interconnect

[按照指引使用root用户执行vipca来配置]

备注:CRS的安装暂告一个段落。

7.database软件的安装

10201database软件的安装相对简单多了,无需额外配置,直接./runInstaller开始吧

 

8.patch crs

CRS打补丁,apply10205的补丁集。10205的补丁集介质包含了CRSdb的补丁,都在这一份zip介质中。

详见如下截图:

[./runInstaller之后,选择相应的CRS_HOME]

[按照提示执行相应的脚本]

 

 

[node2上先把CRS停掉,再按照提示执行相应的脚本,注意看提示]

 

 

9.patch database

CRS补丁打完后,记得给database的补丁也打上,过程与CRS patch的过程类似

详细见截图:

10.netca创建listener

dbca创建instance之前,先把listener给创建了吧,免得后面如果创建EM时会报错。

详见截图:

 

 

11.dbca创建instance

过程不再赘述了,看截图吧。

[popup的信息是由于我之前redo的规划不合理,没有分配给thread2 redo,所以报错]

[database service这里我没有配置,保留了缺省的状态,dbca配置database serviceTAF策略是无法自动写入数据库的数据字典中的,需要借助dbms_service的包来手工处理,所以这里没有配置TAF相关的service,只是留了一个缺省的摸样]

[下图有个机会,根据自己的实际情况调整redo的设置]

 

oracle10gRAC_OEL5u5_rawdevice_virtualbox

 

–EOF–