Bootstrap

详解Vmware+Linux+Oracle10g rac全过程

虚拟机用的是vmware workstation,用了一段时间之后发现用vmware workstation版本建不了共享磁盘,也就没法构建ORACLE RAC实验环境,所以把vmware workstation换成了vmware server2.0。装完vmware server2.0之后连启动web界面都成问题,重装仍然如此,无奈之下启用了vmware server1.0.6版本。. @1 H* P/ W0 r* p

3 Z6 A/ J: S# I/ _0 A. b  在使用哪一款linux操作系统也几经选择,开始用的是linux enterprise 4.0版本,到建立共享磁盘的时候始终有问题,过不去,后来在ITPUB意外的发现了君三思的学习笔记《手把手教你用VMware在linux下安装 oracle10g RAC》,看他在里面用的是linux 5.1版本的操作系统,为了实验过程顺利一些,我也采用了这个版本的操作系统。5 a4 h$ /9 k# U/ E- T

; u5 G1 z( }$ /  在使用介质的时候也碰到些小问题,搭建ORACLE RAC需要用到的两个重要介质,一是clusterware,也就是oracle集群软件,一是oracle software for linux,可能是网络的因素,在下载完10201_database_linux32.zip这个文件并上传到linux操作系统中却非常意外的发现无法解压,究其原因可能是下载得不够健全,一部分字节出了问题,导致整个文件都不能用,于是只有重新下载,非常消耗时间。* s$ l% j: n/ P. C1 o+ P

 


二、设置vmware环境
用vmware主要是创建虚拟机,这个过程比较简单。
新建一个虚拟机

点击File->New->Virtual Machine,或者直接输入Ctrl+n

进行创建的欢迎页面


点击下一步即可

选择配置方式

建议选择Custom,自定义虚拟机的配置。

选择操作系统

选择Linux,Red Hat Linux就可以。

给虚拟机选择一个存储的位置

要注意该目录的剩余磁盘空间,由于我们安装操作系统和数据库至少要有8G空间,如果你准备将两个虚拟机都放在该盘下的话,该磁盘剩余空间至少要有20G。

设置虚拟机访问权限

就是其它用户是否能够访问这个虚拟机,无所谓的设置,不影响我们rac环境的配置~~~

虚拟机的启动和关闭选项设置

默认即可。

选择虚拟机使用的cpu数量



选择虚拟机可使用的内存



选择网卡及网卡的类型

这里选择桥接,注意,安装RAC需要至少两块网卡,因此一会儿我们还需要再添加一个网卡进来

选择I/O适配器的类型

推荐LSI Logic

为虚拟机创建磁盘

由于是新创建的虚拟机,因此此处选择创建一个新的虚拟磁盘。

磁盘类型选择SCSI



设置虚拟磁盘的大小

根据实际情况输个值吧,前面提到安装操作系统和数据库所需空间至少为8G,建议留出富裕。

选择虚拟磁盘的存储路径



点击完成后,进入到虚拟机的主界面



单击 Edit virtual machine settings,我们需要添加和删除一些设备

在这个的界面中remove掉无用设备,这里你根据实现情况自行操作吧,然后点击Add~~

进入硬件添加向导



首先添加几个磁盘,用来做共享存储
由于我们准备采用asm+raw来创建rac,将voting disk和ocr放在raw上,数据文件等放在asm上,因此我们至少需要创建4个虚拟的硬盘,其中voting disk需要至少20M的空间,ocr需要至少60M的空间,数据文件等至少需要1-2G的空间,如果你的磁盘剩余空间充足,建议留有足够的富裕。

添加硬盘的操作与前文中的非常相向,需要注意最后两步






注意:此处一定要选中Allocate all disk space now,即首先分配足额的磁盘空间,避免后期需要使用时再分配,可能会造成虚拟机崩溃。

指定的磁盘文件并不一定要与虚拟机在相同路径下,你完全可以存储在其它磁盘中。
需要注意的是,此处要点击Advanced

在Virtual device node中选择一个新的scsi总线(比如虚拟机默认磁盘SCSI 0:x,则新添加的硬盘可以使用1:x)
注意选中Persistent,即同步写入数据到磁盘。然后点击完成即可~~

