Oracle RAC数据库的安装相对单机数据库复杂一些,因为整个安装过程涉及网络、操作系统、存储等方面,一个环节设置不当,都可能导致安装失败。本文将详细的讲述RAC数据库的安装过程。
1、 安装前的系统配置需求
安装Oracle Rac数据库需要的组件可以分为软硬件两部分,下面是一个软硬件推荐配置:
为了方便安装RAC数据库,在安装操作系统时,建议选择如下系统包:
更详细的拓扑结构信息,参看下图
Oracle Rac数据库涉及到公用网络和私有网络,因此要做网络划分和IP地址规划,下表列出了要安装的RAC数据库对应的IP地址、主机名以及网络连接类型:
2、设置数据库安装资源
安装RAC数据库需要的软件包分为三个部分,分别是oracle RAC安装程序包、Oracle ASMLib工具包以及系统补丁包。这里Oracle的安装版本为oracle11g,详细的软件包信息如下:
(1)Oracle 11g Release 1 (11.1.0.6.0)软件包
下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/111060-linuxsoft-085130.html
软件包名称:
linux_11gR1_database_1013.zip
linux_x86_11gR1_clusterware.zip
软件包说明:总共需要下载两个安装程序,一个是Oracle Rac安装程序包,另一个是Oracle ClusterWare安装程序包。
(2)Oracle ASMLib工具包
下载地址:http://www.oracle.com/technetwork/topics/linux/downloads/rhel5-084877.html
软件包名称:
oracleasmlib-2.0.4-1.el5.i386.rpm
oracleasm-2.6.18-194.11.1.el5-2.0.5-1.el5.i686.rpm
oracleasm-support-2.1.3-1.el5.i386.rpm
软件包说明:这三个软件包是使用ASM存储管理方式必须的驱动工具包。
(3)系统补丁包
下载地址:http://www.idevelopment.info/data/Oracle/DBA_tips/Oracle11gRAC/Install11gR1RACOnCentOS51/RPMS/redhat-release-5-1.0.el5.centos.1.i386.rpm
软件包名称:redhat-release-5-1.0.el5.centos.1.i386.rpm
软件包说明:由于Centos不在Oracle支持平台之列,所以安装检测时无法通过的,通过安装这个软件包,可以使安装检测顺利通过。
3、配置主机解析文件
为了使每个主机间可以正常通信,需要在每个节点上修改本地解析文件,即/etc/hosts文件,在两个节点上添加如下配置信息:
- 192.168.12.231 node-rac1
- 192.168.12.232 node-rac2
- 192.168.12.230 node-vip1
- 192.168.12.240 node-vip2
- 10.10.10.1 node-priv1
- 10.10.10.2 node-priv2
4、检查所需软件包
在每个节点上执行相同的操作:
执行下面的命令:
rpm -q make binutils libaio-devel libaio elfutils-libelf-devel compat-libstdc++-33 libgcc gcc gcc-c++ glibc sysstat libstdc++ libstdc++-devel unixODBC-devel unixODBC
如果出现某个软件包没有安装,请安装该软件包。
5、配置系统内核参数
由于Linux的内核参数信息都存在内存中,可以通过命令直接修改,并且修改后直接生效,但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此将内核的参数配置写入这个文件中,是一个比较好的选择。
Oracle对Linux系统内核参数有严格的要求,如果设置不当,就会导致安装失败,编辑/etc/sysctl.conf文件,修改后的参数配置如下所示:
- net.ipv4.ip_forward = 0
- net.ipv4.conf.default.rp_filter = 1
- net.ipv4.conf.default.accept_source_route = 0
- kernel.sysrq = 0
- kernel.core_uses_pid = 1
- net.ipv4.tcp_syncookies = 1
- kernel.msgmnb = 65536
- kernel.msgmax = 65536
- net.core.rmem_default = 4194304
- net.core.rmem_max = 4194304
- net.core.wmem_default = 262144
- net.core.wmem_max = 262144
- kernel.shmmax = 1073741823
- kernel.sem = 250 32000 100 128
- fs.file-max = 65536
- net.ipv4.ip_local_port_range = 1024 65000
下面简单讲述下常用的几个内核参数的含义:
kernel.shmmax:表示单个共享内存段的最大值,以字节为单位,此值一般为物理内存一半,不过大一点也没关系,这里设定的为1G。
kernel.shmmni:表示单个共享内存段的最小值,一般为4KB,即4096bit
kernel.shmall:表示可用共享内存的总量,单位是页,在32位系统上一页等于4k,也就是4096字节。
fs.file-max:表示文件句柄的最大数量。文件句柄表示在linux系统中可以打开的文件数量。
net.ipv4.ip_local_port_range:表示端口的范围,为指定的内容。
kernel.sem:用来设置Linux的信号量。
可以使用以下命令查看:
[root@node-rac1 rac]#cat /proc/sys/kernel/sem
250 32000 32 128
对于输出的这四个值的含义,分别介绍如下:
SEMMSL:此参数用于控制每个信号集的最大信号数,Oracle建议将SEMMNI设置为不小于100。
SEMMNS:此参数用于控制整个Linux系统中信号(而不是信号集)的最大数量。
SEMOPM:此参数用于控制每个semop系统调用可以执行的信号操作数,Oracle建议将SEMOPM的值设置为不少于100
SEMMNI:此内核参数用于控制整个Linux系统中信号集的最大数量,Oracle建议将SEMMNI设置为不小于100。
6、设置 Shell对Oracle用户的限制
以root用户身份,在每个节点上执行相同的操作。
首先,修改/etc/security/limits.conf,在文件最后添加如下内容:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
接着,修改/etc/pam.d/login,在文件最后添加如下内容:
session required /lib/security/pam_limits.so
最后,修改/etc/profile,在文件最后添加如下内容:
- if [ $USER = "oracle" ]; then
- if [ $SHELL = "/bin/ksh" ]; then
- ulimit -p 16384
- ulimit -n 65536
- else
- ulimit -u 16384 -n 65536
- fi
- fi
所有修改完毕,重启所有Linux系统。
7、配置hangcheck-timer内核模块
以root用户身份执行,在所有节点上做如下配置。
查看模块是否存在:
[root@node-rac1 ~]#find /lib/modules -name "hangcheck-timer.ko"
接着,编辑/etc/modprobe.conf:
[root@node-rac1 ~]# vi /etc/modprobe.conf
在文件的末尾加入一行:
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
然后,将hangcheck-timer模块配置为自启动:
[root@node-rac1 ~]#vi /etc/rc.d/rc.local
在文件的末尾加入一行:
/sbin/modprobe hangcheck_timer
接着,启动hangcheck:
[root@node-rac1 ~]# /sbin/modprobe hangcheck_timer
最后,检查hangcheck是否成功启动:
[root@node-rac1 ~]#grep hangcheck /var/log/messages | tail -2
Aug 26 19:08:17 Mysql1 kernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 30 seconds, margin is 180 seconds).
如果显示上面输出信息说明已经成功启动hangcheck。
8、配置系统安全设置
由于在安装RAC数据库时,安装进程需要在每个节点间传送数据,这就要求每个节点间是互信任的,因此,最简单的方式就是关闭系统的安全限制,常用的方式是关闭Linux系统的iptables以及selinux,在每个节点上执行相同的操作。
关闭iptables很简单,可以直接执行如下命令:
[root@node-rac1 ~]# iptables –F
[root@node-rac1 ~]# /etc/init.d/iptables save
最后,将selinux禁用即可,也就是修改/etc/selinux/config文件,修改后的内容为:
SELINUX=disabled
SELINUXTYPE=targeted
9、创建Oracle用户和组
在安装进行之前,需要创建两个用户组和一个用户,分别用于oracle安装和oracle管理,在两个节点执行相同的操作,操作如下:
[root@node-rac1 ~]#groupadd –g 1001 dba
[root@node-rac1 ~]#groupadd –g 1002 oinstall
[root@node-rac1 ~]#useradd -u 1001 -g oinstall -G dba oracle
然后,给oracle用户设置密码:
[root@node-rac1 ~]# passwd oracle
最后,确认匿名用户nobody是否存在于系统中,因为在安装完成后nobody用户需要执行一些扩展任务:
[root@node-rac1 ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
这样,用户和组创建就完毕了。
10、设置Oracle用户环境变量
用文本编辑器vi编辑/home/oracle/.bash_profile文件,在文件最后添加如下内容,这里以node-rac1为例,同理,需要在节点node-rac2也执行相同的操作。
- export ORACLE_BASE=/u01/oracle
- export ORACLE_HOME=$ORACLE_BASE/product/11.0.6/rac_db
- export ORA_CRS_HOME=/app/crs/product/11.0.6/crs
- export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
- export ORACLE_SID=racdb1
- export NLS_LANG=AMERICAN_AMERICA.zhs16gbk
- export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
- export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin
- export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
- export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
- export ORACLE_TERM=xterm
- export TNS_ADMIN=$ORACLE_HOME/network/admin
- export ORA_NLS10=$ORACLE_HOME/nls/data
- export LD_LIBRARY_PATH=$ORACLE_HOME/lib
- export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
- export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
- export CLASSPATH=$ORACLE_HOME/JRE
- export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
- export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
- export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
- export THREADS_FLAG=native
- export TEMP=/tmp
- export TMPDIR=/tmp
根据oracle官方的建议,这里将oracle rac数据库程序和oracle clusterware软件安装在了不同的目录。而“ORACLE_SID”在节点2上应该设置为“export ORACLE_SID=racdb2”
设置完毕oracle用户环境变量后,还需要在两个节点创建环境变量中指定的安装目录,基本操作如下:
- [root@node-rac1 ~]# mkdir -p /u01/oracle/product/11.0.6/rac_db
- [root@node-rac1 ~]# mkdir -p /app/oracrs/product/11.0.6/crs
- [root@node-rac1 ~]# chown -R oracle:oinstall /u01/oracle
- [root@node-rac1 ~]#chown -R oracle:oinstall /app
11、配置节点间SSH信任
在安装RAC过程中,OUI程序会使用ssh和scp命令来执行远程拷贝操作,将文件从安装节点拷贝到其它节点上,如果节点间不相互信任,那么传输过程就需要输入密码,从而导致安装失败,因此必须在所有的节点上为oracle用户配置节点间的互信。
1 在每个节点上创建 RSA密钥和公钥
(1)以 oracle 用户登录
(2)在 oracle用户的根目录内创建.ssh目录并设置读取权限
- [oracle@node-rac1 ~]$ mkdir ~/.ssh
- [oracle@node-rac1 ~]$ chmod 700 ~/.ssh
- (3)使用ssh-keygen命令生成基于SSH协议的RSA密钥
- [oracle@node-rac1 ~]$ cd ~/.ssh
- [oracle@node-rac1 .ssh]$ 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:69:5a:aa:e6:85:88:a4:07:72:ab:15:7b:3b:4a:77 oracle@node-rac1
在提示保存私钥(key)和公钥(public key)的位置时,选择使用默认值,然后依次直接回车即可。
2 整合公钥文件
(1)以 Oracle 用户登录
(2)在要执行Oracle安装程序的节点node-rac1 上执行如下操作:
- [oracle@node-rac1 ~] $ cd ~/.ssh
- [oracle@node-rac1 .ssh]$ ssh node-rac1 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
- [oracle@node-rac1 .ssh]$ ssh node-rac2 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
- [oracle@node-rac1 .ssh]$ chmod 600 ~/.ssh/authorized_keys
- [oracle@node-rac1 .ssh]$scp authorized_keys node-rac2:/home/oracle/.ssh/
这个操作过程是将两个节点生成的公钥文件整合为一个authorized_keys文件,然后进行授权,并将authorized_keys拷贝到另一个节点。
(3)测试SSH互信
- 首先在node-rac1节点上执行:
- [oracle@node-rac1 ~]$ ssh node-rac1 date
- [oracle@node-rac1 ~]$ ssh node-rac2 date
- 然后在node-rac2节点上执行
- [oracle@node-rac2 ~]$ ssh node-rac1 date
- [oracle@node-rac2 ~]$ ssh node-rac2 date
如果不需要输入密码就出现系统当前日期,就说明SSH互信已经配置成功了。
12、配置共享存储系统
在讲述的这个环境中,共享存储由一台ISCSI-target主机来提供,通过以太网,假定将ISCSI-target主机两块本地磁盘/dev/sdb、/dev/sdc共享给RAC数据库的两个节点,由于ISCSI的安装已经在前面章节进行了详细讲述,这里不再介绍,,然后对两块共享磁盘分别划分了五个分区,每个分区的用途如下表:
全部操作执行完毕,重启RAC数据库的两个节点。
13、建立和配置raw设备
关于raw设备的使用,从Centos4版本到Centos5发生了很大变化,在Centos4以前版本中可以通过/etc/sysconfig/rawdevices和/etc/init.d/rawdevices文件来创建和配置raw设备,而在Centos5以后,raw必须要通过 udev来管理raw,并且raw命令的位置从/usr/bin/raw变为/bin/raw,这从安全方面改进了不少,但是仍然兼容之前的配置方式,因此在Centos5版本中配置raw的方法有两种:
(1)手动建立/etc/sysconfig/rawdevices文件,然后从其它操作系统上拷贝/etc/init.d/rawdevices文件到本机,修改/etc/init.d/rawdevices文件中raw命令的路径,然后就可以通过/etc/init.d/rawdevices来启动和关闭 raw文件了。
(2)通过udev来管理raw,添加raw设备对应的配置文件为/etc/udev/rules.d/60-raw.rules。
这里采用第二种方式来建立和配置raw设备,首先修改/etc/udev/rules.d/60-raw.rules文件,修改完成的内容如下:
- ACTION=="add",KERNEL=="sdb5",RUN+="/bin/raw /dev/raw/raw1 %N"
- ACTION=="add",KERNEL=="sdb6",RUN+="/bin/raw /dev/raw/raw2 %N"
- …………
- ACTION=="add",KERNEL=="sdc8",RUN+="/bin/raw /dev/raw/raw9 %N"
- ACTION=="add",KERNEL=="sdc9",RUN+="/bin/raw /dev/raw/raw10 %N"
- KERNEL=="raw1", OWNER="oracle", GROUP="oinstall", MODE="644"
- KERNEL=="raw2", OWNER="oracle", GROUP="oinstall", MODE="644"
- KERNEL=="raw3", OWNER="oracle", GROUP="oinstall", MODE="660"
- …………
- KERNEL=="raw9", OWNER="oracle", GROUP="oinstall", MODE="660"
- KERNEL=="raw10", OWNER="oracle", GROUP="oinstall", MODE="660"
然后启动udev服务生成raw设备:
[root@node-rac1 /]# start_udev
Starting udev: [ OK ]
接着验证一下raw设备是否生成:
- [root@node-rac1 /]# ll /dev/raw/raw*
- crw-r--r-- 1 oracle oinstall 162, 1 Aug 27 00:13 /dev/raw/raw1
- crw-rw---- 1 oracle oinstall 162, 10 Aug 27 00:13 /dev/raw/raw10
- crw-r--r-- 1 oracle oinstall 162, 2 Aug 27 00:13 /dev/raw/raw2
- crw-rw---- 1 oracle oinstall 162, 6 Aug 27 00:13 /dev/raw/raw6
- crw-rw---- 1 oracle oinstall 162, 7 Aug 27 00:13 /dev/raw/raw7
- ……………..
- crw-rw---- 1 oracle oinstall 162, 8 Aug 27 00:13 /dev/raw/raw8
- crw-rw---- 1 oracle oinstall 162, 9 Aug 27 00:13 /dev/raw/raw9
从输出可以看出,raw设备已经生成,并且相关权限也自动加载。
未完待续!
本文出自 “技术成就梦想” 博客,请务必保留此出处http://ixdba.blog.51cto.com/2895551/880511