安装Oracle RAC
①用虚拟机搭建两台机器,操作系统都为:
[root@node1 ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5.5(Tikanga)
②内核版本为:
[root@node1 ~]# uname -r
2.6.18-194.el5
③虚拟机node1和node2放在本地D:\panjc\下,此文件夹下还得创建一个sharedisk文件夹。
每个结点我加一块磁盘给/u01,再加一块共享磁盘。加的普通磁盘为35G,共享磁盘为25G。下面看下怎么加共享磁盘。
①点击设置->存储->控制器:STAT控制器->添加虚拟硬盘->创建新的虚拟盘->VDI->固定大小->选择”sharedisk”文件夹并设置25GB大小->创建
②点击管理->虚拟介质管理器->找到刚才在sharedisk下创建的磁盘->右击修改->选择可共享
③选择node2,点击设置->存储->控制器:SATA控制器->添加虚拟硬盘->使用现有的虚拟盘->找到sharedisk文件夹下的磁盘,选择后确认
①配置两个虚拟机的两块网卡,如下图:
②配置node1的公共网卡eth0,
[root@node1 ~]# vi/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.6.10
NETMASK=255.255.255.0
GATEWAY=192.168.6.1
ONBOOT=yes
③配置node1的私有网卡eth1
[root@node1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=10.10.10.1
NETMASK=255.255.255.0
ONBOOT=yes
④重启网络服务
[root@node1 ~]# service network restart
⑤在node2中重复②~④步骤
其中,eth0中IPADDR=192.168.6.11,eth1中的IPADDR=10.10.10.2
①查看当前磁盘信息
[root@node1 ~]# fdisk –l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
…
Disk /dev/sdb: 37.5 GB, 37580963840 bytes
…
Disk /dev/sdc: 26.8 GB, 26843545600 bytes
…
部分信息省略…
可以发现sdb是将来用于分区后挂载到/u01上的,而sdc是共享磁盘。
②分区
[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-4568, default 1): 1
Last cylinder or +size or +sizeM or +sizeK(1-4568, default 4568):
Using default value 4568
…
Command (m for help): w
③创建文件系统并格式化
[root@node1 ~]# mkfs.ext3 /dev/sdb1
④创建挂载点
[root@node1 ~]# mkdir /u01
⑤配置开机挂载
[root@node1 ~]# vi /etc/fstab
添加如下信息:
/dev/sdb1 /u01 ext3 defaults 0 0
⑥挂载
[root@node1 ~]# mount /u01
此时可以df -h查看是否成功挂载
⑦node2中重复以上步骤
之所以要加一个35G的磁盘到/u01,是因为一会/u01下会安装oracle软件以及grid软件,这样空间足够。
由于建立用户组及用户一个个输入比较麻烦,于是写了两个shell脚本来实现。
[root@node1 ~]# vi user.sh
groupadd -g 200 oinstall
groupadd -g 201 dba
groupadd -g 202 oper
groupadd -g 203 asmadmin
groupadd -g 204 asmoper
groupadd -g 205 asmdba
useradd -u 200 -g oinstall -Gdba,asmdba,oper oracle
useradd -u 201 -g oinstall -Gasmadmin,asmdba,asmoper,oper grid
[root@node1 ~]# sh user.sh
为oracle和grid用户分为设置密码:
[root@node1 ~]# passwd oracle
[root@node1 ~]# passwd grid
[root@node1 ~]# vi mkdir.sh
mkdir -p /u01/app/oraInventory
chown -R grid:oinstall/u01/app/oraInventory/
chmod -R 775 /u01/app/oraInventory/
mkdir -p /u01/11.2.0/grid
chown -R grid:oinstall /u01/11.2.0/grid/
chmod -R 775 /u01/11.2.0/grid/
mkdir -p /u01/app/oraInventory/
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/cfgtoollogs
mkdir -p/u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
[root@node1 ~]# sh mkdir.sh
[root@node1 ~]# vi /etc/hosts
127.0.0.1 localhost
192.168.6.10 node1 --公共网卡
192.168.6.9 node1-vip --此地址必须要与公共网卡同网段(客户端的tns中可以用此址,好处:可以漂移)
10.10.10.1 node1-priv
192.168.6.11 node2
192.168.6.12 node2-vip
10.10.10.2 node2-priv
192.168.6.15 rac_scan --真的rac环境需要一个dns服务器,以此解析出三个ip(ip1,ip2,ip3)
[root@node1 ~]# vi /etc/sysctl.conf
添加如下内容:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
使内核参数修改生效
[root@node1 ~]# sysctl –p
[root@node1 ~]# vi /etc/security/limits.conf
添加如下内容:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
[root@node1 ~]# vi /etc/pam.d/login
添加如下内容:
session required /lib/security/pam_limits.so
[root@node1 ~]# vi /etc/profile
添加如下内容:
if [ $USER = "oracle" ]||[ $USER= "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
[root@node1 ~]# chkconfig ntpd off
[root@node1 ~]# mv /etc/ntp.conf/etc/ntp.conf.bak
[root@node1 ~]# su – oracle
[oracle@node1 ~]$ vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startupprograms
export EDITOR=vi
export ORACLE_SID=prod1
export ORACLE_BASE=/u01/app/oracle
exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
exportPATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
umask 022
同理,切成grid用户,修改环境变量
[oracle@node1 ~]$ su – grid
[grid@node1 ~]$ vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startupprograms
export EDITOR=vi
export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/11.2.0/grid
export GRID_HOME=/u01/11.2.0/grid
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export THREADS_FLAG=native
exportPATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
umask 022
Node2中的配置与node1几乎相同,可以按照第三至第十一步配置,也可以使用scp命令直接从node1拷贝到Node2。
[root@node1 ~]#scp user.sh node2:~
[root@node1 ~]#scp mkdir.sh node2:~
[root@node2 ~]#sh user.sh
[root@node2 ~]#sh mkdir.sh
[root@node2 ~]#passwd oracle
[root@node2 ~]#passwd grid
[root@node1 ~]#scp /etc/hosts node2:/etc/hosts
[root@node1 ~]#scp /etc/sysctl.conf node2:/etc/sysctl.conf
[root@node2 ~]#cat /etc/sysctl.conf
[root@node1 ~]#scp /etc/security/limits.conf node2:/etc/security/limits.conf
[root@node1 ~]#scp /etc/pam.d/login node2:/etc/pam.d/login
[root@node2 ~]#chkconfig ntpd off
[root@node2 ~]# mv/etc/ntp.conf /etc/ntp.conf.bak
在修改oracle和grid的环境变量时,注意node2中
exportORACLE_SID=prod2
exportORACLE_SID=+ASM2
[root@node1 ~]# fdisk /dev/sdc
…
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
Last cylinder or +size or +sizeM or +sizeK(1-3263, default 3263): +1024M
…
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (126-3263, default 126):
Using default value 126
Last cylinder or +size or +sizeM or +sizeK(126-3263, default 3263):
Using default value 3263
…
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (126-3263, default 126):
Using default value 126
Last cylinder or +size or +sizeM or +sizeK(126-3263, default 3263): +1024M
按照这个步骤,一共分三个1GB,两个5GB和两个3GB的扩展磁盘。这里的实验分区结果如下,最后多了点磁盘,也一块分区,不浪费。
Device Boot Start End Blocks Id System
/dev/sdc1 1 125 1004031 83 Linux
/dev/sdc2 126 3263 25205985 5 Extended
/dev/sdc5 126 250 1004031 83 Linux
/dev/sdc6 251 375 1004031 83 Linux
/dev/sdc7 376 998 5004216 83 Linux
/dev/sdc8 999 1621 5004216 83 Linux
/dev/sdc9 1622 1995 3004123+ 83 Linux
/dev/sdc10 1996 2369 3004123+ 83 Linux
/dev/sdc11 2370 2432 506016 83 Linux
/dev/sdc12 2433 3263 6674976 83 Linux
现在切换到node2
[root@node2 ~]# fdisk –l
因为是共享磁盘,所以node2里也有分区信息。
去OTN下载ASM软件包。包括如下几个包:
[root@node1 asm]# ll
total 236
-rwxr--r-- 1 500 500 130018 May 9 2012oracleasm-2.6.18-194.el5-2.0.5-1.el5.i686.rpm
-rwxr--r-- 1 500 500 13929 Apr 11 2010 oracleasmlib-2.0.4-1.el5.i386.rpm
-rwxr--r-- 1 500 500 85382 Apr 11 2010 oracleasm-support-2.1.3-1.el5.i386.rpm
其中第一个包的内核参数必须和你的linux内核完全一样。下面安装:
[root@node1 asm]# rpm -ivh *
同理,把ASM相应的包拷贝到node2
[root@node1 soft]# scp -r asmnode2:/home/oracle
在node2也安装这几个rpm包
[root@node1 soft]# service oracleasmconfigure
…
Default user to own the driver interface[]: grid
Default group to own the driver interface[]: asmadmin
Start Oracle ASM library driver on boot(y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n)[y]: y
…
同样,在node2做相同操作
首先fdisk –l查看下当前磁盘状态,一会建立时一一对应。
[root@node1 ~]# fdisk –l
…
Disk /dev/sdc: 26.8 GB, 26843545600 bytes
255 heads, 63 sectors/track, 3263 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 125 1004031 83 Linux
/dev/sdc2 126 3263 25205985 5 Extended
/dev/sdc5 126 250 1004031 83 Linux
/dev/sdc6 251 375 1004031 83 Linux
/dev/sdc7 376 998 5004216 83 Linux
/dev/sdc8 999 1621 5004216 83 Linux
/dev/sdc9 1622 1995 3004123+ 83 Linux
/dev/sdc10 1996 2369 3004123+ 83 Linux
/dev/sdc11 2370 2432 506016 83 Linux
/dev/sdc12 2433 3263 6674976 83 Linux
好了,现在正式创建asm磁盘。
[root@node1 ~]# service oracleasmcreatedisk OCR_VOTE1 /dev/sdc1
[root@node1 ~]# service oracleasmcreatedisk OCR_VOTE2 /dev/sdc5
[root@node1 ~]# service oracleasmcreatedisk OCR_VOTE3 /dev/sdc6
[root@node1 ~]# service oracleasmcreatedisk ASM_DATA1 /dev/sdc7
[root@node1 ~]# service oracleasmcreatedisk ASM_DATA2 /dev/sdc8
[root@node1 ~]# service oracleasmcreatedisk ASM_FLA1 /dev/sdc9
[root@node1 ~]# service oracleasmcreatedisk ASM_FLA2 /dev/sdc10
现在查看一下asm磁盘情况。
[root@node1 ~]# service oracleasm listdisks
ASM_DATA1
ASM_DATA2
ASM_FLA1
ASM_FLA2
OCR_VOTE1
OCR_VOTE2
OCR_VOTE3
由于我在node1中创建了asm磁盘,同样,node2也要创建,这里,只要在node2中扫描一下就可以了。
[root@node2 ~]# service oracleasm scandisks
在node2中再次查看asm磁盘情况,service oracleasm listdisks,可以发现和node1中的状态是一样的。
由于rac中,结点间的软件是由一个结点安装完后再拷贝到另一个结点去的,所以在拷贝时,必须使得两个结点间互相信任,通俗讲就是不需要密码就能来回拷贝,下面看下怎么配置主机信任关系。
[root@node1 ~]#su – oracle
[oracle@node1~]$ mkdir .ssh
[root@node2 ~]#su – oracle
[oracle@node2~]$ mkdir .ssh
[oracle@node1~]$ ssh-keygen -t rsa
…回车下去…
[oracle@node1~]$ ssh-keygen -t dsa
…回车下去…
[oracle@node2~]$ ssh-keygen -t rsa
…回车下去…
[oracle@node2~]$ ssh-keygen -t dsa
…回车下去…
[oracle@node1~]$ cat .ssh/id_rsa.pub>>.ssh/authorized_keys
[oracle@node1~]$ cat .ssh/id_dsa.pub>>.ssh/authorized_keys
[oracle@node1~]$ ssh node2 cat .ssh/id_rsa.pub>>.ssh/authorized_keys
[oracle@node1~]$ ssh node2 cat .ssh/id_dsa.pub>>.ssh/authorized_keys
[oracle@node1~]$ scp .ssh/authorized_keys node2:~/.ssh
下面开始相互建立,对自己和对node2一起通信。
[oracle@node1~]$ ssh node2 date
[oracle@node1~]$ ssh node2-priv date
[oracle@node1~]$ ssh node1 date
[oracle@node1~]$ ssh node1-priv date
同样,在node2也做这些操作
[oracle@node2~]$ ssh node1 date
[oracle@node2~]$ ssh node1-priv date
[oracle@node2~]$ ssh node2 date
[oracle@node2~]$ ssh node2-priv date
再切入grid用户,再次做以上操作。
[oracle@node1~]$ su – grid
[grid@node1 ~]$mkdir .ssh
[oracle@node2~]$ su – grid
[grid@node2 ~]$mkdir .ssh
[grid@node1 ~]$ssh-keygen -t rsa
[grid@node1 ~]$ssh-keygen -t dsa
[grid@node2 ~]$ssh-keygen -t rsa
[grid@node2 ~]$ssh-keygen -t dsa
[grid@node1 ~]$cat .ssh/id_rsa.pub >> .ssh/authorized_keys
[grid@node1 ~]$cat .ssh/id_dsa.pub >> .ssh/authorized_keys
[grid@node1 ~]$ssh node2 cat .ssh/id_rsa.pub >> .ssh/authorized_keys
[grid@node1 ~]$ssh node2 cat .ssh/id_dsa.pub >> .ssh/authorized_keys
[grid@node1 ~]$scp .ssh/authorized_keys node2:~/.ssh
[grid@node1 ~]$ssh node2 date
[grid@node1 ~]$ssh node2-priv date
[grid@node1 ~]$ssh node1 date
[grid@node1 ~]$ssh node1-priv date
[grid@node2 ~]$ssh node1 date
[grid@node2 ~]$ssh node1-priv date
[grid@node2 ~]$ssh node2 date
[grid@node2 ~]$ssh node2-priv date
去网上下载grid软件,我这里是这个版本
[root@node1 soft]# ll
total 3188280
drwxr-xr-x 2 500 500 4096 Feb 24 10:04 asm
-rwxr--r-- 1 500 500 1285396902 Oct 26 2011 linux_11gR2_database_1of2.zip
-rwxr--r-- 1 500 500 995359177 Oct 26 2011 linux_11gR2_database_2of2.zip
-rwxr--r-- 1 500 500 980831749 Apr 14 2012 linux_11gR2_grid.zip
下面解压linux_11gR2_grid.zip
[root@node1 soft]# unziplinux_11gR2_grid.zip
解压完了之后,要以grid 用户的身份校验安装环境(在grid的安装软件包目录下)
[grid@node1 grid]$ ./runcluvfy.sh stage-pre crsinst -n node1,node2 -fixup –verbose
完了之后有几个包是failed,我们要把它们安装上
这里使用yum来安装
[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# cprhel-debuginfo.repo yum.repo
[root@node1 yum.repos.d]# mvrhel-debuginfo.repo rhel-debuginfo.repo.bak
[root@node1 yum.repos.d]# vi yum.repo
[Base]
name=Red Hat Enterprise Linux
baseurl=file:///media/Server
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
挂上光盘后
[root@node1 ~]# mount /dev/cdrom /media/
[root@node1 ~]# yum install libaio* -y
[root@node1 ~]# yum install syssta* -y
[root@node1 ~]# yum install unixO* -y
[root@node1 ~]# yum install -y vnc*
[root@node1 yum.repos.d]# scp yum.reponode2:/etc/yum.repos.d/
以上的包在也node2上装一遍
[root@node1 ~]#reboot
[root@node1 ~]# vncserver
用grid用户登录redhat,下面在图形化界面操作
[grid@node1 ~]$ vncviewer node1:5901
…
[root@node1 ~]xhost +
[root@node1 ~]su – grid
[root@node1 ~]cd /soft/grid
[grid@node1 ~]./runInstaller
① Install and Configure GridInfrastructure for a Cluster
② Advanced Installation
③ English
⑤ 添加node2和node2-vip,结果如下
⑦ 选择ASM
⑧
⑨
⑩
⑪
⑫
⑬
⑯ Finish,安装…
⑰ 按照提示在node1和node2中分别跑两个脚本,结束安装
⑱ 修改环境变量[root@node1 ~]# vi /etc/profile,两个结点都添加exportPATH=$PATH:/u01/11.2.0/grid/bin,然后[root@node1 ~]# source /etc/profile
[root@node1 ~]# cd /soft
[root@node1 soft]# ls -l
total 3188284
drwxr-xr-x 2 500 500 4096 Feb 24 10:04 asm
drwxr-xr-x 8 root root 4096 Aug 19 2009 grid
-rwxr--r-- 1 500 500 1285396902 Oct 26 2011linux_11gR2_database_1of2.zip
-rwxr--r-- 1 500 500 995359177 Oct 26 2011 linux_11gR2_database_2of2.zip
-rwxr--r-- 1 500 500 980831749 Apr 14 2012 linux_11gR2_grid.zip
[root@node1 soft]# unziplinux_11gR2_database_1of2.zip
[root@node1 soft]# unzip linux_11gR2_database_2of2.zip
[root@node1 soft]# chown -R oracle:oinstalldatabase/
[root@node1 ~]# su - oracle
[oracle@node1 ~]$ cd /soft/database/
[oracle@node1 database]$ ./runInstaller
[oracle@node1 database]$ su - grid
Password:
[grid@node1 ~]$ asmca
建立数据库之前查看磁盘组是否都被mount。
[root@node1 ~]# su - grid
[grid@node1 ~]$ sqlplus / as sysdba
SQL> desc v$asm_diskgroup
Name Null? Type
----------------------------------------- ------------------------------------
GROUP_NUMBER NUMBER
NAME VARCHAR2(30)
SECTOR_SIZE NUMBER
BLOCK_SIZE NUMBER
ALLOCATION_UNIT_SIZE NUMBER
STATE VARCHAR2(11)
TYPE VARCHAR2(6)
TOTAL_MB NUMBER
FREE_MB NUMBER
HOT_USED_MB NUMBER
COLD_USED_MB NUMBER
REQUIRED_MIRROR_FREE_MB NUMBER
USABLE_FILE_MB NUMBER
OFFLINE_DISKS NUMBER
COMPATIBILITY VARCHAR2(60)
DATABASE_COMPATIBILITY VARCHAR2(60)
VOTING_FILES VARCHAR2(1)
SQL> select group_number,name,state fromv$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ -----------------------------------------
1 OCR_VOTE MOUNTED
2 DG1 MOUNTED
3 FLA1 MOUNTED
同理查看Node2磁盘组Mount状态。
[root@node2 ~]# su - grid
[grid@node2 ~]$ sqlplus / as sysdba
f line ignored.
SQL> select group_number,name,state fromv$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ -----------------------------------------
1 OCR_VOTE MOUNTED
0 DG1 DISMOUNTED
3 FLA1 MOUNTED
发现dg1没有被mount上,所以手动mount。
SQL> conn /as sysasm
Connected.
SQL> alter diskgroup dg1 mount;
Diskgroup altered.
[oracle@node1 ~]$ dbca
⑦ 使用grid用户netca配置监听后继续