循环上述添加磁盘的步骤,按你的实际情况添加几个(注,最少要3个,一个做asm盘,一个用来存储votingdisk,一个用来存储OCR)


再添加一个网卡


选择网络类型

注意:此处建议选择Host-only

三思最终的设置配置是这样的:


虚拟机配置完成。

3.安装RedHat

 


四、配置linux环境
以下脚本操作较多,不再频繁截图,仅贴出操作脚本供参考。
另,所有操作如非特别注明,均为root用户(注意看操作符前缀),建议通过ssh远程操作。

修改虚拟机配置
在配置linux系统之前,首先到你的虚拟机工作目录,打开.vmx文件,添加下列内容:
disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"

scsi1:1.deviceType = "disk"
scsi1:2.deviceType = "disk"
scsi1:3.deviceType = "disk"
scsi1:4.deviceType = "disk"

提示:如果你创建有磁盘有多个,注意要按照你的实际情况修改。

编辑/etc/hosts文件
[root@node1 ~]# vi /etc/hosts
增加如下内容:
192.168.100.101 node1
192.168.100.102 node2

192.168.100.201 node1-vip
192.168.100.202 node2-vip

10.10.17.221 node1-priv
10.10.17.222 node2-priv

提示:192.168.100.201,202为指定的虚IP,供CRS使用,不需要我们配置。

创建组oinstall,dba,用户oracle
[root@node1 ~]# groupadd oinstall
[root@node1 ~]# groupadd dba
[root@node1 ~]# useradd -d /home/oracle -g oinstall -G dba oracle

设置oracle用户密码
[root@node1 ~]# passwd oracle
Changing password for user oracle.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

提示:
[root@node1 ~]# id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)
如果是非虚机安装,要注意记录下用户和组ID,在其它机器上创建同名组时,务必确认组ID和用户ID与此相同。

修改oracle用户的初始化参数文件
[root@node1 ~]# vi /home/oracle/.bash_profile
增加如下内容:
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/opt/ora10g
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=RACDB1
export ORACLE_TERM=xterm
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin/
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
ulimit -u 16384 -n 65536
umask 022
此处注意oracle_sid的名称要与后续创建数据库时指定的sid相同(注意大小写),不然你每次想通过本机登录的方式进入oracle都得重新export ORACLE_SID了。

创建/opt/ora10g目录,要注意该目录所有者或oracle用户的权限
[root@node1 ~]# mkdir /opt/ora10g
由于该目录主要由oracle用户操作,因此我们将其所有者改为oracle
[root@node1 ~]# chown oracle.oinstall /opt/ora10g

配置内核参数
[root@node1 ~]# vi /etc/sysctl.conf
增加或修改下列内容
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144

提示,上述参数中通常只有一项需要我们更改,即kernel.shmmax,该参数推荐设定为物理内存的一半,由于安装crs的时候要求内存至少512M,因此我们此处也按照512*1024*1024来设置。

然后:
[root@node1 Server]# sysctl -p
让设置生效

提高 Oracle 用户的 shell 限制
设置oracle使用的文件数权限
[root@node1 ~]# vi /etc/security/limits.conf
增加下列内容
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

修改安全限制
[root@node1 ~]# vi /etc/pam.d/login
增加:
session    required     /lib/security/pam_limits.so

配置Hangcheck计时器
[root@node1 ~]# vi /etc/rc.local
增加:
modprobe hangcheck-timer hangcheck-tick=30 hangcheck_margin=180

磁盘分区
例如:
[root@node1 ~]# fdisk /dev/sdb

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-102, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-102, default 102):
Using default value 102

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

需要你输入的依次是"n/p/1/回车/回车/w"。
就本例而言,需要我们进行分区的有4个:sdb,sdc,sde,sdf

全分完后fdisk -l看一下,应该是这种形式:
[root@node1 ~]# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14         166     1228972+  82  Linux swap / Solaris
/dev/sda3             167        1044     7052535   83  Linux

Disk /dev/sdb: 107 MB, 107374080 bytes
64 heads, 32 sectors/track, 102 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         102      104432   83  Linux

