在RHEL6.0搭建Oracle 11gR2 RAC生产环境
[backcolor=white]在RHEL6.0搭建Oracle 11gR2 RAC生产环境
【背景】昨天开发要求我给他们在Red Hat EnterpriseLinux 6.0上搭建一套两节点的Oracle11gR2 RAC,用来做客服系统使用。以前大部分都在AIX上安装Oracle RAC,很少在Linux上安装Oracle RAC.虽然在操作上没有什么问题,但是有个文档参考确实方便一点。在安装的过程中自己整理了一下这个安装手册,方便在以后使用。一、环境检查
1.检查硬件配置
检查内存:
[root@rac1 ~]# grep MemTotal /proc/meminfo 检查交换空间
[root@rac1 ~]# grep SwapTotal /proc/meminfo 检查临时文件目录(至少应有400M空闲空间)
[root@rac1 ~]# df -m /tmp 检查文件系统空间
[root@rac1 ~]# df -m 检查操作系统内核版本必须是2.6.18以上
[root@rac1 ~]# uname -r 关闭SELinux
[root@rac1 ~]# vi /etc/selinux/config,
将SELINUX值改为 “SELINUX=disabled”.
如果原来是enabled,改为disabled,需要重启
2.配置ntpd
[root@rac1 ~]# service ntpd stop
Shutting downntpd: [ OK ]
[root@rac1 ~]# chkconfig ntpd off
[root@rac1 ~]# mv /etc/ntp.conf /etc/ntp.conf.orig
[root@rac1 ~]# rm /var/run/ntpd.pid If you are using NTP,you must add the “-x” option into the following line in the“/etc/sysconfig/ntpd” file.
如果要使用NTP,你必须添加-x参数到/etc/sysconfig/ntpd文件中
OPTIONS=”-x -u ntp:ntp -p /var/run/ntpd.pid”Then restart NTP. [root@rac1 ~]# servicentpd restart3.检查Oracle必须要安装的包
我们可以通过下面这个命令来检查,缺少那个包就安装哪个包:
[root@rac1 ~]#rpm -q binutils compat-db control-center gcc gcc-c++ glibcglibc-common gnome-libs libstdc++ libstdc++-devel make pdksh sysstatxscreensaver libaio openmotif21
挂载光盘
[root@rac1 ~]# mkdir /media/disk
[root@rac1 ~]# mount /dev/cdrom /media/disk
mount: block device /dev/cdrom is write-protected, mountingread-only
如果少了哪些包,直接在光盘Server/Packages/目录下找到改包安装上就可以了。
rpm 包安装:
rpm -Uvh *.rpm –force –nodeps
4.官方安装说明必须要的包
# From Oracle Linux 6 DVD
cd /media/cdrom/Server/Packages
#rpm -Uvh binutils-2.*
#rpm -Uvh compat-libstdc++-33*
#rpm -Uvh elfutils-libelf-0.*
#rpm -Uvh libaio-0.*
rpm -Uvh libaio-devel-0.*
#rpm -Uvh sysstat-9.*
#rpm -Uvh glibc-2.*
#rpm -Uvh glibc-common-2.*
#rpm -Uvh glibc-devel-2.* glibc-headers-2.*
rpm -Uvh ksh-2*
#rpm -Uvh make-3.*
#rpm -Uvh libgcc-4.*
#rpm -Uvh libstdc++-4.*
rpm -Uvh libstdc++-4.*.i686*
#rpm -Uvh libstdc++-devel-4.*
#rpm -Uvh gcc-4.*x86_64*
#rpm -Uvh gcc-c++-4.*x86_64*
#rpm -Uvh –allfiles elfutils-libelf-0*x86_64*elfutils-libelf-devel-0*x86_64*
rpm -Uvh elfutils-libelf-0*i686* elfutils-libelf-devel-0*i686*
rpm -Uvh libtool-ltdl*i686*
rpm -Uvh ncurses*i686*
rpm -Uvh readline*i686*
rpm -Uvh unixODBC*
cd /
eject二、系统配置
1.配置hosts(两个节点都要执行)
[root@rac1 ~]# vi /etc/hosts
#Public
192.168.1.171 rac1 rac1.localdomain
192.168.1.173 rac2 rac2.localdomain#Private
172.168.1.191 rac1-priv rac1-priv.localdomain
172.168.1.192 rac2-priv rac2-priv.localdomain#Virtual
192.168.1.172 rac1-vip rac1-vip.localdomain
192.168.1.174 rac2-vip rac2-vip.localdomain#SCAN
192.168.1.176 rac-cluster rac-cluster-scan
2.创建目录、用户和赋予权限(两个节点都要执行)
[root@rac1 ~]# groupadd -g 5000 asmadmin
[root@rac1 ~]# groupadd -g 5001 asmdba
[root@rac1 ~]# groupadd -g 5002 asmoper
[root@rac1 ~]# groupadd -g 6000 oinstall
[root@rac1 ~]# groupadd -g 6001 dba
[root@rac1 ~]# groupadd -g 6002 oper
[root@rac1 ~]# useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper -d/home/grid -s /bin/bash -c “Grid Infrastructure Owner” grid
[root@rac1 ~]# useradd -m -u 1101 -g oinstall -G dba,oper,asmdba -d/home/oracle -s /bin/bash -c “Oracle Software Owner” oracle
[root@rac1 ~]# mkdir -p /oracle/app/grid
[root@rac1 ~]# mkdir -p /oracle/app/11.2.0/grid
[root@rac1 ~]# mkdir -p /oracle/app/oracle
[root@rac1 ~]# passwd oracle
[root@rac1 ~]# passwd grid
[root@rac1 ~]# chown -R grid:oinstall /oracle/app/grid
[root@rac1 ~]# chmod -R 775 /oracle/app/grid
[root@rac1 ~]# chown -R grid:oinstall /oracle/app/11.2.0/grid
[root@rac1 ~]# chmod -R 775 /oracle/app/11.2.0/grid
[root@rac1 ~]# chown -R oracle:oinstall /oracle/app/oracle
[root@rac1 ~]# chmod -R 775 /oracle/app/oracle3.验证用户 nobody 存在
安装软件之前,执行以下过程,以验证在两个Oracle RAC 节点上存在用户nobody:
要确定该用户是否存在,输入以下命令:
[root@rac1 ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
如果该命令显示了nobody 用户的信息,则无需创建该用户。
如果用户 nobody 不存在,则输入以下命令进行创建:
[root@rac1 ~]# /usr/sbin/useradd nobody
在集群中的所有其他Oracle RAC 节点上重复此过程。4.配置环境变量
rac1节点上配置Oracle环境变量
[oracle@rac1 ~]# vi .bash_profile
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIRORACLE_HOSTNAME=rac1.localdomain;export ORACLE_HOSTNAME
ORACLE_UNQNAME=RAC; export ORACLE_UNQNAME
ORACLE_BASE=/oracle/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=RAC1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
BASE_PATH=/usr/sbin:$PATH; export BASE_PATH
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATHLD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; exportCLASSPATHif [ $USER ="oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
firac2节点上配置Oracle环境变量
[oracle@rac2 ~]# vi .bash_profile
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIRORACLE_HOSTNAME=rac2.localdomain;export ORACLE_HOSTNAME
ORACLE_BASE=/oracle/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=RAC2; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
BASE_PATH=/usr/sbin:$PATH; export BASE_PATH
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATHLD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; exportCLASSPATHif [ $USER ="oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
rac1节点上配置Grid环境变量
[grid@rac1 ~]# vi .bash_profile
#Grid Settings
CRS_HOME=/oracle/app/11.2.0/grid
ORACLE_BASE=/oracle/app/grid
ORACLE_SID=+ASM1
PATH=$CRS_HOME/bin:$PATH:$Home/bin
export PATH CRS_HOME ORACLE_BASE ORACLE_SIDrac2节点上配置Grid环境变量
[grid@rac2 ~]# vi .bash_profile
#Grid Settings
CRS_HOME=/oracle/app/11.2.0/grid
ORACLE_BASE=/oracle/app/grid
ORACLE_SID=+ASM2
PATH=$CRS_HOME/bin:$PATH:$Home/bin
export PATH CRS_HOME ORACLE_BASE ORACLE_SID5.编辑/etc/sysctl.conf(两节点都要运行)
[root@rac1 ~]# vi /etc/sysctl.conffs.file-max = 6815744
kernel.msgmni = 2878
kernel.msgmax = 8192
kernel.msgmnb = 65536
kernel.sem = 250 32000 100 142
kernel.shmmni = 4096
# 物理内存除以pagesize
kernel.shmall = 1073741824
# 物理内存的一半
kernel.shmmax = 4294967295
kernel.sysrq = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 3145728
net.ipv4.ip_local_port_range = 9000 65500
vm.min_free_kbytes = 51200让配置生效:
/sbin/sysctl -p可以使用如下命令来查看某个参数值:
/sbin/sysctl -a | grep
[root@rac1 ~]# vi /etc/security/limits.conforacle 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 3500000
oracle hard memlock 3500000grid soft nofile 131072
grid hard nofile 131072
grid soft nproc 131072
grid hard nproc 131072
grid soft core unlimited
grid hard core unlimited
grid soft memlock 3500000
grid hard memlock 3500000三、配置共享存储配置共享存储请参考[url]http://www.tianqingbo.com/rhel-udev-asm.html
四、解压介质进行安装
这些介质都是最新的。可以从MOS官方下载
[root@rac1 ~]unzip p10404530_112030_Linux-x86-64_1of7.zip
[root@rac1 ~]unzip p10404530_112030_Linux-x86-64_2of7.zip
[root@rac1 ~]unzip p10404530_112030_Linux-x86-64_3of7.zip在RHEL6.0上用UDEV SCSI配置ASM 在RHEL6.上用UDEV配置ASM,参考了这篇文章
How to use udev for Oracle ASM inOracle Linux 6不同的操作系统或者同一个操作系统的不同版本,scsi_id的用法不一样。我这里的环境主要是RHEL6.0
步骤如下:
1. 编辑/etc/scsi_id.config文件,如果该文件不存在,则创建该文件,添加如下行:[backcolor=white][root@rac1 ~]# vi /etc/scsi_id.config
options=–whitelisted –replace-whitespace2. 获取需要绑定为ASM Disk的磁盘uuid,比如我们要使用/dev/sdc和/dev/sdd作为ASM磁盘,那么:[backcolor=white][root@rac1 ~]# scsi_id –whitelisted –replace-whitespace –device=/dev/sdc1ATA_VBOX_HARDDISK_VB36a9e548-1838194a[backcolor=white][root@rac1 ~]# scsi_id –whitelisted –replace-whitespace –device=/dev/sdd1ATA_VBOX_HARDDISK_VB9808fc7f-cdf350303.编写udev rules文件,PROGRAM中写scsi_id命令,RESULT中写上面命令中返回的uuid,这跟OEL5中没什么区别,只是scsi_id命令的语法发生变化了。[backcolor=white][root@rac1 ~]# vi /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL==”sd*”, SUBSYSTEM==”block”, PROGRAM==”/sbin/scsi_id –whitelisted–replace-whitespace –device=/dev/$name”,RESULT==”1ATA_VBOX_HARDDISK_VB36a9e548-1838194a”, NAME=”asm-disk1″,OWNER=”grid”, GROUP=”asmadmin”, MODE=”0660″
KERNEL==”sd*”, SUBSYSTEM==”block”, PROGRAM==”/sbin/scsi_id –whitelisted–replace-whitespace –device=/dev/$name”,RESULT==”1ATA_VBOX_HARDDISK_VB9808fc7f-cdf35030″, NAME=”asm-disk2″,OWNER=”grid”, GROUP=”asmadmin”, MODE=”0660″4. 用udevadm进行测试,注意udevadm命令不接受/dev/sdc这样的挂载设备名,必须是使用/sys/block/sdc这样的原始设备名。[backcolor=white][root@rac1 ~]# udevadm test /sys/block/sdc
[root@rac1 ~]# udevadm info –query=all –path=/sys/block/sdc
[root@rac1 ~]# udevadm info –query=all –name=asm-disk1在显示中,有类似如下输出,表示测试正确,/dev/sdc设备在udev启动以后将会绑定为/dev/asm-disk1:udevadm_test:UDEV_LOG=6
udevadm_test:DEVPATH=/devices/pci0000:00/0000:00:0d.0/host4/target4:0:0/4:0:0:0/block/sdc
udevadm_test: MAJOR=8
udevadm_test: MINOR=32
udevadm_test: DEVNAME=/dev/asm-disk1
udevadm_test: DEVTYPE=disk
udevadm_test: ACTION=add
udevadm_test: SUBSYSTEM=block5. 启动udev[backcolor=white][root@rac1 ~]# /sbin/start_udev6. 检查设备是否正确绑定[backcolor=white][root@rac1 ~]# ls -l /dev/asm*brw-rw—- 1 gridasmadmin 8, 32 Oct 26 21:24 /dev/asm-disk1
brw-rw—- 1 grid asmadmin 8, 48 Oct 26 21:17 /dev/asm-disk27.使用脚本生成99-oracle-asmdevices.rules[backcolor=white]for i in b c ;
do
echo “KERNEL==\”sd*\”, BUS==\”scsi\”, PROGRAM==\”/sbin/scsi_id –whitelisted–replace-whitespace –device=/dev/\$name\”, RESULT==\”`/sbin/scsi_id–whitelisted –replace-whitespace –device=/dev/sd$i`\”, NAME=\”asm-disk$i\”,OWNER=\”grid\”, GROUP=\”asmadmin\”, MODE=\”0660\”" >> /etc/udev/rules.d/99-oracle-asmdevices.rules
done