实验环境:VMware Workstation 10.0.0 build-1295980
Oracle Linux 6.4 64位
Oracle 11g R2(11.2.0.3)+Grid 11.2.0
准备安装
一、IP规划
127.0.0.1 localhost.localdomain localhost
#public ip
192.168.1.144 rac01
192.168.1.145 rac02
#priv ip
192.168.100.144 rac01-priv
192.168.100.145 rac02-priv
#vip ip
192.168.1.213 rac01-vip
192.168.1.214 rac02-vip
#scan ip
192.168.1.215 racscan
注意:这里在安装新建虚拟机的的时候,先把一个虚拟机环境配置好
二、进行安装配置linux环境
① 修改安装影响数据库速度的临时交换空间tmpfs(共享内存)的size值大小,默认是物理内存的一半,单位默认是kb,我们在修改的时候要用M表示(/etc/fstab)
② 修改好系统参数(/etc/hosts)添加如下内容,注意不能有下划线“_”,否则后边会报错ins-40937
192.168.1.144 rac01
192.168.1.145 rac02
192.168.100.144 rac01-priv
192.168.100.145 rac02-priv
192.168.1.213 rac01-vip
192.168.1.214 rac02-vip
192.168.1.215 racscan
③ 修改/etc/sysconfig/network文件,将hostname改成rac01,rac02否则后边会在安装rac的时候识别虚拟网卡报错ins-40937,有背景色的都是需要重点检查的。
[root@rac01-priv ~]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rac01
NOZEROCONF=yes
④ 修改网络配置文件(/etc/sysconfig/network-scripts/ifcfg-eth0)
注意eth0一般习惯连接公网,eth1连接内网,并且注意如果是从虚拟机过来的,网卡配置里边的少个DEVICE=eth1,还有就是uuid不能和第一个虚拟机的uuid重复,否则后边rac安装的时候识别不了。
⑤ 打安装oracle需要的所有系统补丁(rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel)和oracleasm,cvuqdisk相关的包
[root@rac01 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_rac01-lv_root
21294972 3028472 17184748 15% /
tmpfs 2025416 260 2025156 1% /dev/shm
/dev/sda1 495844 55761 414483 12% /boot
/dev/sr0 3634730 3634730 0 100% /media/OL6.4 x86_64 Disc 1 20130225
[root@rac01 ~]# mount /dev/sr0 //mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@rac01 ~]# cd /etc/yum.repos.d/
将系统原来的repo文件移动或者重命名
[root@rac01 yum.repos.d]# ls
packagekit-media.repo public-yum-ol6.repo
[root@rac01 yum.repos.d]# mv public-yum-ol6.repo public-yum-ol6.repo.bak
新建一个repo文件
[root@rac01 yum.repos.d]# vi iso.repo
[meida]
name=media
baseurl=file:///mnt/
enabled=1
gpgcheck=0
gpgkey=file:///mnt/
"iso.repo" [New] 6L, 81C written
[root@rac01 yum.repos.d]# yum -y install binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libgcc libstdc++ libstdc++-devel libaio libaio-devel make sysstat unixODBC unixODBC-devel
然后查询一下是否补丁安装完成
[root@rac01 yum.repos.d]# rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
binutils-2.20.51.0.2-5.36.el6.x86_64
compat-libcap1-1.10-1.x86_64
compat-libstdc++-33-3.2.3-69.el6.x86_64
gcc-4.4.7-3.el6.x86_64
gcc-c++-4.4.7-3.el6.x86_64
glibc-2.12-1.107.el6.x86_64
glibc-devel-2.12-1.107.el6.x86_64
ksh-20100621-19.el6.x86_64
libaio-0.3.107-10.el6.x86_64
libaio-devel-0.3.107-10.el6.x86_64
libgcc-4.4.7-3.el6.x86_64
libstdc++-4.4.7-3.el6.x86_64
libstdc++-devel-4.4.7-3.el6.x86_64
make-3.81-20.el6.x86_64
sysstat-9.0.4-20.el6.x86_64
unixODBC-2.2.14-12.el6_3.x86_64
unixODBC-devel-2.2.14-12.el6_3.x86_64
[root@rac01 yum.repos.d]#
显示都已经安装完成。
接下来安装oracleasm
[root@rac01 yum.repos.d]# find / -name 'oracleasm*'
/lib/modules/2.6.39-400.17.1.el6uek.x86_64/kernel/drivers/block/oracleasm
/lib/modules/2.6.39-400.17.1.el6uek.x86_64/kernel/drivers/block/oracleasm/oracleasm.ko
/media/OL6.4 x86_64 Disc 1 20130225/Packages/oracleasm-support-2.1.8-1.el6.x86_64.rpm
/mnt/Packages/oracleasm-support-2.1.8-1.el6.x86_64.rpm
[root@rac01 yum.repos.d]# rpm -ivh /mnt/Packages/oracleasm-support-2.1.8-1.el6.x86_64.rpm
warning: /mnt/Packages/oracleasm-support-2.1.8-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ########################################### [100%]
1:oracleasm-support ########################################### [100%]
[root@rac01 yum.repos.d]#
接下来安装cvuqdisk(默认6.4没有需要自己下载上传然后授权,并且创建安装oinstall)
⑥ 创建安装目录,用户和组
创建组(注意两边的用户id必须一样 )
groupadd -g 500 oinstall
groupadd -g 501 dba
groupadd -g 502 oper
groupadd -g 503 asmadmin
groupadd -g 504 asmdba
groupadd -g 505 asmoper
创建用户到组
useradd -m -u 500 -g oinstall -G asmadmin,asmdba,asmoper grid
useradd -m -u 501 -g oinstall -G dba,oper,asmdba oracle
创建文件目录/u01/app,更改组和用户,并授权
mkdir -p /u01/app
chown -R grid:oinstall /u01/app/
chmod -R 775 /u01/app/
在/u01/app创建文件目录oraInventory,更改组和用户,并授权
mkdir -p /u01/app/oraInventory/
chown -R grid:oinstall /u01/app/oraInventory/
chmod -R 775 /u01/app/oraInventory/
在/u01/app创建文件目录grid和oracle,更改组和用户,并授权
mkdir -p /u01/app/grid
chown -R grid:oinstall /u01/app/grid
chmod -R 775 /u01/app/grid/
mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle/
最后ls -all 查看一下
由于后边创建数据库概要的时候会报错,是由于目录权限错误导致所以这里提前添加授权
[root@udbs01 ~]# chmod -R 775 /u01/app/oracle/cfgtoollogs/
⑦ 修改oracle用户和grid用户的初始化参数文件.bash_profile
修改grid下的.bash_profile
export ORACLE_SID=+ASM1 # 节点2为+ASM2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/
export PATH=$ORACLE_HOME/bin:$PATH:/usr/local/bin/
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:$ORACLE_HOME/OPatch:/bin:/usr/ccs/bin:$PATH
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export TEMP=/tmp
export TMP=/tmp
export TMPDIR=/tmp
export CVUQDISK_GRP=oinstall
umask 022
修改oracle用户下的.bash_profile
export ORACLE_SID=orcl1 # 节点2为orcl2
export ORACLE_UNQNAME=orcl #这个千万别忘记了
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/
export PATH=$ORACLE_HOME/bin:$PATH:$ORA_CRS_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:$ORACLE_HOME/OPatch:/bin:/usr/ccs/bin:$PATH
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
⑧ 系统操作系统内核参数( /etc/sysctl.conf)添加,注意默认紫色背景的参数原参数文件包含必须删除掉
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
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
注意:上述参数中,kernel.shmmax需要我们修改,该参数推荐设置成物理内存的一半,由于安装crs的时候需要至少512M内存,我们按照512*1024*1024来设置,之后必须执行/sbin/sysctl -p使参数生效
⑨ 修改操作系统对grid和oracle用户对使用文件资源的限制(/etc/security/limits.conf)添加如下内容
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
⑩ 修改安全限制(/etc/pam.d/login)添加如下内容
session required pam_limits.so
11 关闭防火墙。
/etc/selinux/config 设置SELINUX为disabled
chkconfig iptables off 重启,如果不关闭,检查安装环境时遇到PRVF-7617 TCP connectivity check failed for subnet
12 删除时间同步,默认6.4 下没有 /var/run/ntpd.pid文件(此文件保存了ntp后台程序的pid),建议手工最好把虚拟机的时间和时区同步(date -s 指定时间)。需要注意的是如果要检查时间是否同步,在第一个节点rac01上用命令ssh rac02 date;date; 查看结果是否相同。时分秒不能有一秒的错误。检查是否开启了ntp服务
service ntpd status,/etc/ntp.conf文件是否删除。grid安装完成后,需要验证ctss是否处于活动状态,用grid用户登录输入
[grid@rac01 install]$ crsctl check ctss
CRS-4639: Could not contact Oracle High Availability Services
CRS-4000: Command Check failed, or completed with errors.
说明ctss服务没启用
grid用户在/u01/app/grid/product/11.2.0/crs/install目录下执行
./roothas.pl -deconfig -force -verbose
root用户执行脚本 /u01/app/grid/product/11.2.0/root.sh
该命令用来在ntp下cluvfy comp clocksync -verbose
节点间的时间同步对于Oracle来说是非常重要的,在11g版本之前往往通过搭建NTP服务器完成时间同步。在Oracle 11g中新增加了一个CTSS(Cluster Time Synchronization Services,集群时间同步服务)服务,用来完成集群节点间时间同步。在安装Grid Infrastructure过程中,如果没有发现节点有NTP服务,就会自动安装CTSS。
1. NTP时间同步服务配置
NTP是传统的时间同步服务,往往在一个企业中有一个专门的时间同步服务器,这种情况依然可以采用NTP的方式来同步节点之间的时间。
2. CTSS时间同步服务配置
11gR2版本中,Oracle推出了自己的时间同步服务,这只是在一个RAC的所有节点中有效,与其他系统的时间并不同步。如果要使用CTSS同步时间,除了要停止、禁止自动重启NTP服务外,/etc/ntp.conf配置文件也不允许存在,执行以下的步骤清除NTP服务。
(1)停止NTP服务
1 /sbin/service ntpd stop
(2)禁用NTP服务器自启动
2 chkconfig ntpd off
(3)删除或重命名NTP配置文件
3 rm /etc/ntp.conf
或者:
4 mv /etc/ntp.conf /etc/ntp.conf.bak
这样就彻底清除了NTP,在安装Grid Infrastructure的时候会自动创建CTSS。
3. CTSS检查失败
安装Grid Infrastructure的最后一步有可能出现如下报错:
5 INFO: CTSS is in Active state. Proceeding with check of clock time offsets on all nodes...
6 INFO: PRVF-9661 : Time offset is NOT within the specified limits on the following nodes:
7 INFO: "[rhel2]"
8 INFO: PRVF-9652 : Cluster Time Synchronization Services check failed
9 INFO: Post-check for cluster services setup was unsuccessful on all the nodes.
10 INFO:
11 WARNING:
12 INFO: Completed Plugin named: Oracle Cluster Verification Utility
对于出现以上错误的处理办法如下:
1)确定RAC所有节点的时区是否一致。
2)时间间隔过大会导致CTSS检查失败。因此要在执行这步之前手动调整主机的时间,确保主机间的时间是一致的。
13
添加虚拟机共享的存储,添加第一个虚拟机的硬盘,然后编辑vmx文件
disk.locking= "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
tools.syncTime ="TRUE"
scsi1:0.deviceType="disk"
注意:有时候我们虚拟机2不需要添加这个也可以识别到共享存储。
克隆复制虚拟机1,然后分别以grid和oracle用户登录,修改环境变量的+ASM2和orcl2
grid默认安装的路径不能是/u01/app/grid,必须改成/u01/app/oracle,而且必须要检查权限
数据库软件安装完成安装库,库安装完成看下能否打开,如果打不开提示
这是因为oracle9i和oracle10g中,数据库默认将使用spfile启动数据库,如果spfile不存在,则就会出现上述错误。
解决方法:将/u01/app/oracle/admin/orcl/pfile下的init.ora.423201416444文件拷贝到$ORACLE_HOME/dbs目录下
虚拟机克隆后存在的问题
1.网卡连接失败,打不开,ping的时候不通
原因其实很简单,由于系统克隆了之后网卡的MAC地址变了,而/etc/sysconfig/network-scripts/ifcfg-eth0文件中的HWADDR依然是克隆前的地址,而真正的该网卡的MAC地址就是出现的eth1的HWADDR的值,所以先把ifcfg-eth0的HWADDR值设置正确了。
其实光改ifcfg-eth0是没有用的,为什么我们没有ifcfg-eth1这个文件却会产生eth1这个网卡呢,其实问题的根源在/etc/udev/rules.d/70-persistent-net.rules 这个文件,该文件没有修改之前的信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 | [root@gc network-scripts]# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key.
# PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:4f:3c:77", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:4f:9c:99", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" |
系统在启动的时候会根据实际的网卡信息往这个文件中写入相关信息,并将其载入到内存,即便你没有相关的ifcfg-ethx文件,由于eth0的信息已经存在,所以它将其分配到eth1上,有三种方法可以解决这个问题:
1.删除/etc/udev/rules.d/70-persistent-net.rules文件,重启udev,重启网络服务
2.将ifcfg-eth0改成ifcfg-eth1,重启网络服务
3.修改/etc/udev/rules.d/70-persistent-net.rules文件,将eth1的内容删除,将正确的MAC地址,也就是ATTR{address}的值填写正确,重启udev,重启网络服务
[root@rh2 rules.d]# /sbin/start_udev
Starting udev: [ OK ]
其实还有一种方法就是修改虚拟机的vmx配置文件,里面写着网卡的MAC地址ethernet0.generatedAddress = "00:0c:29:4f:9c:99",可以根据这个值改写系统中的值,或者根据系统中的值改写虚拟机这个配置文件中值。
安装grid之前一定要检查核对,不能偷懒
强烈建议每次安装grid和oracle的时候去检查一下/u01/app下三个文件夹的所属组和用户权限是否正确,否则你会因为权限问题走很多弯路,因为后面好多错误都是权限问题导致。折腾了我好几天了。
ping各个节点,防火墙,网卡,hostname检查确认。
安装过程中出现的问题
ins41112错误
解决方法:检查四个网卡的mac地址和uuid还有是否缺少device标识,结果发现这次是因为mac地址一样导致。多半都是因为克隆虚拟机mac地址导致。
最简单的方法是,一般将克隆虚拟机的所有eth0,eth1全部删除,删除/etc/udev/rules.d/下的70-persistent-net.rules文件,外部重新添加虚拟机的网卡。重新启动系统,修改重新生成在/etc/sysconfig/network-scripts/下的网卡配置文件,添加设备名DEVICE属性,然后检查和重新生成的70-persistent-net.rules文件里边内容是否一致匹配,尤其是device的name必须和70-persistent-net.rules文件里边的name匹配。
后来我自己测试如果单独给虚拟机添加网络适配器,会自动的在/etc/sysconfig/network-scripts/下生成网卡配置信息,重启udev服务之后会自动将添加的这个网卡信息自动注册到70-persistent-net.rules文件。
不过也有可能是因为防火墙没有关闭导致。
2. 忘记修改虚拟机2 的2个用户的.bash_profile的orcl2和+ASM2
3. 忘记修改/etc/sysconfig/network的hostname为hostname为rac02
4. 防火墙即使虚拟机是关闭的,克隆过来的有时候是开的。需要再次确认检查。
ins20802错误
网上搜索查到Metalink[ID 887471]文章得出以下结论:由于配置了/etc/hosts来解析SCAN,导致未走DNS来进行SCAN的解析,爆出此错误,可以考虑忽略掉,或者删除/etc/hosts文件中的SCAN解析部分,并且再次通过nslookup验证DNS的解析是否正常即可。
grid安装完成提示crs-0184错误
[grid@rac02 ~]$ crs_stat -t
CRS-0184: Cannot communicate with the CRS daemon.
检查crs文件权限是不是属于grid,多半都是权限问题。