Disk /dev/sdc: 322 MB, 322122240 bytes
64 heads, 32 sectors/track, 307 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         307      314352   83  Linux

Disk /dev/sdd: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         261     2096451   83  Linux

Disk /dev/sde: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1         261     2096451   83  Linux

安装 oracleasmlib 程序包
所需的程序包可以到这里下载:
http://www.oracle.com/technology ... x/asmlib/rhel5.html
http://oss.oracle.com/projects/c ... s/Enterprise_Linux/
注意一定要与操作系统版本相符。

包还真不少,本着宁可无用,不能无有的原则,能下到的统统装上
俺装的包有下列:
[root@node1 rhel5]# ls -l
total 225376
-rwxr--r-- 1 oracle oinstall    410476 May 29 15:16 compat-binutils215-2.15.92.0.2-24.i386.rpm
-rwxr--r-- 1 oracle oinstall      4256 May 29 15:16 compat-libcwait-2.1-1.i386.rpm
-rwxr--r-- 1 oracle oinstall     88787 May 29 15:17 compat-libstdc++-egcs-1.1.2-1.i386.rpm
-rwxr--r-- 1 oracle oinstall      3840 May 29 15:17 compat-oracle-el5-1.0-5.i386.rpm
-rwxr--r-- 1 oracle oinstall   1079629 May 29 15:17 openmotif21-2.1.30-11.EL5.i386.rpm
-rwxr--r-- 1 oracle oinstall    122314 May 29 15:17 openmotif21-debuginfo-2.1.30-11.EL5.i386.rpm
-rwxr--r-- 1 oracle oinstall    125313 May 30 15:02 oracleasm-2.6.18-53.el5-2.0.4-1.el5.i686.rpm
-rwxr--r-- 1 oracle oinstall    126085 May 30 15:02 oracleasm-2.6.18-53.el5debug-2.0.4-1.el5.i686.rpm
-rwxr--r-- 1 oracle oinstall    125927 May 30 15:02 oracleasm-2.6.18-53.el5PAE-2.0.4-1.el5.i686.rpm
-rwxr--r-- 1 oracle oinstall    123346 May 30 15:02 oracleasm-2.6.18-53.el5xen-2.0.4-1.el5.i686.rpm
-rwxr--r-- 1 oracle oinstall     13658 May 30 15:13 oracleasmlib-2.0.3-1.el5.i386.rpm
-rwxr--r-- 1 oracle oinstall     22936 May 30 15:13 oracleasm-support-2.0.4-1.el5.i386.rpm
-rwxr--r-- 1 oracle oinstall     10662 May 29 15:17 xorg-x11-libs-compat-6.8.2-1.EL.33.0.1.i386.rpm

安装示例:
[root@node1 rhel5]# rpm -ivh compat-binutils215-2.15.92.0.2-24.i386.rpm
Preparing...                ########################################### [100%]
   1:compat-binutils215     ########################################### [100%]

提示,如果在安装过程中提示你缺少其它包,你可以先到操作系统安装光盘中寻找并安装所需系统包,然后再来安装下载到的包。

配置裸设备
由于RHEL5中取消了rawdevices,如果不想将映射命令放到rc.local中的话,我们就需要将其配置到/etc/udev/rules.d/文件夹中
修改文件
[root@node1 ~]# vi /etc/udev/rules.d/60-raw.rules

增加如下内容:
ACTION=="add", KERNEL=="/dev/sdb1",RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="17",RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", KERNEL=="/dev/sdc1",RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="33",RUN+="/bin/raw /dev/raw/raw2 %M %m"
ACTION=="add", KERNEL=="/dev/sdd1",RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="49",RUN+="/bin/raw /dev/raw/raw3 %M %m"
ACTION=="add", KERNEL=="/dev/sde1",RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="65",RUN+="/bin/raw /dev/raw/raw4 %M %m"
KERNEL=="raw[1-4]", OWNER="oracle", GROUP="oinstall", MODE="640"

提示:要根据你的实际情况来配置
另外关于此处的配置有一点非常奇怪,我看到red hat官方文档中关于raw.rule的示例中说KERNEL==..或ENV{MAJOR}...只需要任意配置一个就可以,但我在具体配置过程中发现百试不爽,我尝试了各种组合发现都不生效,必须二者同时配置才可以,难道是俺用的linux内核版本太低了?百思不得其解,如有达人已深究其内幕,望助我解惑~~~~

