一、环境介绍:
所有的节点名称都是以xzxj.edu.cn结尾的,server是一台DNS服务器,用来解析名称用。
在这里存储系统使用的是ASM,在 ASM 上存储 OCR 和表决磁盘文件,具体是存储在一个名为 +CRS 的磁盘组中,该磁盘组使用外部冗余配置,只有一个 OCR 位置和一个表决磁盘位置。ASM 磁盘组应在共享存储器上创建,大小至少为 2GB。Oracle 物理数据库文件(数据、联机重做日志、控制文件、存档重做日志)将安装在 ASM 上一个名为 +RACDB_DATA 的 ASM 磁盘组中,而快速恢复区将在一个名为 +FRA 的 ASM 磁盘组上创建。
二、系统配置:
(1)、安装oracle RAC所需的linux软件包:
x86:
yum –y install binutils compat-libstdc++ elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
x64:
(2)、网络配置:
网络硬件要求:
- 每个 Oracle RAC 节点至少必须有两个网络适配器(即网络接口卡 (NIC)):一个用于公共网络接口,另一个用于专用网络接口(互连)。要对公共网络或专用网络使用多个 NIC,Oracle 建议采用 NIC 绑定。对公共网络和专用网络使用不同的绑定(即,对公共网络使用 bond0,对专用网络使用 bond1),这是因为在安装过程中,每个接口要么定义为公共接口,要么定义为专用接口。本文不讨论 NIC 绑定。
- 每个网络中网络适配器的相关公共接口名称在所有节点上都应相同,网络适配器的相关专用接口名称在所有节点上都应相同。
- 对于公共网络,每个网络适配器必须支持 TCP/IP。
- 对于专用网络,互连必须支持用户数据报协议 (UDP),使用支持 TCP/IP(最小要求为 1 Gb 以太网)的高速网络适配器和交换机。
UDP 是 Oracle RAC 的默认互连协议,TCP 是 Oracle Clusterware 的互连协议。对于此互连,必须使用一个交换机。Oracle 建议您使用一个专用交换机。对于互连,Oracle 不支持令牌环和交叉电缆。
- 对于专用网络,所有指定互连接口的端点在网络上必须完全可达。每个节点均应连接到所有的专用网络接口。可以使用 ping 命令测试一个互连接口是否可达。
- 在 Oracle Grid Infrastructure 的安装过程中,系统都会要求您标识 OUI 在您的集群节点上检测到的每个网络接口计划使用方式。必须将每个接口标识为 public interface、private interface 或 not used,并且必须对 Oracle Clusterware 和 Oracle RAC 使用相同的专用接口。
可将若干独立的接口绑定为一个公共接口,这样可在某个 NIC 出现故障时提供冗余性。但是,Oracle 建议您不要为 Oracle Clusterware 和 Oracle RAC 创建不同的接口。如果您对专用互连使用多个 NIC,Oracle 建议您使用 NIC 绑定。请注意,多个专用接口提供负载平衡,但不提供故障切换功能,只有将它们绑定在一起时才提供故障切换功能。从 Oracle Clusterware 11 g 第 2 版开始,无需再为互连提供专用名称或 IP 地址。标识为专用的子网上的 IP 地址将被分配作为集群成员节点的专用 IP 地址。无需在 hosts 目录中手动配置这些地址。如果需要针对互连进行名称解析,可在 hosts 文件或 DNS 上配置专用 IP 名称。而 Oracle Clusterware 会为安装期间定义为专用接口的那个接口(如 eth1)分配互连地址,并将该地址分配给用作专用子网的那个子网。实际上,在本指南中,我会继续在每个节点包括一个专用名称和 IP 地址以用于 RAC 互连。这在专用网络上提供了自我文档编制的方法和一组端点,可供故障排除之用:
192.168.0.51 rac01-priv 192.168.0.52 rac02-priv
- 在使用 iSCSI 进行网络存储的生产环境中,我们强烈建议使用 TCP/IP 卸载引擎 (TOE) 卡配置第三个网络接口(如 eth2)作为冗余接口来处理这种存储流量。为简单起见,本文中的配置是让 RAC 专用互连接口 (eth1) 所属的网络同时承载 iSCSI 网络存储流量。在同一网络接口上同时处理 Oracle RAC 的 iSCSI 存储流量和缓存融合流量使我们的测试系统成本低廉,但永远不要考虑在生产环境中使用该方法。
TOE 的基本用意是将 TCP/IP 协议的处理工作从主机处理器卸载到适配器上的硬件或系统中。TOE 通常内嵌在网络接口卡 (NIC) 或主机总线适配器 (HBA) 中,用于减少 CPU 和服务器 I/O 子系统上的 TCP/IP 处理工作量以提高总体性能。
分配IP地址:
这里的 SCAN ip地址必须通过GNS或者DNS来解析的,这里使用的是DNS解析.其他地址都在hosts文件里定义。
#Public Network - (eth0)
192.168.1.51 rac01.xzxj.edu.cn rac01
192.168.1.52 rac02.xzxj.edu.cn rac02
#Private Network - (eth1)
192.168.0.51 rac01-priv.xzxj.edu.cn rac01-priv
192.168.0.52 rac02-priv.xzxj.edu.cn rac02-priv
#Public Virtual IP - (eth0:1)
192.168.1.53 rac01-vip.xzxj.edu.cn rac01-vip
192.168.1.54 rac02-vip.xzxj.edu.cn rac02-vip
# Single Client Access Name (SCAN)
192.168.1.55 rac-scan.xzxj.edu.cn rac-scan
# Private Storage Network for Openfiler - (eth1)
192.168.0.50 openfiler-priv
#Public Storage Network for Openfiler - (eth0)
192.168.1.50 openfiler.xzxj.edu.cn openfiler
配置DNS,使之能解析rac-scan:
完了之后重新启动或者重新载入配置文件:
在rac节点上测试,是否能解析:
OK,测试成功。
(3)、集群时间同步服务:
配置集群时间同步服务 — (CTSS):
如果您想使用集群时间同步服务在集群中提供同步服务,需要卸载网络时间协议 (NTP) 及其配置。做如下操作:
要停用 NTP 服务,必须停止当前的 ntpd 服务,从初始化序列中禁用该服务,并删除 ntp.conf 文件。
当安装程序发现 NTP 协议处于非活动状态时,安装集群时间同步服务将以活动模式自动进行安装并通过所有节点的时间。如果发现配置了 NTP,则以观察者模式启动集群时间同步服务,Oracle Clusterware 不会在集群中进行活动的时间同步。
在安装后,要确认 ctssd 处于活动状态,请作为网格安装所有者 (grid) 输入以下命令:
[grid@rac01 ~]$ crsctl check ctss
CRS-4701: The Cluster Time Synchronization Service is in Active mode.
CRS-4702: Offset (in msec): 0
配置网络时间协议:
如果您正在使用 NTP,并且愿意继续使用它而不是集群时间同步服务,那么您需要修改 NTP 初始化文件,在其中设置 -x 标志,这样可避免向后调整时间。完成此任务后,重启网络时间协议后台程序。
编辑/etc/sysconfig/ntpd文件:
# Drop root to id 'ntp:ntp' by default. OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid" # Set to 'yes' to sync hw clock after successful ntpdate SYNC_HWCLOCK=no # Additional options for ntpdate NTPDATE_OPTIONS=""
然后,重启 NTP 服务。
(4)、openfiler配置:
创建了三个 iSCSI 磁盘,现在可以将它们呈现给网络上的 iSCSI 客户端(rac01 和 rac02)。
ISCSI目标:
网络ACL:
(5)、在oracle RAC节点上配置iscsi卷:
确认节点上安装了iscsi-initiator-utils*软件包,没有则安装此软件包:
配置 iSCSI(启动器)服务,两个节点都要操作:
这里就不详细介绍使用什么命令了,我直接用我编写的脚本来完成,过程类似:
现在已经成功发现并登录到iSCSI目标了。
可以通过查看 /dev/disk/by-path 目录来确定所有目标的当前映射:
在iscsi卷上创建分区:
只创建一个分区,在一个节点上执行即可,如下:
(6)、创建任务角色划分操作系统权限组、用户和目录:
创建以下 O/S 组:
添加组:
添加grid用户:
设置密码:
为 grid 用户帐户创建登录脚本
以 grid 用户帐户分别登录到两个 Oracle RAC 节点并创建以下登录脚本 (.bash_profile):
注:在为每个 Oracle RAC 节点设置 Oracle 环境变量时,确保为每个 RAC 节点指定唯一的 Oracle SID。对于此示例,我使用:
- rac01:ORACLE_SID=+ASM1
- rac02:ORACLE_SID=+ASM2
alias df='df -h'
alias du='du -sh'
alias la='ls -lha'
ORACLE_SID=+ASM1; export ORACLE_SID
JAVA_HOME=/usr/local/java; export JAVA_HOME
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE
ORACLE_HOME=/u01/app/11.2.0/grid; export ORACLE_HOME
ORACLE_PATH=/u01/app/oracle/common/oracle/sql; export ORACLE_PATH
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=${PATH}:/u01/app/common/oracle/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
THREADS_FLAG=native; export THREADS_FLAG
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
alias du='du -sh'
alias la='ls -lha'
ORACLE_SID=+ASM1; export ORACLE_SID
JAVA_HOME=/usr/local/java; export JAVA_HOME
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE
ORACLE_HOME=/u01/app/11.2.0/grid; export ORACLE_HOME
ORACLE_PATH=/u01/app/oracle/common/oracle/sql; export ORACLE_PATH
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=${PATH}:/u01/app/common/oracle/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
THREADS_FLAG=native; export THREADS_FLAG
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
为 Oracle 数据库软件创建组和用户:
为 oracle 用户帐户创建登录脚本
以 oracle 用户帐户分别登录到两个 Oracle RAC 节点并创建以下登录脚本 (.bash_profile):
注:在为每个 Oracle RAC 节点设置 Oracle 环境变量时,确保为每个 RAC 节点指定唯一的 Oracle SID。对于此示例,我使用:
- rac01:ORACLE_SID=racdb1
- rac02:ORACLE_SID=racdb2
加入.bash_profile
alias df='df -h'
alias du='du -sh'
alias la='ls -lha'
ORACLE_SID=racdb1; export ORACLE_SID
ORACLE_UNQNAME=racdb; export ORACLE_UNQNAME
JAVA_HOME=/usr/local/java; export JAVA_HOME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_PATH=/u01/app/common/oracle/sql; export ORACLE_PATH
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=${PATH}:/u01/app/common/oracle/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
THREADS_FLAG=native; export THREADS_FLAG
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
alias du='du -sh'
alias la='ls -lha'
ORACLE_SID=racdb1; export ORACLE_SID
ORACLE_UNQNAME=racdb; export ORACLE_UNQNAME
JAVA_HOME=/usr/local/java; export JAVA_HOME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_PATH=/u01/app/common/oracle/sql; export ORACLE_PATH
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=${PATH}:/u01/app/common/oracle/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
THREADS_FLAG=native; export THREADS_FLAG
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
创建Oracle 基目录路径:
为 Oracle 软件安装用户设置资源限制:
A:修改/etc/security/limits.conf文件,加入以下内容:
B:编辑/etc/pam.d/login文件,加入以下内容:
session required pam_limits.so
C:根据您的 shell 环境,对默认的 shell 启动文件进行以下更改,以便更改所有 Oracle 安装所有者的 ulimit 设置(注意这里的示例显示 oracle 和 grid 用户):
对于 Bourne、Bash 或 Korn shell,通过运行以下命令将以下行添加到 /etc/profile 文件:
对于 C shell(csh 或 tcsh),通过运行以下命令将以下行添加到 /etc/csh.login 文件:
(7)、为 Oracle 配置 Linux 服务器:
配置内核参数:
向/etc/sysctl.conf文件里加入以下内容:
(8)、配置RAC 节点以便可以使用 SSH 进行远程访问,略………
三、安装并配置ASMLib 2.0:
有关ASM的软件可以在以下网址找到:
http://www.oracle.com/technology/global/cn/tech/linux/asmlib/
根据自己的内核版本选择相应的软件包,这里的内核是2.6.18-194,所以选择以下三个软件包:
oracleasm-2.6.18-194.el5-2.0.5-1.el5.i686.rpm
oracleasmlib-2.0.4-1.el5.i386.rpm
oracleasm-support-2.1.3-1.el5.i386.rpm
oracleasmlib-2.0.4-1.el5.i386.rpm
oracleasm-support-2.1.3-1.el5.i386.rpm
安装这三个软件包:
配置ASM:
现在,您已安装了用于 Linux 的 ASMLib 程序包,接下来您需要配置并加载 ASM 内核模块。需要在两个 Oracle RAC 节点上作为 root 用户帐户执行该任务。
注:oracleasm 命令的默认路径为 /usr/sbin。以前版本中使用的 /etc/init.d 路径并未被弃用,但该路径下的 oracleasm 二进制文件现在一般用于内部命令。如果输入 oracleasm configure 命令时不带 -i 标志,则显示当前配置。例如:
1、输入以下命令,以使用 configure 选项运行 oracleasm 初始化脚本:
该脚本完成以下任务:
- 创建 /etc/sysconfig/oracleasm 配置文件
- 创建 /dev/oracleasm 挂载点
- 挂载 ASMLib 驱动程序文件系统
注:ASMLib 驱动程序文件系统并非常规的文件系统。它只用于自动存储管理库与自动存储管理驱动程序的通讯。
2、输入以下命令以加载 oracleasm 内核模块:
为oracle创建ASM磁盘:
创建 ASM 磁盘只需在 RAC 集群中的一个节点上以 root 用户帐户执行。我将在 rac01 上运行这些命令。在另一个 Oracle RAC 节点上,您将需要执行
scandisk 以识别新卷。该操作完成后,应在两个 Oracle RAC 节点上运行 oracleasm listdisks 命令以验证是否创建了所有 ASM 磁盘以及它们是否可用。
在rac02上扫描磁盘:
两个节点上验证一下,是否成功创建ASM磁盘:
四、集群的 Oracle Grid Infrastructure 的安装前任务:
所需的oracle软件如下:
- 适用于 Linux 的 Oracle Database 11g 第 2 版 Grid Infrastructure (11.2.0.1.0)
- 适用于 Linux 的 Oracle Database 11g 第 2 版 (11.2.0.1.0)
- Oracle Database 11g 第 2 版 Examples(可选)
安装用于 Linux 的 cvuqdisk 程序包
在两个 Oracle RAC 节点上安装操作系统程序包 cvuqdisk。如果没有 cvuqdisk,集群验证实用程序就无法发现共享磁盘,当运行(手动运行或在 Oracle Grid Infrastructure 安装结束时自动运行)集群验证实用程序时,您会收到这样的错误消息:“Package cvuqdisk not installed”。使用适用于您的硬件体系结构(例如,x86_64 或 i386)的 cvuqdisk RPM。
cvuqdisk RPM 包含在 Oracle Grid Infrastructure 安装介质上的 rpm 目录中。
设置环境变量 CVUQDISK_GRP,使其指向作为 cvuqdisk 的所有者所在的组(本文为 oinstall):
在保存 cvuqdisk RPM 的目录中,使用以下命令在两个 Oracle RAC 节点上安装 cvuqdisk 程序包:
使用 CVU 验证是否满足 Oracle 集群件要求
记住要作为 grid 用户在将要执行 Oracle 安装的节点 (racnode1) 上运行。此外,必须为 grid 用户配置通过 用户等效性实现的 SSH 连通性。
在grid软件目录里运行以下命令:
可以忽略下面这个错误:
使用 CVU 验证硬件和操作系统设置
查看 CVU 报告。CVU 执行的所有其他检查的结果报告应该为“passed”,之后才能继续进行 Oracle Grid Infrastructure 的安装。
五、为集群安装 Oracle Grid Infrastructure:
这里点击test时,测试ssh用户等效性,之前我已建立过连接,所以点击test提示已经建立连接,下一步。
这里出现了一个小问题,因为我么在dns中定义所以提示不能解析节点的VIP,在dns定义之后通过了。
出现这两个错误可以忽略不计,直接下一步退出。