重启下服务:
[root@node1 ~]# start_udev
Starting udev: [  OK  ]

验证一下
[root@node1 ~]# ls /dev/raw/ -l
total 0
crw-r----- 1 oracle oinstall 162, 1 Jun  6 17:57 raw1
crw-r----- 1 oracle oinstall 162, 2 Jun  6 17:57 raw2
crw-r----- 1 oracle oinstall 162, 3 Jun  6 17:57 raw3
crw-r----- 1 oracle oinstall 162, 4 Jun  6 17:57 raw4

OK,前期设置完成。En,有点儿麻烦,但运气还算不错,在这些操作上你基本不会遇到什么问题。

五、配置第2台节点-NODE2

关闭节点1,通过vmware复制一个新节点出来,操作非常简单,如果希望界面方式的话,就点击Clone this virtual machine,按照提示下一步即可。如果希望更快捷,直接将rac1目录复制一份到rac2,然后修改.vmx文件中的配置,将路径rac1相关的改成rac2,将RHEL5_NODE1改成RHEL5_NODE2,然后用vmware打开rac2目录中的vmx文件即可,这里三思采用的就是这种方式。

将你启动RHEL5_NODE2的时候,系统会弹出这个提示,一个要选择Create。该选项是说vmware发现配置发生了变化,如果该虚机是复制出来的,需要创建一个唯一的身份标识,让你来选择是否创建,当然要选择Create,如图:


提示:注意下列操作符中提示是node1,这是因为该虚机是由node1复制出来的,千万不要以为下列操作是要在node1上设置哟。

修改hostname
将node1改成node2
[root@node1 ~]# hostname node2
[root@node1 ~]# vi /etc/sysconfig/network
这样重启之后机器名称就会变成node2了。

修改ip地址
先ifconfig看一下:
[root@node1 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:290:48:9D  
          inet addr:172.25.0.59  Bcast:172.25.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fed0:489d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2032 errors:0 dropped:0 overruns:0 frame:0
          TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:238791 (233.1 KiB)  TX bytes:8111 (7.9 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:290:48:A7  
          inet addr:172.25.0.60  Bcast:172.25.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fed0:48a7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1847 errors:0 dropped:0 overruns:0 frame:0
          TX packets:46 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:201063 (196.3 KiB)  TX bytes:8958 (8.7 KiB)
          Interrupt:19 Base address:0x1800
...................
...................
这一步主要是为了记录下两个网卡的mac地址。

[root@node1 ~]# cd /etc/sysconfig/network-scripts/
[root@node1 network-scripts]# mv ifcfg-eth0.bak ifcfg-eth0 -f
[root@node1 network-scripts]# mv ifcfg-eth1.bak ifcfg-eth1 -f
[root@node1 network-scripts]# vi ifcfg-eth0
修改IP地址,192.168.100.101为192.168.100.102
注意修改HWADDR的值为前面ifconfig中查看到的eth0的HWaddr:00:0C:290:48:9D

[root@node1 network-scripts]# vi ifcfg-eth1
同理做修改,HWADDR的值要修改为eth1中的HWaddr:00:0C:290:48:A7

最后重启一下网络服务
[root@node1 network-scripts]# service network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down interface eth1:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Disabling IPv4 packet forwarding:  net.ipv4.ip_forward = 0
                                                           [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:                                [  OK  ]
Bringing up interface eth1:                                [  OK  ]

提示:此时两机使用4个IP或4个别名互ping应该都是通的了,如果不通,建议按照上述的操作步骤,检查一下网络的配置。

修改oracle用户下的环境变量等
[root@node2 network-scripts]# vi /home/oracle/.bash_profile
将ORACLE_SID=RACDB1改为ORACLE_SID=RACDB2

统统设置完成后,建议重启一下第2个节点。

六、配置Clusterware安装环境

设置ssh
在clusterware (CRS) 和 Rac Database安装过程中,Oracle Universal Installer (OUI) 必须能够以 oracle 的身份自动将软件复制到所有 RAC 节点。这里我们通过配置ssh 让oracle用户拥有不输入密码即可访问各节点的能力。
首先两个节点间互ping,要确保都是通的
[root@node1 ~]# ping 192.168.100.102
[root@node1 ~]# ping 10.10.17.222

要建立用户等效性,需要在两个节点上以 oracle 用户身份生成用户的公钥和私钥,首先在node1执行:
[root@node1 opt]# su - oracle
[oracle@node1 ~]$ mkdir ~/.ssh
[oracle@node1 ~]$ chmod 700 ~/.ssh
[oracle@node1 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
d2:69:eb:ac:86:62:27:50:99:ff:e8:1e:a2:e6:5d:7f oracle@node1
[oracle@node1 ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
0a:9a:20:46:a2:28:ec:72:23:82:f2:9d:f8:62:9b:d1 oracle@node1

然后换node2执行
[root@node2 ~]# ping 192.168.100.102
[root@node2 ~]# ping 10.10.17.222
[root@node2 opt]# su - oracle
[oracle@node2 ~]$ mkdir ~/.ssh
[oracle@node2 ~]$ chmod 700 ~/.ssh
[oracle@node2 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
dd:be:7a:37:e4:b5:f0:b2:24:95:50:61:ea:a1:61:07 oracle@node2
[oracle@node2 ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
bc:b5:cb:43:c7:19:53:d6:f7:16:69:85:12:7f:aa:be oracle@node2

切换回node1,接着执行:
[oracle@node1 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@node1 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

提示:下列命令会提示你输入node2的oracle密码,按照提示输入即可,如果失败可重新尝试执行命令。
[oracle@node1 ~]$ ssh node2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'node2 (192.168.100.102)' can't be established.
RSA key fingerprint is 92:d1:ce:5b:c8:a1:52:d5:ac:00:5f:48:5d:12:06:e4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node2,192.168.100.102' (RSA) to the list of known hosts.
oracle@node2's password:
[oracle@node1 ~]$ ssh node2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
oracle@node2's password:
[oracle@node1 ~]$ scp ~/.ssh/authorized_keys node2:~/.ssh/authorized_keys
oracle@node2's password:
authorized_keys                               100% 1992     2.0KB/s   00:00   

两机相互执行,看看是否还需要输入密码
[oracle@node1 ~]$ ssh node1 date
[oracle@node1 ~]$ ssh node2 date
[oracle@node1 ~]$ ssh node1-priv date
[oracle@node1 ~]$ ssh node2-priv date

切换至node2执行
[oracle@node2 ~]$ ssh node1 date
[oracle@node2 ~]$ ssh node2 date
[oracle@node2 ~]$ ssh node1-priv date
[oracle@node2 ~]$ ssh node2-priv date

提示:
注意命令的返回信息,由于rac对节点间时间较敏感,因此如果此处显示节点单时间不一至,建议同步(一般相隔超过20秒就需要同步时间了)。

配置asm
注意:必须以root身份进行

首先在node1执行:
[root@node1 ~]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting <ENTER> without typing an
answer will keep that current value.  Ctrl-C will abort.

Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: [  OK  ]
Loading module "oracleasm": [  OK  ]
Mounting ASMlib driver filesystem: [  OK  ]
Scanning system for ASM disks: [  OK  ]

提示:如果本步执行出错(可能出错机率最高的是在Scanning system for ASM),不妨将转换一下命令行的执行方式,改成:
[root@node1 ~]# sh /etc/init.d/oracleasm configure
有可能解决你的问题!

然后切换至node2执行
[root@node2 ~]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting <ENTER> without typing an
answer will keep that current value.  Ctrl-C will abort.

Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: [  OK  ]
Loading module "oracleasm": [  OK  ]
Mounting ASMlib driver filesystem: [  OK  ]
Scanning system for ASM disks: [  OK  ]

再切换回node1执行
[root@node1 ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdd1
Marking disk "/dev/sdd1" as an ASM disk: [  OK  ]
[root@node1 ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sde1
Marking disk "/dev/sde1" as an ASM disk: [  OK  ]
[root@node1 linux-patch]# /etc/init.d/oracleasm scandisks
Scanning system for ASM disks: [  OK  ]

查看一下当前的磁盘组:
Scanning system for ASM disks: [  OK  ]
[root@node1 ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2

Node2上也查看一下当前磁盘组:
[root@node2 ~]# /etc/init.d/oracleasm scandisks
Scanning system for ASM disks: [  OK  ]
[root@node2 ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2

Ok,配置完成,准备进入到crs的安装阶段

七、安装Clusterware
注意,在这项配置中,除非特别说明,所有操作都是基于oracle用户的。

检查安装环境
在安装crs之前,建议先利用CVU(Cluster Verification Utility)检查 CRS 的安装前环境
[oracle@node1 cluvfy]$ /data/rhel5/clusterware/cluvfy/runcluvfy.sh stage -pre crsinst -n node1,node2 -verbose
返回信息太多,这里就不贴俺执行的结果了。
需要注意几点,其返回的信息中有几个错误可忽略~~

.与VIP 查找一组适合的接口有关,错误信息如下:
错误信息如下:
ERROR:
Could not find a suitable set of interfaces for VIPs.

这是一个bug,Metalink中有详细说明,doc.id:338924.1,如说明中所述,可以忽略该错误,没什么问题。

.有一堆包的验证会出现错误,要么提示找不到,要么是版本不对。例如:
Check: Package existence for "compat-gcc-7.3-2.96.128"
  Node Name                       Status                          Comment         
  ------------------------------  ------------------------------  ----------------
  node2                           missing                         failed         
  node1                           missing                         failed         
Result: Package existence check failed for "compat-gcc-7.3-2.96.128".

Check: Package existence for "compat-gcc-c++-7.3-2.96.128"
  Node Name                       Status                          Comment         
  ------------------------------  ------------------------------  ----------------
  node2                           missing                         failed         
  node1                           missing                         failed         
Result: Package existence check failed for "compat-gcc-c++-7.3-2.96.128".
...........
...........
这之类的吧

不用管它们,这也是一个BUG,只要确认节点中都已经安装了正确版本的 compat-* 包即可。

.内存检查失败
可以忽略的错误,内存差一点并不会影响到crs的安装,只是慢一些而已。当然如果人家要求512M,你只提供了64M内存,黑黑,这个差别就太大了。

开始安装crs
rac的安装并没有太明显的主从关系,一般我们认为,在哪个上面执行了安装,哪个就是主(实际也不完全是这样,主节点安装的时候,也会自动将文件复制到其它节点的)
这里我们选择node1进行安装~~
注意,下列操作需要在视窗模式下执行哟。
注意,下列操作需要在视窗模式下执行哟。

执行安装命令
注意xhost +先,另外由于我们使用了RHEL5,并不被oracle10g所支持,因此在执行安装时需要指定-ignoreSysPrereqs跳过安装时的操作系统检查。

看到欢迎界面,点击下一步


选择安装临时目录



选择crs安装目录



环境检查


提示,并非所有的警告信息都需要我们处理,比如版本不对啊,内存不足啊之类的,可根据实际情况进行忽略,如果环境检查遇到严重错误,可以先进行修改后,再重新执行安装。

指定节点


设置网卡,这里我们指定eth0为public地址。


注意,通常配置rac只需要两块网卡即可,如果系统识别到多个,建议多余的删除,只保留两个,不然后期在创建database时可能会报错,当然你这里不删也没有关系,后面遇到报错时可以再通过命令的方式删除多余的网卡。

指定OCR的存储位置

测试环境嘛,不选择镜像了,直接放到/dev/raw/raw2去
提示:OCR大概需要至少100M空间

voting disk的存储位置


与上同理,voting大概需要至少20M的空间,这里指定存放到/dev/raw/raw1

综合看一下,没啥问题的话点击Install。



开始安装鸟


同时也在将文件复制到其它节点


要求你用root在几个节点上分别执行所列的两个脚本


建议按下列顺序执行
在 node1 上执行:/opt/ora10g/oraInventory/orainstRoot.sh;
在 node2 上执行:/opt/ora10g/oraInventory/orainstRoot.sh;
在 node1 上执行:/opt/ora10g/product/10.2.0/crs_1/root.sh;
在 node2 上执行:/opt/ora10g/product/10.2.0/crs_1/root.sh;
通常在最后一个节点执行root.sh时会遇到错误,就我们的情况而言当然就是node2~~

提示:一般常见的错误有如下三种:
.如果你碰到了这个错误:
/opt/ora10g/product/10.2.0/crs_1/jdk/jre//bin/java: error while loading shared libraries:  libpthread.so.0: cannot open shared object file: No such file or directory

可以按照如下方式解决:
===============================
修改vipca文件
[root@node2 opt]# vi /opt/ora10g/product/10.2.0/crs_1/bin/vipca
找到如下内容:
       Remove this workaround when the bug 3937317 is fixed
       arch=`uname -m`
       if [ "$arch" = "i686" -o "$arch" = "ia64" ]
       then
            LD_ASSUME_KERNEL=2.4.19
            export LD_ASSUME_KERNEL
       fi
       #End workaround
在fi后新添加一行:
unset LD_ASSUME_KERNEL

以及srvctl文件
[root@node2 opt]# vi /opt/ora10g/product/10.2.0/crs_1/bin/srvctl
找到如下内容:
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
同样在其后新增加一行:
unset LD_ASSUME_KERNEL

保存退出,然后在node2重新执行root.sh
当然,既然我们已经知道了有这个问题,建议最好在node2执行root.sh之前,首先修改vipca。

其实同时需要你改的还有$ORACLE_HOME/bin/srvctl文件,不然等装完数据库之后,srvctl命令也是会报这个错误地。要知道srvctl这么常用,如果它执行老报错,那可是相当致命啊。不过呢你现在才安装到crs,离create db还远着呢,大可以等到创建完数据库,待到需要管理时再修改该文件。

.如果你碰到了这个错误:
The given interface(s), "eth0" is not public. Public interfaces should be used to configure virtual IPs.

解决方式如下:
==============================
图形界面上运行$CRS_HOME/bin/vipca,手工重新配置rac1-vip和rac2-vip。
[root@node2 opt]# xhost +
[root@node2 opt]# /opt/ora10g/product/10.2.0/crs_1/bin/vipca


按照提示点击下一步







点击finish即可


vipca开始自动配置


全部配置完成之后,点击exit退出操作窗口。


.如果你碰到了这个错误:
Error 0(Native: listNetInterfaces:[3])
[Error 0(Native: listNetInterfaces:[3])]

解决方式如下:
===============================
[root@node2 bin]# ./oifcfg iflist
eth1  10.10.17.0
virbr0  192.168.122.0
eth0  192.168.100.0
[root@node2 bin]# ./oifcfg setif -global eth0/192.168.100.0 ublic
[root@node2 bin]# ./oifcfg setif -global eth1/10.10.10.0:cluster_interconnect
[root@node2 bin]# ./oifcfg getif
eth0  192.168.100.0  global  public
eth1  10.10.10.0  global  cluster_interconnect

然后在视窗界面重新执行vipca即可,如上b例中所示。


然后返回node1中,执行脚本的窗口,点击ok结束该窗口。


执行最后的环境配置


提示:这一步可能也会出错,没关系,并不影响最终运行,直接点击next即可。

安装完成,点击exit退出安装


如果前面配置环境检查出错
以root身份执行$ORA_CRS_HOME/cfgtoollogs/configToolFailedCommands.sh

然后执行:
[root@node1 ~]# /opt/ora10g/product/10.2.0/crs_1/bin/./crs_stat -t
Name           Type           Target    State     Host        
------------------------------------------------------------
ora.node1.gsd  application    ONLINE    ONLINE    node1      
ora.node1.ons  application    ONLINE    ONLINE    node1      
ora.node1.vip  application    ONLINE    ONLINE    node1      
ora.node2.gsd  application    ONLINE    ONLINE    node2           
ora.node2.ons  application    ONLINE    ONLINE    node2           
ora.node2.vip  application    ONLINE    ONLINE    node2      

结果显示正确就可以。
不报错的话当然就不需要执行了,如果没有错误你应该也找不到configToolFailedCommands.sh文件。




;