第 1 页 第 2 页 第 3 页

在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群(续)

本指南中的信息未经 Oracle 验证,且不受 Oracle 支持,您在使用时只能风险自负;本指南仅供教学使用。


13. 创建任务角色划分操作系统权限组、用户和目录

在集群的两个 Oracle RAC 节点上针对 gridoracle 用户执行以下用户、组和目录配置并设置 shell 限制的任务。

本节介绍如何使用 任务角色划分 配置来创建操作系统用户和组以安装所有 Oracle 软件。本节所使用的命令应在两个 Oracle RAC 节点上以 root 用户身份执行,从而创建组、用户和目录。请注意,组 ID 和用户 ID 在集群的两个 Oracle RAC 节点上应保持一致。检查以确保每个集群成员节点上都存在您要使用的组 ID 和用户 ID,确认每个网格基础架构的集群安装所有者的主组拥有相同的名称和组 ID,具体在本指南中为 oinstall (GID 1000)。

Oracle 的任务角色划分权限配置是这样一种配置,将对 Oracle Grid Infrastructure 安装的管理访问权限赋予给一些操作系统组和用户,从而将这类权限从涉及其他 Oracle 安装(例如,Oracle Database 软件)的其他管理用户和组中划分出来。管理访问权限由各个操作系统组授予,而安装权限由每个 Oracle 安装的各个安装所有者授予。

我们会为每个 Oracle 软件产品创建一个操作系统用户作为该产品的所有者 —“grid”作为 Oracle Grid Infrastructure 的所有者,“oracle”作为 Oracle RAC 软件的所有者。在本文中,grid 的用户是我们创建作为 Oracle Grid Infrastructure 二进制文件所有者的用户。该用户将是 Oracle Clusterware 和 Oracle 自动存储管理二进制文件的所有者。而 oracle 的用户是我们创建作为 Oracle 数据库二进制文件 (Oracle RAC) 所有者的用户。这两个 Oracle 软件所有者必须以 Oracle Inventory 组 (oinstall) 作为其主组,这样每个 Oracle 软件安装所有者都有权写入中央清单 (oraInventory),以便正确设置 OCR 和 Oracle Clusterware 资源的权限。Oracle RAC 软件所有者还必须以 OSDBA 组和可选的 OSOPER 组作为其辅助组。

此类配置是可选的,但是对于需要通过划分各个管理用户的负责区域来限制用户对 Oracle 软件的访问的组织来说,Oracle 强烈建议采用这样的配置。例如,一个小型组织可能只分配操作系统用户权限,这样就可以只使用一个管理用户和一个组,该用户和组通过操作系统认证之后会具有存储层和数据库层上的所有系统权限。就此类配置来说,您可以指定 oracle 用户为所有 Oracle 软件(Grid Infrastructure 和 Oracle Database 软件)的唯一安装所有者,并指定 oinstall 为唯一组,授予其成员 Oracle Clusterware、自动存储管理及服务器上所有 Oracle 数据库的所有系统权限,及其作为安装所有者的所有权限。然而,其他组织有一些专门的系统角色来负责 Oracle 软件的安装,如系统管理员、网络管理员或存储管理员。这些不同的管理员用户可对系统进行配置以便为集群安装的 Oracle Grid Infrastructure 作准备,并完成所有需要操作系统 root 权限的配置任务。在成功完成 Grid Infrastructure 的安装与配置后,系统管理员应只需提供配置信息并授予数据库管理员在 Oracle RAC 安装期间以 root 用户身份运行脚本的权限。

我们将创建以下 O/S 组:

 

描述 OS 组名 分配给该组的 OS 用户 Oracle 权限 Oracle 组名
Oracle 清单和软件所有者 oinstall grid、oracle    
Oracle 自动存储管理组 asmadmin grid SYSASM OSASM
ASM 数据库管理员组 asmdba grid、oracle ASM 的 SYSDBA OSDBA for ASM
ASM 操作员组 asmoper grid ASM 的 SYSOPER OSOPER for ASM
数据库管理员 dba oracle SYSDBA OSDBA
数据库操作员 oper oracle SYSOPER OSOPER


 

  • Oracle 清单组(一般为 oinstall

    OINSTALL 组的成员被视为 Oracle 软件的“所有者”,拥有对 Oracle 中央清单 (oraInventory) 的写入权限。在一个 Linux 系统上首次安装 Oracle 软件时,OUI 会创建 /etc/oraInst.loc 文件。该文件指定 Oracle 清单组的名称(默认为 oinstall)以及 Oracle 中央清单目录的路径。

    如果不存在 oraInventory 组,默认情况下,安装程序会将集群的网格基础架构的安装所有者的主组列为 oraInventory 组。确保所有计划的 Oracle 软件安装所有者都使用此组作为主组。就本指南来说,必须将 gridoracle 安装所有者配置为以 oinstall 作为其主组。

  • Oracle 自动存储管理组(一般为 asmadmin

    此组为必需组。如果想让 Oracle ASM 管理员和 Oracle Database 管理员分属不同的管理权限组,可单独创建此组。在 Oracle 文档中,OSASM 组是其成员被授予权限的操作系统组,在代码示例中,专门创建了一个组来授予此权限,此组名为 asmadmin

    OSASM 组的成员可通过操作系统身份验证使用 SQL 以 SYSASM 身份连接到一个 Oracle ASM 实例。SYSASM 权限是在 Oracle ASM 11g 第 1 版 (11.1) 中引入的,现在,在 Oracle ASM 11g 第 2 版 (11.2) 中,该权限已从 SYSDBA 权限中完全分离出来。SYSASM 权限不再提供对 RDBMS 实例的访问权限。用 SYSASM 权限代替 SYSDBA 权限来提供存储层的系统权限,这使得 ASM 管理和数据库管理之间有了清晰的责任划分,有助于防止使用相同存储的不同数据库无意间覆盖其他数据库的文件。SYSASM 权限允许执行挂载和卸载磁盘组及其他存储管理任务。

  • ASM 数据库管理员组(OSDBA for ASM,一般为 asmdba

    ASM 数据库管理员组(OSDBA for ASM)的成员是 SYSASM 权限的一个子集,拥有对 Oracle ASM 管理的文件的读写权限。Grid Infrastructure 安装所有者 (grid) 和所有 Oracle Database 软件所有者 (oracle) 必须是该组的成员,而所有有权访问 Oracle ASM 管理的文件并且具有数据库的 OSDBA 成员关系的用户必须是 ASM 的 OSDBA 组的成员。

  • ASM 操作员组(OSOPER for ASM,一般为 asmoper
  • 该组为可选组。如果需要单独一组具有有限的 Oracle ASM 实例管理权限(ASM 的 SYSOPER 权限,包括启动和停止 Oracle ASM 实例的权限)的操作系统用户,则创建该组。默认情况下,OSASM 组的成员将拥有 ASM 的 SYSOPER 权限所授予的所有权限。

    要使用 ASM 操作员组创建 ASM 管理员组(该组拥有的权限比默认的 asmadmin 组要少),安装 Grid Infrastructure 软件时必须选择 Advanced 安装类型。这种情况下,OUI 会提示您指定该组的名称。在本指南中,该组为 asmoper

    如果要拥有一个 OSOPER for ASM 组,则集群的 Grid Infrastructure 软件所有者 (grid) 必须为此组的一个成员。

  • 数据库管理员(OSDBA,一般为 dba

    OSDBA 组的成员可通过操作系统身份验证使用 SQL 以 SYSDBA 身份连接到一个 Oracle 实例。该组的成员可执行关键的数据库管理任务,如创建数据库、启动和关闭实例。该组的默认名称为 dbaSYSDBA 系统权限甚至在数据库未打开时也允许访问数据库实例。对此权限的控制完全超出了数据库本身的范围。

    不要混淆 SYSDBA 系统权限与数据库角色 DBADBA 角色不包括 SYSDBASYSOPER 系统权限。

  • 数据库操作员组(OSOPER,一般为 oper

    OSOPER 组的成员可通过操作系统身份验证使用 SQL 以 SYSOPER 身份连接到一个 Oracle 实例。这个可选组的成员拥有一组有限的数据库管理权限,如管理和运行备份。该组的默认名称为 operSYSOPER 系统权限甚至在数据库未打开时也允许访问数据库实例。对此权限的控制完全超出了数据库本身的范围。要使用该组,选择 Advanced 安装类型来安装 Oracle 数据库软件。



为 Grid Infrastructure 创建组和用户

在本节中,我们首先在两个 Oracle RAC 节点上为 Grid Infrastructure 创建推荐的操作系统组和用户:

[root@racnode1 ~]# groupadd -g 1000 oinstall 
[root@racnode1 ~]# groupadd -g 1200 asmadmin
[root@racnode1 ~]# groupadd -g 1201 asmdba
[root@racnode1 ~]# groupadd -g 1202 asmoper
[root@racnode1 ~]# useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper -d
/home/grid -s /bin/bash -c "Grid Infrastructure Owner" grid


[root@racnode1 ~]# id grid uid=1100(grid) gid=1000(oinstall)
groups=1000(oinstall), 1200(asmadmin), 1201(asmdba),1202(asmoper)

设置 grid 帐户的口令:

[root@racnode1 ~]# passwd grid  
Changing password for user grid.
New UNIX password:xxxxxxxxxxx
Retype new UNIX password:xxxxxxxxxxx
passwd: all authentication tokens updated successfully.

为 grid 用户帐户创建登录脚本

grid 用户帐户分别登录到两个 Oracle RAC 节点并创建以下登录脚本 (.bash_profile):

在为每个 Oracle RAC 节点设置 Oracle 环境变量时,确保为每个 RAC 节点指定唯一的 Oracle SID。对于此示例,我使用:

  • racnode1ORACLE_SID=+ASM1
  • racnode2ORACLE_SID=+ASM2
[root@racnode1 ~]# su - grid
                              
# ---------------------------------------------------
# .bash_profile
# ---------------------------------------------------
# OS User: grid
# Application: Oracle Grid Infrastructure
# Version: Oracle 11g release 2
# ---------------------------------------------------

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

alias ls="ls -FA"

# ---------------------------------------------------
# ORACLE_SID
# ---------------------------------------------------
# Specifies the Oracle system identifier (SID)
# for the Automatic Storage Management (ASM)instance
# running on this node.
# Each RAC node must have a unique ORACLE_SID.
# (i.e. +ASM1, +ASM2,...)
# ---------------------------------------------------
ORACLE_SID=+ASM1; export ORACLE_SID

# ---------------------------------------------------
# JAVA_HOME
# ---------------------------------------------------
# Specifies the directory of the Java SDK and Runtime
# Environment.
# ---------------------------------------------------
JAVA_HOME=/usr/local/java; export JAVA_HOME

# ---------------------------------------------------
# ORACLE_BASE
# ---------------------------------------------------
# Specifies the base of the Oracle directory structure
# for Optimal Flexible Architecture (OFA) compliant
# installations. The Oracle base directory for the
# grid installation owner is the location where
# diagnostic and administrative logs, and other logs
# associated with Oracle ASM and Oracle Clusterware
# are stored.
# ---------------------------------------------------
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE

# ---------------------------------------------------
# ORACLE_HOME
# ---------------------------------------------------
# Specifies the directory containing the Oracle
# Grid Infrastructure software. For grid
# infrastructure for a cluster installations, the Grid
# home must not be placed under one of the Oracle base
# directories, or under Oracle home directories of
# Oracle Database installation owners, or in the home
# directory of an installation owner. During
# installation, ownership of the path to the Grid
# home is changed to root. This change causes
# permission errors for other installations.
# ---------------------------------------------------
ORACLE_HOME=/u01/app/11.2.0/grid; export ORACLE_HOME

# ---------------------------------------------------
# ORACLE_PATH
# ---------------------------------------------------
# Specifies the search path for files used by Oracle
# applications such as SQL*Plus. If the full path to
# the file is not specified, or if the file is not
# in the current directory, the Oracle application
# uses ORACLE_PATH to locate the file.
# This variable is used by SQL*Plus, Forms and Menu.
# ---------------------------------------------------
ORACLE_PATH=/u01/app/oracle/common/oracle/sql; export ORACLE_PATH

# ---------------------------------------------------
# SQLPATH
# ---------------------------------------------------
# Specifies the directory or list of directories that
# SQL*Plus searches for a login.sql file.
# ---------------------------------------------------
# SQLPATH=/u01/app/common/oracle/sql; export SQLPATH

# ---------------------------------------------------
# ORACLE_TERM
# ---------------------------------------------------
# Defines a terminal definition. If not set, it
# defaults to the value of your TERM environment
# variable. Used by all character mode products.
# ---------------------------------------------------
ORACLE_TERM=xterm; export ORACLE_TERM

# ---------------------------------------------------
# NLS_DATE_FORMAT
# ---------------------------------------------------
# Specifies the default date format to use with the
# TO_CHAR and TO_DATE functions. The default value of
# this parameter is determined by NLS_TERRITORY. The
# value of this parameter can be any valid date
# format mask, and the value must be surrounded by
# double quotation marks. For example:
# # NLS_DATE_FORMAT = "MM/DD/YYYY"
# # ---------------------------------------------------
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT

# ---------------------------------------------------
# TNS_ADMIN
# ---------------------------------------------------
# Specifies the directory containing the Oracle Net
# Services configuration files like listener.ora,
# tnsnames.ora, and sqlnet.ora.
# ---------------------------------------------------
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN

# ---------------------------------------------------
# ORA_NLS11
# ---------------------------------------------------
# Specifies the directory where the language,
# territory, character set, and linguistic definition
# files are stored.
# ---------------------------------------------------
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11

# ---------------------------------------------------
# PATH
# ---------------------------------------------------
# Used by the shell to locate executable programs;
# must include the $ORACLE_HOME/bin directory.
# ---------------------------------------------------
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
# ---------------------------------------------------
# Specifies the list of directories that the shared
# library loader searches to locate shared object
# libraries at runtime.
# ---------------------------------------------------
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
# ---------------------------------------------------
# Specifies the directory or list of directories that
# contain compiled Java classes.
# ---------------------------------------------------
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
# ---------------------------------------------------
# All the tools in the JDK use green threads as a
# default. To specify that native threads should be
# used, set the THREADS_FLAG environment variable to
# "native". You can revert to the use of green
# threads by setting THREADS_FLAG to the value
# "green".
# ---------------------------------------------------
THREADS_FLAG=native; export THREADS_FLAG

# ---------------------------------------------------
# TEMP, TMP, and TMPDIR
# ---------------------------------------------------
# Specify the default directories for temporary
# files; if set, tools that create temporary files
# create them in one of these directories.
# ---------------------------------------------------
export TEMP=/tmp
export TMPDIR=/tmp

# ---------------------------------------------------
# UMASK
# ---------------------------------------------------
# Set the default file mode creation mask
# (umask) to 022 to ensure that the user performing
# the Oracle software installation creates files
# with 644 permissions.
# ---------------------------------------------------
umask 022

为 Oracle 数据库软件创建组和用户

接下来,我们在两个 Oracle RAC 节点上为 Oracle 数据库软件创建推荐的操作系统组和用户:

[root@racnode1 ~]# groupadd -g 1300 dba
[root@racnode1 ~]# groupadd -g 1301 oper
[root@racnode1 ~]# useradd -m -u 1101 -g oinstall -G dba,oper,asmdba -d
/home/oracle -s /bin/bash -c "Oracle Software Owner" oracle


[root@racnode1 ~]# id oracle
uid=1101(oracle)
gid=1000(oinstall)
groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)

设置 oracle 帐户的口令:

[root@racnode1 ~]# passwd oracle
Changing password for user oracle.
New UNIX password:
xxxxxxxxxxx
Retype new UNIX password:
xxxxxxxxxxx
passwd: all authentication tokens updated successfully.

为 oracle 用户帐户创建登录脚本

oracle 用户帐户分别登录到两个 Oracle RAC 节点并创建以下登录脚本 (.bash_profile):

在为每个 Oracle RAC 节点设置 Oracle 环境变量时,确保为每个 RAC 节点指定唯一的 Oracle SID。对于此示例,我使用:

  • racnode1ORACLE_SID=racdb1
  • racnode2ORACLE_SID=racdb2
[root@racnode1 ~]# su - oracle
                              
# ---------------------------------------------------
# .bash_profile
# ---------------------------------------------------
# OS User: oracle
# Application: Oracle Database Software Owner
# Version: Oracle 11g release 2
# ---------------------------------------------------

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

alias ls="ls -FA"

# ---------------------------------------------------
# ORACLE_SID
# ---------------------------------------------------
# Specifies the Oracle system identifier (SID) for
# the Oracle instance running on this node.
# Each RAC node must have a unique ORACLE_SID.
# (i.e. racdb1, racdb2,...)
# ---------------------------------------------------
ORACLE_SID=racdb1; export ORACLE_SID

# ---------------------------------------------------
# ORACLE_UNQNAME
# ---------------------------------------------------
# In previous releases of Oracle Database, you were
# required to set environment variables for
# ORACLE_HOME and ORACLE_SID to start, stop, and
# check the status of Enterprise Manager. With
# Oracle Database 11g release 2 (11.2) and later, you
# need to set the environment variables ORACLE_HOME
# and ORACLE_UNQNAME to use Enterprise Manager.
# Set ORACLE_UNQNAME equal to the database unique
# name.
# ---------------------------------------------------
ORACLE_UNQNAME=racdb; export ORACLE_UNQNAME

# ---------------------------------------------------
# JAVA_HOME
# ---------------------------------------------------
# Specifies the directory of the Java SDK and Runtime
# Environment.
# ---------------------------------------------------
JAVA_HOME=/usr/local/java; export JAVA_HOME

# ---------------------------------------------------
# ORACLE_BASE
# ---------------------------------------------------
# Specifies the base of the Oracle directory structure
# for Optimal Flexible Architecture (OFA) compliant
# database software installations.
# ---------------------------------------------------
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE

# ---------------------------------------------------
# ORACLE_HOME
# ---------------------------------------------------
# Specifies the directory containing the Oracle
# Database software.
# ---------------------------------------------------
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME

# ---------------------------------------------------
# ORACLE_PATH
# ---------------------------------------------------
# Specifies the search path for files used by Oracle
# applications such as SQL*Plus. If the full path to
# the file is not specified, or if the file is not
# in the current directory, the Oracle application
# uses ORACLE_PATH to locate the file.
# This variable is used by SQL*Plus, Forms and Menu.
# ---------------------------------------------------
ORACLE_PATH=/u01/app/common/oracle/sql; export ORACLE_PATH

# ---------------------------------------------------
# SQLPATH
# ---------------------------------------------------
# Specifies the directory or list of directories that
# SQL*Plus searches for a login.sql file.
# ---------------------------------------------------
# SQLPATH=/u01/app/common/oracle/sql; export SQLPATH

# ---------------------------------------------------
# ORACLE_TERM
# ---------------------------------------------------
# Defines a terminal definition. If not set, it
# defaults to the value of your TERM environment
# variable. Used by all character mode products.
# ---------------------------------------------------
ORACLE_TERM=xterm; export ORACLE_TERM

# ---------------------------------------------------
# NLS_DATE_FORMAT
# ---------------------------------------------------
# Specifies the default date format to use with the
# TO_CHAR and TO_DATE functions. The default value of
# this parameter is determined by NLS_TERRITORY. The
# value of this parameter can be any valid date
# format mask, and the value must be surrounded by
# double quotation marks. For example:
# # NLS_DATE_FORMAT = "MM/DD/YYYY"
# # ---------------------------------------------------
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT

# ---------------------------------------------------
# TNS_ADMIN
# ---------------------------------------------------
# Specifies the directory containing the Oracle Net
# Services configuration files like listener.ora,
# tnsnames.ora, and sqlnet.ora.
# ---------------------------------------------------
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN

# ---------------------------------------------------
# ORA_NLS11
# ---------------------------------------------------
# Specifies the directory where the language,
# territory, character set, and linguistic definition
# files are stored.
# ---------------------------------------------------
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11

# ---------------------------------------------------
# PATH
# ---------------------------------------------------
# Used by the shell to locate executable programs;
# must include the $ORACLE_HOME/bin directory.
# ---------------------------------------------------
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
# ---------------------------------------------------
# Specifies the list of directories that the shared
# library loader searches to locate shared object
# libraries at runtime.
# ---------------------------------------------------
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
# ---------------------------------------------------
# Specifies the directory or list of directories that
# contain compiled Java classes.
# ---------------------------------------------------
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
# ---------------------------------------------------
# All the tools in the JDK use green threads as a
# default. To specify that native threads should be
# used, set the THREADS_FLAG environment variable to
# "native". You can revert to the use of green
# threads by setting THREADS_FLAG to the value
# "green".
# ---------------------------------------------------
THREADS_FLAG=native; export THREADS_FLAG

# ---------------------------------------------------
# TEMP, TMP, and TMPDIR
# ---------------------------------------------------
# Specify the default directories for temporary
# files; if set, tools that create temporary files
# create them in one of these directories.
# ---------------------------------------------------
export TEMP=/tmp
export TMPDIR=/tmp

# ---------------------------------------------------
# UMASK
# ---------------------------------------------------
# Set the default file mode creation mask
# (umask) to 022 to ensure that the user performing
# the Oracle software installation creates files
# with 644 permissions.
# ---------------------------------------------------
umask 022

验证用户 nobody 存在

安装软件之前,执行以下过程,以验证在两个 Oracle RAC 节点上存在用户 nobody

 

  1. 要确定该用户是否存在,输入以下命令:
    # id nobody
    uid=99(nobody) gid=99(nobody) groups=99(nobody)

    如果该命令显示了 nobody 用户的信息,则无需创建该用户。

  2. 如果用户 nobody 不存在,则输入以下命令进行创建:
    # /usr/sbin/useradd nobody
                                      
  3. 在集群中的所有其他 Oracle RAC 节点上重复此过程。


创建 Oracle 基目录路径

最后一步是配置 Oracle 基路径,要遵循最佳灵活体系结构 (OFA) 的结构及正确的权限。需要以 root 用户身份在集群的两个 Oracle RAC 节点上完成此任务。

本指南假设在根文件系统中创建 /u01 目录。请注意,这样做是为了简便起见,不建议将其作为通用做法。通常会将 /u01 目录作为配置了硬件或软件镜像功能的单独文件系统供应。

[root@racnode1 ~]# mkdir -p /u01/app/grid
[root@racnode1 ~]# mkdir -p /u01/app/11.2.0/grid
[root@racnode1 ~]# chown -R grid:oinstall /u01
[root@racnode1 ~]# mkdir -p /u01/app/oracle
[root@racnode1 ~]# chown oracle:oinstall /u01/app/oracle
[root@racnode1 ~]# chmod -R 775 /u01

本节结束时,两个 Oracle RAC 节点应具有以下配置:

 

  • Oracle 中央清单组,即 oraInventory 组 (oinstall),其成员以中央清单组作为主组,拥有对 oraInventory 目录的写入权限。
  • 单独的 OSASM 组 (asmadmin),其成员拥有 SYSASM 权限,可以管理 Oracle Clusterware 和 Oracle ASM。
  • 单独的 ASM OSDBA 组 (asmdba),其成员包括 gridoracle,拥有对 Oracle ASM 的访问权限。
  • 单独的 ASM OSOPER 组 (asmoper),其成员包括 grid,拥有有限的 Oracle ASM 管理员权限(包括启动和停止 Oracle ASM 实例的权限)。
  • 集群的 Oracle 网格安装所有者 (grid),该用户以 oraInventory 组作为其主组,以 OSASM (asmadmin)、OSDBA for ASM (asmdba) 和 OSOPER for ASM (asmoper) 组作为其辅助组。
  • 单独的 OSDBA 组 (dba),其成员拥有 SYSDBA 权限,可以管理 Oracle 数据库。
  • 单独的 OSOPER 组 (oper),其成员包括 oracle,拥有有限的 Oracle 数据库管理员权限。
  • Oracle 数据库软件所有者 (oracle),该用户以 oraInventory 组作为其主组,以 OSDBA (dba)、OSOPER (oper) 和 OSDBA for ASM 组 (asmdba) 作为其辅助组。
  • 符合 OFA 的挂载点 /u01,在安装之前,其所有者为 grid:oinstall
  • 网格的 Oracle 基目录 /u01/app/grid,其所有者为 grid:oinstall,权限设置为 775,在安装过程中其权限设置更改为 755。网格安装所有者的 Oracle 基目录是存放 Oracle ASM 诊断和管理日志文件的位置。
  • 网格主目录 /u01/app/11.2.0/grid,其所有者为 grid:oinstall,权限设置为 775 (drwxdrwxr-x)。这些权限为安装所需,在安装过程中会更改为 root:oinstall 和 755 权限设置 (drwxr-xr-x)。
  • 在安装过程中,OUI 在路径 /u01/app/oraInventory 下创建 Oracle 清单目录。此路径的所有者一直为 grid:oinstall,使其他 Oracle 软件所有者可以写入中央清单。
  • Oracle 基目录 /u01/app/oracle,其所有者为 oracle:oinstall,权限设置为 775。


为 Oracle 软件安装用户设置资源限制

要改善 Linux 系统上的软件性能,必须对 Oracle 软件所有者用户(gridoracle)增加以下资源限制:

 

Shell 限制 limits.conf 中的条目 硬限制
打开文件描述符的最大数 nofile 65536
可用于单个用户的最大进程数 nproc 16384
进程堆栈段的最大大小 stack 10240


要进行这些更改,以 root 用户身份运行以下命令:

 

  1. 在每个 Oracle RAC 节点上,在 /etc/security/limits.conf 文件中添加以下几行代码(下面的示例显示软件帐户所有者 oraclegrid):
    [root@racnode1 ~]# cat >> /etc/security/limits.conf <<EOF
    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
    EOF
  2. 在每个 Oracle RAC 节点上,在 /etc/pam.d/login 文件中添加或编辑下面一行内容(如果不存在此行):
    [root@racnode1 ~]# cat >> /etc/pam.d/login <<EOF
    session required pam_limits.so
    EOF
  3. 根据您的 shell 环境,对默认的 shell 启动文件进行以下更改,以便更改所有 Oracle 安装所有者的 ulimit 设置(注意这里的示例显示 oraclegrid 用户):

    对于 Bourne、Bash 或 Korn shell,通过运行以下命令将以下行添加到 /etc/profile 文件:

    [root@racnode1 ~]# cat >> /etc/profile <<EOF
    if [ \$USER = "oracle" ] || [ \$USER = "grid" ]; then
    if [ \$SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
    else
    ulimit -u 16384 -n 65536
    fi
    umask 022
    fi
    EOF


    对于 C shell(csh 或 tcsh),通过运行以下命令将以下行添加到 /etc/csh.login 文件:

    [root@racnode1 ~]# cat >> /etc/csh.login <<EOF
    if ( \$USER == "oracle" || \$USER == "grid" ) then
    limit maxproc 16384
    limit descriptors 65536
    endif
    EOF

14. 使用 X 终端登录远程系统

为了安装操作系统并执行多项配置任务,本指南需要可以访问所有计算机(Oracle RAC 节点和 Openfiler)的控制台。管理少量服务器时,为了访问其控制台,将每台服务器与自己的显示器、键盘和鼠标相连可能行得通。但是,随着需要管理的服务器数量越来越多,这一解决方案变得难以实施。更实际的解决方案是配置一台专用计算机,该计算机包括一个显示器、键盘和鼠标,可以直接访问每台计算机的控制台。使用一台键盘、视频和鼠标切换设备(常称作 KVM 切换设备)可以实现该解决方案。

安装了 Linux 操作系统后,为了安装并配置 Oracle RAC,需要几个应用程序,这几个程序使用图形用户界面 (GUI) 并且需要使用 X11 显示服务器。这些 GUI 应用程序(常称为 X 应用程序)中最为有名的是 Oracle Universal Installer (OUI),尽管其他程序如 Virtual IP Configuration Assistant (VIPCA) 也需要使用 X11 显示服务器。

由于我编写此文时所基于的系统使用了 KVM 切换设备,所以我能够切换到每个节点,并且可依靠本机上的 Linux X11 显示服务器来显示 X 应用程序。

如果您不是直接登录到节点的图形控制台,而是使用某个远程客户端(如 SSH、PuTTY 或 Telnet)连接到节点,则对于任何 X 应用程序,均需在该客户端上安装一个 X11 显示服务器。例如,您要从一个 Windows 工作站远程终端连接到 racnode1,需要在该 Windows 客户端上安装一个 X11 显示服务器(如 Xming)。如果您打算从安装有 X11 显示服务器的 Windows 工作站或另一个系统安装 Oracle Grid Infrastructure 和 Oracle RAC 软件,执行以下操作:

 

  1. 在客户端工作站上启动 X11 显示服务器软件。
  2. 配置 X 服务器软件的安全设置以允许远程主机在本地系统上显示 X 应用程序。
  3. 从客户端工作站登录到您要以集群软件所有者 grid)或 Oracle RAC 软件所有者 (oracle) 在其上安装 Oracle Grid Infrastructure 软件的服务器。
  4. 以软件所有者(gridoracle)的身份设置 DISPLAY 环境:
    [root@racnode1 ~]# su - grid  

    [grid@racnode1 ~]$ DISPLAY=<your local workstation>:0.0
    [grid@racnode1 ~]$ export DISPLAY

    [grid@racnode1 ~]$ # TEST X CONFIGURATION BY RUNNING xterm
    [grid@racnode1 ~]$ xterm &

    图 16:在 Windows 上测试 X11 显示服务器,从节点 1 (racnode1) 运行 xterm


15. 为 Oracle 配置 Linux 服务器

在集群中的两个 Oracle RAC 节点上执行以下配置过程。

每次引导算机时,都需要在集群中的两个 Oracle RAC 节点上定义本节讨论的内核参数。本节提供了设置 Oracle 必需的那些内核参数的信息。第 17 节(“用于两个 Oracle RAC 节点的所有启动命令”)中说明了如何将这些参数置于启动脚本 (/etc/sysctl.conf) 中。

概述

本节主要介绍如何配置两台 Oracle RAC Linux 服务器 — 使每台服务器作好准备,以便在 Oracle Enterprise Linux 5 平台上安装 Oracle 11g 第 2 版 Grid Infrastructure 和 Oracle RAC 11g 第 2 版。具体任务包括:验证是否有足够的内存和交换空间、设置共享内存和信号、设置文件句柄的最大数量、设置 IP 本地端口范围,最后说明如何激活系统的所有内核参数。

有多种方法来配置这些参数。就本文而言,我将通过把所有设置值置于 /etc/sysctl.conf 文件中以使所有更改永久有效(通过重新引导)。

内存和交换空间考虑事项

RHEL/OEL 的最小 RAM 要求为:1.5 GB 用于集群的 Grid Infrastructure,或 2.5 GB 用于集群的 Grid Infrastructure 和 Oracle RAC。在本指南中,每个 Oracle RAC 节点上将运行 Oracle Grid Infrastructure 和 Oracle RAC,因此每台服务器至少需要 2.5 GB RAM。本文中使用的每个 RAC 节点配备了 4 GB 的物理 RAM。

所需的最小交换空间为 1.5 GB。对于 RAM 等于或小于 2 GB 的系统, Oracle 建议您将交换空间设置为 RAM 容量的 1.5 倍。对于 RAM 在 2 GB 到 16 GB 之间的系统,请使用与 RAM 同等大小的交换空间。对于 RAM 大于 16 GB 的系统,请使用 16 GB 的交换空间。

  • 要检查已拥有的内存容量,键入以下命令:
    [root@racnode1 ~]# cat /proc/meminfo | grep MemTotal 
    MemTotal:
    4038564 kB
  • 要检查已分配的交换容量,键入以下命令:
    [root@racnode1 ~]# cat /proc/meminfo | grep SwapTotal 
    SwapTotal:
    6094840 kB
  • 如果内存少于 4GB(介于 RAM 与 SWAP 之间),您可以通过创建临时交换文件添加临时交换空间。这样,您就不必使用原始设备甚至更为彻底地重建系统了。

    root 身份创建一个用作额外交换空间的文件,假设大小为 500MB:

    # dd if=/dev/zero of=tempswap bs=1k count=500000

    现在我们应更改文件的权限:

    # chmod 600 tempswap

    最后我们将该“分区”格式化为交换分区,并将其添加到交换空间:

    # mke2fs tempswap
    # mkswap tempswap
    # swapon tempswap

配置内核参数

本节中出现的内核参数只是用于 Oracle 文档的建议值。对于生产数据库系统,Oracle 建议您对这些值进行调整,以优化系统性能。

在两个 Oracle RAC 节点上,验证本节所述的内核参数的设置值大于或等于推荐值。另请注意,在设置四个信号值时,需要在同一行中输入全部四个值。

配置内核参数

RHEL/OEL 5 上的 Oracle Database 11g 第 2 版需要如下所示的内核参数设置。给出的值都是最小值,因此如果您的系统使用更大的值,则不要更改。

kernel.shmmax = 4294967295
kernel.shmall = 2097152
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
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=1048576
fs.aio-max-nr=1048576

RHEL/OEL 5 已经配置了为以下内核参数定义的默认值:

kernel.shmall
kernel.shmmax

如果这些默认值等于或大于必需值,则使用这些默认值。

本文假定采用 Oracle Enterprise Linux 5 的全新安装,则已经设置了许多必需的内核参数(见上面)。如果是这样,您以 root 用户身份登录后,只需将以下内容命令复制/粘贴到两个 Oracle RAC 节点中:

[root@racnode1 ~]# cat >> /etc/sysctl.conf <<EOF

# Controls the maximum number of shared memory segments system wide
kernel.shmmni = 4096

# Sets the following semaphore values:
# SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value
kernel.sem = 250 32000 100 128

# Sets the maximum number of file-handles that the Linux kernel will allocate
fs.file-max = 6815744

# Defines the local port range that is used by TCP and UDP
# traffic to choose the local port
net.ipv4.ip_local_port_range = 9000 65500

# Default setting in bytes of the socket "receive" buffer which
# may be set by using the SO_RCVBUF socket option
net.core.rmem_default=262144

# Maximum setting in bytes of the socket "receive" buffer which
# may be set by using the SO_RCVBUF socket option
net.core.rmem_max=4194304

# Default setting in bytes of the socket "send" buffer which
# may be set by using the SO_SNDBUF socket option
net.core.wmem_default=262144

# Maximum setting in bytes of the socket "send" buffer which
# may be set by using the SO_SNDBUF socket option
net.core.wmem_max=1048576

# Maximum number of allowable concurrent asynchronous I/O requests requests
fs.aio-max-nr=1048576
EOF

激活系统的所有内核参数

上述命令将所需的内核参数插入到 /etc/sysctl.conf 启动文件中,这样每次系统重启时这些参数保持不变。Linux 允许在系统当前已启动并运行时修改这些内核参数,所以无需在更改内核参数后重启系统。要在当前运行的系统中激活新的内核参数值,在集群中的两个 Oracle RAC 节点上,以 root 用户身份运行以下命令:

[root@racnode1 ~]# sysctl -p 
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
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
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 = 1048576
fs.aio-max-nr = 1048576

通过在集群中的两个 Oracle RAC 节点上运行以下命令来验证新的内核参数值:

[root@racnode1 ~]# /sbin/sysctl -a | grep shm 
vm.hugetlb_shm_group = 0
kernel.shmmni = 4096
kernel.shmall = 4294967296
kernel.shmmax = 68719476736

[root@racnode1 ~]# /sbin/sysctl -a | grep sem
kernel.sem = 250 32000 100 128

[root@racnode1 ~]# /sbin/sysctl -a | grep file-max
fs.file-max = 6815744

[root@racnode1 ~]# /sbin/sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 9000 65500

[root@racnode1 ~]# /sbin/sysctl -a | grep 'core\.[rw]mem'
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576

 


16. 配置 RAC 节点以便可以使用 SSH 进行远程访问(可选)

在两个 Oracle RAC 节点上执行以下可选过程,以便手动配置“grid”和“oracle”用户在两个集群成员节点之间无口令的 SSH 连接。

本文档这一节的一个最大好处是,此节是完全可选的!这并不是说没必要在 Oracle RAC 节点之间配置安全 Shell (SSH) 连接。相反,Oracle Universal Installer (OUI) 在软件安装过程中会使用安全 shell 工具 sshscp 命令对集群的其他节点运行远程命令并将文件复制到集群的其他节点上。Oracle 软件安装过程中必须对 SSH 进行配置,这些命令才不会要求输入口令。运行 SSH 命令而不要求输入口令,这种能力有时称作 用户等效性

本文这一节之所以是可选的,是因为 11g 第 2 版中的 OUI 界面包含了一个新的特性,该特性可以在 Oracle 软件的实际安装阶段为执行该安装的用户帐户自动配置 SSH。OUI 执行的自动配置会在集群的所有成员节点间创建无口令的 SSH 连接。Oracle 建议,只要有可能就使用自动配置过程。

除了在安装 Oracle 软件时使用 SSH 外,在软件安装之后,配置助手、Oracle Enterprise Manager、OPatch 以及其他执行从本地节点到远程节点的配置操作的特性也会使用 SSH。

Oracle Clusterware 11g 第 2 版及更高版本不再支持使用口令短语配置 SSH。Oracle 11g 第 2 版及更高版本需要无口令的 SSH。

由于本指南用 grid 作为 Oracle Grid Infrastructure 软件所有者,用 oracle 作为 Oracle RAC 软件所有者,因此必须为这两个用户帐户配置无口令的 SSH。

如果没有 SSH,安装程序会尝试使用 rshrcp 命令取代 sshscp。不过,在大多数 Linux 系统上,这些服务在默认情况下处于禁用状态。本文不讨论 RSH 的使用。

验证已安装 SSH 软件

Linux 发布版本支持的 SSH 版本为 OpenSSH。Linux 发布版本的最低安装应包括 OpenSSH。要确认安装了 SSH 程序包,在两个 Oracle RAC 节点上运行以下命令:

[root@racnode1 ~]# rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} 
(%{ARCH})\n"| grep ssh

openssh-askpass-4.3p2-36.el5 (x86_64)
openssh-clients-4.3p2-36.el5 (x86_64)
openssh-4.3p2-36.el5 (x86_64)
openssh-server-4.3p2-36.el5 (x86_64)

如果看不到 SSH 程序包列表,则为您的 Linux 发布版本安装这些程序包。例如,将 1 号 CD 装到每个 Oracle RAC 节点中,执行以下命令安装 OpenSSH 程序包:

[root@racnode1 ~]# mount -r /dev/cdrom /media/cdrom 
[root@racnode1 ~]# cd /media/cdrom/Server
[root@racnode1 ~]# rpm -Uvh openssh-*
[root@racnode1 ~]# cd /
[root@racnode1 ~]# eject

为何使用手动方法选项来配置 SSH 用户等效性?

如果 OUI 已包括可以自动配置两个 Oracle RAC 节点间的 SSH 的特性,我们为什么还提供一节的内容来说明如何手动配置无口令的 SSH 连接?事实上,对本文而言,为了支持 Oracle 的自动配置方法(包括在安装程序中),我已决定放弃手动配置 SSH 连接。

提供此节(手动配置 SSH)的一个原因是为了说明这样的事实:必须从所有 Oracle 软件安装所有者的配置文件中删除 stty 命令,并且删除登录时触发的、可生成发往终端的消息的其他安全措施。这些消息、邮件检查及其他显示会阻止 Oracle 软件安装所有者使用 Oracle Universal Installer 中内置的 SSH 配置脚本。如果没有禁用这些安全措施,则必须手动配置 SSH 后才可运行安装。本节稍后将介绍其他说明如何防止因 stty 命令引发的安装错误的文档。

另一个原因是,您可能决定手动配置用户等效性 SSH,以便能够在安装 Oracle 软件之前运行集群验证实用程序 (CVU)。CVU (runcluvfy.sh) 是一个非常有用的工具,位于 Oracle 集群件的根目录下。该工具不仅检查是否满足了软件安装前的所有前提条件,还能够生成称作“修复脚本”的 shell 脚本程序,从而解决许多不满足系统配置要求的问题。然而,CVU 确实有它自己的前提条件,那就是为运行安装的用户帐户正确配置 SSH 用户等效性。如果您打算使用 OUI 配置 SSH 连接,就要知道 CVU 实用程序将会失败,它没有机会执行任何关键检查。

[grid@racnode1 ~]$ /media/cdrom/grid/runcluvfy.sh stage -pre crsinst -fixup -n 
racnode1,racnode2 -verbose

Performing pre-checks for cluster services setup

Checking node reachability...

Check: Node reachability from node "racnode1"
Destination Node Reachable?
------------------------------------ ------------------------
racnode1 yes
racnode2 yes
Result: Node reachability check passed from node "racnode1"


Checking user equivalence...

Check: User equivalence for user "grid"
Node Name Comment
------------------------------------ ------------------------
racnode2 failed
racnode1 failed
Result: PRVF-4007 : User equivalence check failed for user "grid"

ERROR:
User equivalence unavailable on all the specified nodes
Verification cannot proceed


Pre-check for cluster services setup was unsuccessful on all the nodes.

请注意,在安装 Oracle 软件之前不一定非要运行 CVU 实用程序。从 Oracle 11g 第 2 版开始,安装程序会检测不满足最低安装要求的情况并执行与 CVU 相同的任务 — 生成修复脚本以解决不满足系统配置要求的问题。


在集群的所有节点上手动配置 SSH 连接

需要重申的是,在运行 OUI 之前手动配置 SSH 连接并不是必需的。在 11g 第 2 版中,OUI 在安装过程中为执行安装的用户帐户提供了一个界面,以便在所有集群成员节点之间自动创建无口令的 SSH 连接。这是 Oracle 建议采用的方法,也是本文使用的方法。我们将完成以下任务来手动配置所有集群成员节点之间的 SSH 连接,提供此手动配置过程只是为了说明之目的。要记住本指南使用 grid 作为 Oracle Grid Infrastructure 软件所有者,使用 oracle 作为 Oracle RAC 软件的所有者。如果您决定手动配置 SSH 连接,应对这两个用户帐户都进行这样的配置。

此节旨在为 gridoracle 这两个操作系统用户帐户设置用户等效性。利用用户等效性,gridoracle 用户帐户无需口令即可访问集群中的所有其他节点(运行命令和复制文件)。Oracle 在 10g 第 1 版中增加了对使用 SSH 工具套件设置用户等效性的支持。在 Oracle 数据库 10g 之前,只能使用远程 shell (RSH) 配置用户等效性。

下面示例中列出的 Oracle 软件所有者是 grid 用户。

检查系统中的现有 SSH 配置

要确定是否 SSH 已安装并运行,输入以下命令:

[grid@racnode1 ~]$ pgrep sshd 2535 19852                               

如果 SSH 正在运行,那么该命令的响应将是一个进程 ID 号(一个或多个)列表。在集群中的两个 Oracle RAC 节点上运行此命令,验证 SSH 后台程序已安装并正在运行。

您需要 SSH 协议所需的 RSA 或 DSA 密钥。RSA 用于 SSH 1.5 协议,而 DSA 则默认用于 SSH 2.0 协议。而对于 OpenSSH,您既可以使用 RSA,也可以使用 DSA。下面的说明是针对 SSH1 的。如果您安装了 SSH2,但不能使用 SSH1,那么请参考 SSH 分发文档来配置 SSH1 兼容性或使用 DSA 配置 SSH2。

使用 OUI 自动配置无口令的 SSH 会在集群的所有节点上生成 RSA 加密密钥。

在集群节点上配置无口令的 SSH

要配置无口令的 SSH,必须先在每个集群节点上生成 RSA 或 DSA 密钥,然后将所有集群节点成员上生成的所有密钥复制到 授权密钥文件 中,该文件在每个节点上都是相同的。注意,SSH 文件必须只能由 root 用户、软件安装用户(grid、oracle)读取,因为如果其他用户可以访问一个私钥文件,则 SSH 会忽略该文件。以下示例中使用 DSA 密钥。

对于安装时要使用的 Oracle 软件安装所有者(grid、oracle),您必须为每个所有者分别配置无口令的 SSH。

要配置无口令的 SSH,完成以下任务:

在每个节点上创建 SSH 目录并生成 SSH 密钥

在每个节点上完成以下步骤:

  1. 以软件所有者身份(此例中为 grid 用户)登录。
    [root@racnode1 ~]# su - grid                                   
  2. 要确保您是以 grid 登录的,并验证用户 ID 与预期的用户 ID(即您已为grid 用户分配的用户 ID)一致,输入 idid grid 命令。确保 Oracle 用户组和用户与您当前使用的用户终端窗口进程的组和用户 ID 相同。例如:
    [grid@racnode1 ~]$ id uid=1100(grid) gid=1000(oinstall)
    groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper)
    [grid@racnode1 ~]$ id grid uid=1100(grid) gid=1000(oinstall)
    groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper)
  3. 如有必要,在 grid 用户的主目录下创建.ssh 目录并设置相应权限,以确保仅 oracle 用户具有读写权限:
    [grid@racnode1 ~]$ mkdir ~/.ssh [grid@racnode1 ~]$ chmod 700 ~/.ssh                                   
    如果权限未设置为 700,SSH 配置将失败。
  4. 输入以下命令,为 SSH 协议生成 DSA 密钥对(公共密钥和私有密钥):出现提示时,接受默认的密钥文件位置和无口令短语设置(按 [Enter]):
    [grid@racnode1 ~]$ /usr/bin/ssh-keygen -t dsa 
    Generating public/private dsa key pair.
    Enter file in which to save the key (/home/grid/.ssh/id_dsa):[Enter]
    Enter passphrase (empty for no passphrase):[Enter]
    Enter same passphrase again:[Enter]
    Your identification has been saved in /home/grid/.ssh/id_dsa.
    Your public key has been saved in /home/grid/.ssh/id_dsa.pub.
    The key fingerprint is: 7b:e9:e8:47:29:37:ea:10:10:c6:b6:7d:d2:73:e9:03 grid@racnode1

    Oracle Clusterware 11g 第 2 版及更高版本不支持使用口令短语的 SSH。Oracle 11g 第 2 版及更高版本必须使用无口令的 SSH。

    此命令将 DSA 公共密钥写入 ~/.ssh/id_dsa.pub 文件,将私有密钥写入 ~/.ssh/id_dsa 文件。

    绝不要将私钥分发给任何无权执行 Oracle 软件安装的用户。

  5. 对您想使其成为集群成员的所有其他使用 DSA 密钥的节点 (racnode2) 重复第 1 步到第 4 步。


将所有密钥添加到一个公共 authorized_keys 文件

现在,每个 Oracle RAC 节点都包含用于 DSA 的公共和私有密钥,您需要在其中一个节点上创建一个授权密钥文件 (authorized_keys)。授权密钥文件只是一个包含每个用户(每个节点)的 DSA 公共密钥的文件。在授权密钥文件包含了所有公共密钥后,将其分发至集群中的所有其他节点。

每个节点上 grid 用户的 ~/.ssh/authorized_keys 文件必须包含您在所有集群节点上生成的所有 ~/.ssh/id_dsa.pub 文件中的内容。

在集群中的一个节点上完成以下步骤以生成授权密钥文件,然后分发该文件。对于此文而言,我将使用集群中的主节点 racnode1

 

  1. racnode1(本地节点)中确定所有者的主目录 .ssh 中是否存在授权密钥文件 ~/.ssh/authorized_keys。大多数情况下,该文件是不存在的,因为本文假设您正在进行新的安装。如果该文件不存在,那么现在进行创建:
    [grid@racnode1 ~]$ touch ~/.ssh/authorized_keys 
    [grid@racnode1 ~]$ ls -l ~/.ssh
    total 8
    -rw-r--r-- 1 grid oinstall 0 Nov 12 12:34 authorized_keys
    -rw------- 1 grid oinstall 668 Nov 12 09:24 id_dsa
    -rw-r--r-- 1 grid oinstall 603 Nov 12 09:24 id_dsa.pub

    .ssh 目录中,您会看到前面生成的 id_dsa.pub 密钥以及空白文件 authorized_keys

  2. 在本地节点 (racnode1) 上,使用 SCP(安全复制)或 SFTP(安全 FTP)将 ~/.ssh/id_dsa.pub 公共密钥的内容从集群中的两个 Oracle RAC 节点复制到刚才创建的授权密钥文件 (~/.ssh/authorized_keys) 中。同样,从 racnode1 进行该操作。系统将提示您为每个访问的 Oracle RAC 节点输入 grid OS 用户帐户口令。

    以下示例是在 racnode1 节点上运行的,假定集群有两个节点,分别是 racnode1racnode2

    [grid@racnode1 ~]$ ssh racnode1 cat ~/.ssh/id_dsa.pub >> 
    ~/.ssh/authorized_keys

    The authenticity of host 'racnode1 (192.168.1.151)' can't be established.
    RSA key fingerprint is 2f:0d:2c:da:9f:d4:3d:2e:ea:e9:98:20:2c:b9:e8:f5.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'racnode1,192.168.1.151' (RSA) to the list of known
    hosts.
    grid@racnode1's password:xxxxx

    [grid@racnode1 ~]$ ssh racnode2 cat ~/.ssh/id_dsa.pub >>
    ~/.ssh/authorized_keys

    The authenticity of host 'racnode2 (192.168.1.152)' can't be established.
    RSA key fingerprint is 97:ab:db:26:f6:01:20:cc:e0:63:d0:d1:73:7e:c2:0a.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'racnode2,192.168.1.152' (RSA) to the list of known
    hosts.
    grid@racnode2's password:xxxxx

    第一次使用 SSH 从某个特定系统连接到节点时,您会看到类似以下的消息:

    The authenticity of host 'racnode1 (192.168.1.151)' can't be established.
    RSA key fingerprint is 2f:0d:2c:da:9f:d4:3d:2e:ea:e9:98:20:2c:b9:e8:f5.
    Are you sure you want to continue connecting (yes/no)? yes

    在该提示下输入 yes 继续。于是,会将公共主机名添加到 ~/.ssh 目录下的 known_hosts 文件中,以后再从此系统连接到相同节点时就不会看到此消息了。

  3. 此时,racnode1 上的授权密钥文件 (~/.ssh/authorized_keys) 中含有来自集群中各个节点的 DSA 公共密钥。
    [grid@racnode1 ~]$ ls -l ~/.ssh 
    total 16
    -rw-r--r-- 1 grid oinstall 1206 Nov 12 12:45 authorized_keys
    -rw------- 1 grid oinstall 668 Nov 12 09:24 id_dsa
    -rw-r--r-- 1 grid oinstall 603 Nov 12 09:24 id_dsa.pub
    -rw-r--r-- 1 grid oinstall 808 Nov 12 12:45 known_hosts

    我们现在将其复制到集群中的其余节点。在我们的双节点集群示例中,唯一剩下的节点就是 racnode2。使用 scp 命令将授权密钥文件复制到集群中的所有其余节点:

    [grid@racnode1 ~]$ scp ~/.ssh/authorized_keys racnode2:.ssh/authorized_keys 
    grid@racnode2's password:xxxxx
    authorized_keys 100% 1206 1.2KB/s 00:00
  4. 通过登录到节点并运行以下命令,为集群中的两个 Oracle RAC 节点更改授权密钥文件的权限:
    [grid@racnode1 ~]$ chmod 600 ~/.ssh/authorized_keys                                   

在集群节点上启用 SSH 用户等效性

将包含所有公共密钥的 authorized_keys 文件复制到集群中的每个节点之后,完成本节中的各个步骤以确保正确配置了集群成员节点之间的无口令 SSH 连接。在本示例中,将使用名为 grid 的 Oracle Grid Infrastructure 软件所有者。

当您运行本节中的测试 SSH 命令时,如果看到除日期和主机名之外的任何其他消息或文本,则 Oracle 安装将失败。如果任一节点提示您输入口令或口令短语,则验证节点上的 ~/.ssh/authorized_keys 文件中包含了正确的公共密钥并且您已创建了具有同样组成员关系和 ID 的 Oracle 软件所有者。进行必要的更改,以确保您在输入这些命令时只显示日期和主机名。您应当确保对生成任何输出或询问任何问题的登录脚本的任何部分进行修改,以便它们仅当 shell 是 交互式 shell 时才会生效。

 

  1. 在您希望运行 OUI 的系统 (racnode1) 上,以 grid 用户身份登录。
    [root@racnode1 ~]# su - grid                                   
  2. 如果 SSH 配置正确,您将能够从终端对话使用 sshscp 命令,而无需提供口令或口令短语。
    [grid@racnode1 ~]$ ssh racnode1 "date;hostname" 
    Fri Nov 13 09:46:56 EST 2009
    racnode1

    [grid@racnode1 ~]$ ssh racnode2 "date;hostname"
    Fri Nov 13 09:47:34 EST 2009
    racnode2
  3. 在 Oracle RAC 集群中的其余节点 (racnode2) 上执行相同的操作,以确保这些节点同样可以访问所有其他节点而无需提供口令或口令短语,并且这些节点添加到了 known_hosts 文件中:
    [grid@racnode2 ~]$ ssh racnode1 "date;hostname" 
    The authenticity of host 'racnode1 (192.168.1.151)' can't be established.
    RSA key fingerprint is 2f:0d:2c:da:9f:d4:3d:2e:ea:e9:98:20:2c:b9:e8:f5.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'racnode1,192.168.1.151' (RSA) to the list of known
    hosts.
    Fri Nov 13 10:19:57 EST 2009
    racnode1

    [grid@racnode2 ~]$ ssh racnode1 "date;hostname"
    Fri Nov 13 10:20:58 EST 2009
    racnode1

    --------------------------------------------------------------------------

    [grid@racnode2 ~]$ ssh racnode2 "date;hostname"
    The authenticity of host 'racnode2 (192.168.1.152)' can't be established.
    RSA key fingerprint is 97:ab:db:26:f6:01:20:cc:e0:63:d0:d1:73:7e:c2:0a.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'racnode2,192.168.1.152' (RSA) to the list of known
    hosts.
    Fri Nov 13 10:22:00 EST 2009
    racnode2

    [grid@racnode2 ~]$ ssh racnode2 "date;hostname"
    Fri Nov 13 10:22:01 EST 2009
    racnode2
  4. Oracle Universal Installer 是一个 GUI 接口,要求使用 X 服务器。在启用了用户等效性的终端会话中(您将从其中执行 Oracle 安装的节点),将环境变量 DISPLAY 设置为有效的 X 窗口显示:

    Bourne、Korn 和 Bash shell:

    [grid@racnode1 ~]$ DISPLAY=<Any X-Windows Host>:0 
    [grid@racnode1 ~]$ export DISPLAY

    C shell:

    [grid@racnode1 ~]$ setenv DISPLAY <Any X-Windows Host>:0                                   

    DISPLAY 变量设置为有效的 X 窗口显示后,您应当执行当前终端会话的另一个测试,以确保未启用 X11 forwarding

    [grid@racnode1 ~]$ ssh racnode1 hostname 
    racnode1

    [grid@racnode1 ~]$ ssh racnode2 hostname
    racnode2

    如果您使用远程客户端连接到执行安装的节点,则会看到类似这样的消息:“Warning:No xauth data; using fake authentication data for X11 forwarding.”,这意味着您的授权密钥文件配置正确,但是,您的 SSH 配置启用了 X11 forwarding。例如:

    [grid@racnode1 ~]$ export DISPLAY=melody:0 
    [grid@racnode1 ~]$ ssh racnode2 hostname
    Warning: No xauth data; using fake authentication data for X11 forwarding.
    racnode2

    注意,启用 X11 Forwarding 将导致 Oracle 安装失败。要纠正这个问题,需为禁用 X11 Forwarding 的 oracle OS 用户帐户创建一个用户级 SSH 客户端配置文件:

    1. 使用文本编辑器,编辑或创建 ~/.ssh/config 文件
    2. 确保 ForwardX11 属性设为 no。例如,将以下内容插入 ~/.ssh/config 文件:
      Host *

      ForwardX11 no

防止 stty 命令引发的安装错误

在 Oracle Grid Infrastructure 或 Oracle RAC 软件的安装过程中,OUI 使用 SSH 运行命令并将文件复制到其他节点。在安装过程中,系统中的隐藏文件(例如 .bashrc.cshrc)如果包含stty 命令,则会导致生成文件错误和其他安装错误。

要避免该问题,必须在每个 Oracle 安装所有者的用户主目录中修改这些文件以取消所有 STDERR 输出,如下所示: 

  • Bourne、Bash 或 Korn shell:
    if [ -t 0 ]; then  stty intr ^C
    fi 
  • C shell:
    test -t 0 if ($status == 0) then 
    stty intr ^C
    endif

如果由远程 shell 加载的隐藏文件包含 stty 命令,则 OUI 将指示错误并停止安装。

 


17. 适用于这两个 Oracle RAC 节点的所有启动命令

验证以下启动命令都包含在集群中的两个 Oracle RAC 节点上。

至此,我们已经详细介绍了需要在 Oracle 11g RAC 集群配置的两个节点上配置的参数和资源。在本节中,我们将回顾前几节中提到的在两个 Oracle RAC 节点引导时需要使用的参数、命令和条目。

对于下面每个启动文件, 红色的条目应包含在每个启动文件中。

 

/etc/sysctl.conf

我们希望调整互连的默认和最大发送缓冲区大小以及默认和最大的接收缓冲区大小。该文件还包含负责配置由 Oracle 实例使用的共享内存、信号、文件句柄以及本地 IP 范围的参数。

.................................................................
# Kernel sysctl configuration file for Red Hat Linux
# # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536

# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536


# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296

# Controls the maximum number of shared memory segments system wide
kernel.shmmni = 4096

# Sets the following semaphore values:
# SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value
kernel.sem = 250 32000 100 128

# Sets the maximum number of file-handles that the Linux kernel will allocate
fs.file-max = 6815744

# Defines the local port range that is used by TCP and UDP
# traffic to choose the local port
net.ipv4.ip_local_port_range = 9000 65500

# Default setting in bytes of the socket "receive" buffer which
# may be set by using the SO_RCVBUF socket option
net.core.rmem_default=262144

# Maximum setting in bytes of the socket "receive" buffer which
# may be set by using the SO_RCVBUF socket option
net.core.rmem_max=4194304

# Default setting in bytes of the socket "send" buffer which
# may be set by using the SO_SNDBUF socket option
net.core.wmem_default=262144

# Maximum setting in bytes of the socket "send" buffer which
# may be set by using the SO_SNDBUF socket option
net.core.wmem_max=1048576

# Maximum number of allowable concurrent asynchronous I/O requests requests
fs.aio-max-nr=1048576

.................................................................

验证 /etc/sysctl.conf 文件中配置了每个所需内核参数。然后,在集群的两个 Oracle RAC 节点上运行以下命令,以确保每个参数真正生效:

[root@racnode1 ~]# sysctl -p 
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
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
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 = 1048576
fs.aio-max-nr = 1048576

 

/etc/hosts

我们的 RAC 集群中的节点的所有机器/IP 地址项。

.................................................................
# Do not remove the following line, or various programs
# that require network functionality will fail.


127.0.0.1 localhost.localdomain localhost

# Public Network - (eth0)
192.168.1.151 racnode1
192.168.1.152 racnode2

# Private Interconnect - (eth1)
192.168.2.151 racnode1-priv
192.168.2.152 racnode2-priv

# Public Virtual IP (VIP) addresses - (eth0:1)
192.168.1.251 racnode1-vip
192.168.1.252 racnode2-vip

# Single Client Access Name (SCAN)
192.168.1.187 racnode-cluster-scan

# Private Storage Network for Openfiler - (eth1)
192.168.1.195 openfiler1
192.168.2.195 openfiler1-priv


# Miscellaneous Nodes
192.168.1.1 router
192.168.1.105 packmule
192.168.1.106 melody
192.168.1.121 domo
192.168.1.122 switch1
192.168.1.125 oemprod
192.168.1.245 accesspoint
.................................................................

 

/etc/udev/rules.d/55-openiscsi.rules

udev 用来挂载 iSCSI 卷的规则文件。此文件包含所有用于接收事件的名称=值对以及处理事件的 SHELL 调出脚本。

.................................................................                                 
# /etc/udev/rules.d/55-openiscsi.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",
SYMLINK+="iscsi/%c/part%n"

.................................................................

/etc/udev/scripts/iscsidev.sh

SHELL 调出脚本,用于处理从 udev 规则文件(见上面)传递过来的事件,并且用于挂载 iSCSI 卷。

.................................................................                                 
#!/bin/sh

# FILE: /etc/udev/scripts/iscsidev.sh

BUS=${1}
HOST=${BUS%%:*}

[ -e /sys/class/iscsi_host ] || exit 1

file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*
/targetname"

target_name=$(cat ${file})

# This is not an open-scsi drive
if [ -z "${target_name}" ]; then
exit 1
fi

# Check if QNAP drive
check_qnap_target_name=${target_name%%:*}
if [ $check_qnap_target_name = "iqn.2004-04.com.qnap" ]; then
target_name=`echo "${target_name%.*}"`
fi

echo "${target_name##*.}"

.................................................................

18. 安装并配置 ASMLib 2.0

应在集群中的两个 Oracle RAC 节点上执行本节中的安装和配置过程。但创建 ASM 磁盘将只需在集群中的单个节点 (racnode1) 上执行。

在本节中,我们将安装并配置 ASMLib 2.0,它是 Oracle 数据库的自动存储管理 (ASM) 特性的一个支持库。本文将使用 ASM 作为 Oracle Clusterware 文件(OCR 和表决磁盘)、Oracle Database 文件(数据、联机重做日志、控制文件、存档重做日志)和快速恢复区的共享文件系统和卷管理器。

自动存储管理简化了数据库的管理工作,有了它,DBA 无需直接管理可能数千个的 Oracle 数据库文件,而只需管理分配给 Oracle 数据库的磁盘组。ASM 内置在 Oracle 内核中,既可用于 Oracle 的单实例环境中,也可用于 Oracle 的集群实例环境中。Oracle 使用的所有文件和目录将保存在 磁盘组 中 —(本文中为三个磁盘组)。ASM 在所有可用磁盘驱动器上执行并行负载平衡,以防止热点问题并最大程度地提高性能,甚至对于数据使用快速变化的模式也是如此。ASMLib 令使用 ASM 的 Oracle 数据库更加高效,并能够访问它当前使用的磁盘组。

请记住 ASMLib 只是 ASM 软件的一个支持库。本指南稍后将 ASM 软件作为 Oracle Grid Infrastructure 的一部分来安装。 从 Oracle Grid Infrastructure 11g 第 2 版 (11.2) 开始,自动存储管理和 Oracle Clusterware 软件一起打包到同一个二进制发布版本中并安装到同一个主目录中,这个主目录称为 Grid Infrastructure 主目录。Oracle Grid Infrastructure 软件将为 grid 用户所拥有。

那么,ASM 是否必须使用 ASMLib?完全不是。事实上,有两种不同方法可在 Linux 上配置 ASM: 

  • 使用 ASMLib I/O 的 ASM:此方法使用 ASMLib 调用在由 ASM 管理的原始 块设备 上创建所有 Oracle 数据库文件。由于 ASMLib 使用块设备,因此该方法不需要原始设备。
  • 使用标准 Linux I/O 的 ASM:此方法不使用 ASMLib。此方法使用标准 Linux I/O 系统调用在 ASM 管理的原始字符设备 上创建所有的 Oracle 数据库文件。您将需要为 ASM 使用的所有磁盘分区创建原始设备。

在本文中,我将使用“使用 ASMLib I/O 的 ASM”方法。Oracle 在 Metalink Note 275315.1 中说明,“所提供的 ASMLib 用于支持对 Linux 磁盘的 ASM I/O,同时不受标准 UNIX I/O API 的限制”。我计划将来执行几个测试以确定使用 ASMLib 将会带来的性能改善。这些性能度量和测试细节超出了本文的范围,因此将不予讨论。

如果要了解有关 Oracle ASMLib 2.0 的详细信息,请访问这里

安装 ASMLib 2.0 程序包

在本文的前几个版本中,此时您需要从适用于 Red Hat Enterprise Linux Server 5 的 Oracle ASMLib 下载处下载 ASMLib 2.0 软件。由于 Oracle Enterprise Linux 中包含了 ASMLib 软件,此处不再需要进行这一操作(但用户空间库除外,它需要单独下载)。ASMLib 2.0 软件体系包含下面的软件包:

32 位 (x86) 安装  

  • ASMLib 内核驱动程序
    • oracleasm-x.x.x-x.el5-x.x.x-x.el5.i686.rpm —(用于默认内核)
    • oracleasm-x.x.x-x.el5xen-x.x.x-x.el5.i686.rpm —(用于 xen 内核) 
  • 用户空间库
    • oracleasmlib-x.x.x-x.el5.i386.rpm 
  • 驱动程序支持文件
    • oracleasm-support-x.x.x-x.el5.i386.rpm

64 位 (x86_64) 安装

 

  • ASMLib 内核驱动程序
    • oracleasm-x.x.x-x.el5-x.x.x-x.el5.x86_64.rpm —(用于默认内核)
    • oracleasm-x.x.x-x.el5xen-x.x.x-x.el5.x86_64.rpm —(用于 xen 内核) 
  • 用户空间库
    • oracleasmlib-x.x.x-x.el5.x86_64.rpm 
  • 驱动程序支持文件
    • oracleasm-support-x.x.x-x.el5.x86_64.rpm

就 Oracle Enterprise Linux 5 来说,默认情况下不安装 ASMLib 2.0 软件包。5 号 CD 上有 ASMLib 2.0 内核驱动程序,3 号 CD 上有驱动程序支持文件。用户空间库需单独下载,因为 Enterprise Linux 不包含该库。要确定 Oracle ASMLib 软件包是否已安装(多数情况下没有),在两个 Oracle RAC 节点上执行以下命令:

[root@racnode1 ~]# rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} 
(%{ARCH})\n"| grep oracleasm | sort

如果未安装 ASMLib 2.0 软件包,依次加载 Enterprise Linux 3 号 CD 和 5 号 CD 到每个 Oracle RAC 节点上并执行以下命令:

From Enterprise Linux 5.4 (x86_64) - [CD #3] 
mount -r /dev/cdrom /media/cdrom cd /media/cdrom/Server
rpm -Uvh oracleasm-support-2.1.3-1.el5.x86_64.rpm
cd /
ejectFrom Enterprise Linux 5.4 (x86_64) - [CD #5]
mount -r /dev/cdrom /media/cdrom cd /media/cdrom/Server
rpm -Uvh oracleasm-2.6.18-164.el5-2.0.5-1.el5.x86_64.rpm
cd /
eject

安装完 ASMLib 软件包后,在两个 Oracle RAC 节点上验证已安装该软件:

[root@racnode1 ~]# rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} 
(%{ARCH})\n"| grep oracleasm | sort

oracleasm-2.6.18-164.el5-2.0.5-1.el5 (x86_64)
oracleasm-support-2.1.3-1.el5 (x86_64)

下载 Oracle ASMLib 用户空间库

如上节所述,ASMLib 2.0 软件包含在 Enterprise Linux 中,但用户空间库则不然(用户空间库也称做 ASMLib 支持库)。用户空间库是必需的,可在此处免费下载:

32 位 (x86) 安装  


64 位 (x86_64) 安装  


将用户空间库下载到集群中的两个 Oracle RAC 节点后,使用以下命令进行安装:

[root@racnode1 ~]# rpm -Uvh oracleasmlib-2.0.4-1.el5.x86_64.rpm 
Preparing... ########################################### [100%]
1:oracleasmlib ########################################### [100%]

有关如何通过 Unbreakable Linux Network 获取 ASMLib 支持库(并非本文必需)的信息,请访问通过 Unbreakable Linux Network 获得 Oracle ASMLib

配置 ASMLib

现在,您已安装了用于 Linux 的 ASMLib 程序包,接下来您需要配置并加载 ASM 内核模块。需要在两个 Oracle RAC 节点上作为 root 用户帐户执行该任务。

oracleasm 命令的默认路径为 /usr/sbin。以前版本中使用的 /etc/init.d 路径并未被弃用,但该路径下的 oracleasm 二进制文件现在一般用于内部命令。如果输入 oracleasm configure 命令时不带 -i 标志,则显示当前配置。例如,

[root@racnode1 ~]# /usr/sbin/oracleasm configure 
ORACLEASM_ENABLED=false
ORACLEASM_UID=
ORACLEASM_GID=
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
  1. 输入以下命令,以使用 configure 选项运行 oracleasm 初始化脚本:
    [root@racnode1 ~]# /usr/sbin/oracleasm configure -i 
    Configuring the Oracle ASM library driver.
    This will configure the on-boot properties of the Oracle ASM library driver.
    The following questions will determine whether the driver is loaded on boot
    and what permissions it will have.
    The current values will be shown in brackets ('[]').
    Hitting <ENTER> without typing an answer will keep that current value.
    Ctrl-C will abort.

    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
    Writing Oracle ASM library driver configuration: done

    该脚本完成以下任务: 

    • 创建 /etc/sysconfig/oracleasm 配置文件
    • 创建 /dev/oracleasm 挂载点
    • 挂载 ASMLib 驱动程序文件系统

    ASMLib 驱动程序文件系统并非常规的文件系统。它只用于自动存储管理库与自动存储管理驱动程序的通讯。

  2. 输入以下命令以加载 oracleasm 内核模块:
    [root@racnode1 ~]# /usr/sbin/oracleasm init 
    Creating /dev/oracleasm mount point: /dev/oracleasm
    Loading module "oracleasm": oracleasm
    Mounting ASMlib driver filesystem: /dev/oracleasm
  3. 对集群中要安装 Oracle RAC 的所有节点 (racnode2) 重复此过程。

为 Oracle 创建 ASM 磁盘

创建 ASM 磁盘只需在 RAC 集群中的一个节点上以 root 用户帐户执行。我将在 racnode1 上运行这些命令。在另一个 Oracle RAC 节点上,您将需要执行 scandisk 以识别新卷。该操作完成后,应在两个 Oracle RAC 节点上运行 oracleasm listdisks 命令以验证是否创建了所有 ASM 磁盘以及它们是否可用。

在“在 iSCSI 卷上创建分区”一节中,我们对 ASM 要使用的三个 iSCSI 卷进行了配置(分区)。ASM 将用于存储 Oracle Clusterware 文件、Oracle 数据库文件(如联机重做日志、数据库文件、控制文件、存档重做日志文件)和快速恢复区。在配置三个 ASM 卷时,使用 udev 创建的本地设备名。

要使用 iSCSI 目标名到本地设备名映射创建 ASM 磁盘,键入以下命令:

[root@racnode1 ~]# /usr/sbin/oracleasm createdisk CRSVOL1 /dev/iscsi/crs1/part1 
Writing disk header: done
Instantiating disk: done

[root@racnode1 ~]# /usr/sbin/oracleasm createdisk DATAVOL1 /dev/iscsi/data1/part1
Writing disk header: done
Instantiating disk: done

[root@racnode1 ~]# /usr/sbin/oracleasm createdisk FRAVOL1 /dev/iscsi/fra1/part1
Writing disk header: done
Instantiating disk: done

要使磁盘可用于集群中其他节点 (racnode2),以 root 用户身份在每个节点上输入以下命令:

[root@racnode2 ~]# /usr/sbin/oracleasm scandisks 
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "FRAVOL1"
Instantiating disk "DATAVOL1"
Instantiating disk "CRSVOL1"

现在,我们可以使用以下命令在 RAC 集群中的两个节点上以 root 用户帐户测试是否成功创建了 ASM 磁盘。此命令指出连接的节点的、标记为自动存储管理磁盘的共享磁盘:

[root@racnode1 ~]# /usr/sbin/oracleasm listdisks 
CRSVOL1
DATAVOL1
FRAVOL1

[root@racnode2 ~]# /usr/sbin/oracleasm listdisks
CRSVOL1
DATAVOL1
FRAVOL1

 


19. 下载 Oracle RAC 11g 第 2 版软件

只需在集群中的一个节点上执行以下下载过程。

下一步是从 Oracle 技术网 (OTN) 下载并解压缩所需的 Oracle 软件包: 

如果您目前没有 Oracle OTN 帐户,那么您需要创建一个。这是免费帐户!

Oracle 提供了一个免费的开发和测试许可。但不提供支持,且该许可不允许用于生产目的。OTN 提供了该许可协议的完整说明。



32 位 (x86) 安装

http://www.oracle.com/technetwork/cn/database/database11g/downloads/112010-linuxsoft-098940-zhs.html

64 位 (x86_64) 安装

http://www.oracle.com/technetwork/cn/database/database11g/downloads/112010-linx8664soft-098700-zhs.html

您将从 Oracle 下载所需的软件并将其解压缩到集群的一个 Linux 节点(即 racnode1)上。您将从此计算机执行所有的 Oracle 软件安装。Oracle 安装程序会通过远程访问 (scp) 将所需软件包复制到 RAC 配置中的所有其他节点。

以相应软件所有者的身份登录到要执行所有 Oracle 安装的节点 (racnode1)。例如,以 grid 用户身份登录后将 Oracle Grid Infrastructure 软件下载到 /home/grid/software/oracle 目录。然后,以 oracle 用户身份登录,将 Oracle Database 和 Oracle Examples(可选)软件下载到 /home/oracle/software/oracle 目录。

下载并解压缩 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(可选)

所有下载均在同一页面中提供。

grid 用户身份解压缩 Oracle Grid Infrastructure 软件:

[grid@racnode1 ~]$ mkdir -p /home/grid/software/oracle 
[grid@racnode1 ~]$ mv linux.x64_11gR2_grid.zip /home/grid/software/oracle
[grid@racnode1 ~]$ cd /home/grid/software/oracle
[grid@racnode1 oracle]$ unzip linux.x64_11gR2_grid.zip

oracle 用户身份解压缩 Oracle Database 和 Oracle Examples 软件:

[oracle@racnode1 ~]$ mkdir -p /home/oracle/software/oracle 
[oracle@racnode1 ~]$ mv linux.x64_11gR2_database_1of2.zip
/home/oracle/software/oracle

[oracle@racnode1 ~]$ mv linux.x64_11gR2_database_2of2.zip
/home/oracle/software/oracle

[oracle@racnode1 ~]$ mv linux.x64_11gR2_examples.zip /home/oracle/software/oracle
[oracle@racnode1 ~]$ cd /home/oracle/software/oracle
[oracle@racnode1 oracle]$ unzip linux.x64_11gR2_database_1of2.zip
[oracle@racnode1 oracle]$ unzip linux.x64_11gR2_database_2of2.zip
[oracle@racnode1 oracle]$ unzip linux.x64_11gR2_examples.zip

 


20. 集群的 Oracle Grid Infrastructure 的安装前任务

在集群中的两个 Oracle RAC 节点上执行以下检查。

本节包含尚未讨论过的 Oracle Grid Infrastructure 的其余所有安装前任务。请注意,在运行 Oracle 安装程序之前不一定要手动运行集群验证实用程序 (CVU)。在 Oracle Grid Infrastructure 安装结束时,CVU 会作为配置助手过程的一部分自动运行。

安装用于 Linux 的 cvuqdisk 程序包

在两个 Oracle RAC 节点上安装操作系统程序包 cvuqdisk。如果没有 cvuqdisk,集群验证实用程序就无法发现共享磁盘,当运行(手动运行或在 Oracle Grid Infrastructure 安装结束时自动运行)集群验证实用程序时,您会收到这样的错误消息:“Package cvuqdisk not installed”。使用适用于您的硬件体系结构(例如,x86_64 或 i386)的 cvuqdisk RPM。

cvuqdisk RPM 包含在 Oracle Grid Infrastructure 安装介质上的 rpm 目录中。对于本文,Oracle Grid Infrastructure 介质已由 grid 用户解压缩到 racnode1 节点的 /home/grid/software/oracle/grid 目录中。

要安装 cvuqdisk RPM,执行以下步骤: 

  1. 找到 cvuqdisk RPM 程序包,位于 racnode1 节点中安装介质的 rpm 目录下:
    [racnode1]:  /home/grid/software/oracle/grid/rpm/cvuqdisk-1.0.7-1.rpm
  2. grid 用户帐户将 cvuqdisk 程序包从 racnode1 复制到 racnode2
    [racnode2]:  /home/grid/software/oracle/grid/rpm/cvuqdisk-1.0.7-1.rpm
  3. root 用户身份分别登录到两个 Oracle RAC 节点:
    [grid@racnode1 rpm]$ su  

    [grid@racnode2 rpm]$ su
  4. 设置环境变量 CVUQDISK_GRP,使其指向作为 cvuqdisk 的所有者所在的组(本文为 oinstall):
    [root@racnode1 rpm]# CVUQDISK_GRP=oinstall; export CVUQDISK_GRP  

    [root@racnode2 rpm]# CVUQDISK_GRP=oinstall; export CVUQDISK_GRP
  5. 在保存 cvuqdisk RPM 的目录中,使用以下命令在两个 Oracle RAC 节点上安装 cvuqdisk 程序包:
    [root@racnode1 rpm]# rpm -iv cvuqdisk-1.0.7-1.rpm 
    Preparing packages for installation...
    cvuqdisk-1.0.7-1

    [root@racnode2 rpm]# rpm -iv cvuqdisk-1.0.7-1.rpm
    Preparing packages for installation...
    cvuqdisk-1.0.7-1

使用 CVU 验证是否满足 Oracle 集群件要求(可选)

如本节前面所述,在运行 Oracle 安装程序之前不一定要运行集群验证实用程序。从 Oracle Clusterware 11g 第 2 版开始,Oracle Universal Installer (OUI) 会检测到不满足最低安装要求的情况,并创建 shell 脚本(称为修复脚本)以完成尚未完成的系统配置步骤。如果 OUI 发现未完成的任务,它会生成修复脚本 (runfixup.sh)。在 Oracle Grid Infrastructure 安装过程中,单击 Fix and Check Again Button 之后,可以运行修复脚本。

您也可以让 CVU 在安装之前生成修复脚本。

如果您决定亲自运行 CVU,请记住要作为 grid 用户在将要执行 Oracle 安装的节点 (racnode1) 上运行。此外,必须为 grid 用户配置通过用户等效性实现的 SSH 连通性。如果您打算使用 OUI 配置 SSH 连接,则 CVU 实用程序会失败,它没有机会执行其任何的关键检查并生成修复脚本:

Checking user equivalence...

Check: User equivalence for user "grid"
Node Name Comment
------------------------------------ ------------------------
racnode2 failed
racnode1 failed
Result: PRVF-4007 : User equivalence check failed for user "grid"

ERROR:
User equivalence unavailable on all the specified nodes
Verification cannot proceed


Pre-check for cluster services setup was unsuccessful on all the nodes.

在满足了运行 CVU 实用程序的所有前提条件后,可以在安装之前手动检查集群配置,并生成修复脚本以在开始安装前更改操作系统。

[grid@racnode1 ~]$  cd /home/grid/software/oracle/grid 
[grid@racnode1 grid]$ ./runcluvfy.sh stage -pre crsinst -n racnode1,racnode2
-fixup -verbose

查看 CVU 报告。 在本文所述配置情况下,应该只发现如下的唯一一个错误:

                                   
Check: Membership of user "grid" in group "dba"
Node Name User Exists Group Exists User in Group Comment
---------------- ------------ ------------ ------------ ----------------
racnode2 yes yes no failed
racnode1 yes yes no failed
Result: Membership check for user "grid" in group "dba" failed

该检查失败的原因是,本指南通过 任务角色划分 配置创建了以角色分配的组和用户,而 CVU 不能正确识别这种配置。我们在创建任务角色划分操作系统权限组、用户和目录一节中讲述了如何创建任务角色划分配置。CVU 不能识别此类配置,因而假定 grid 用户始终是 dba 组的成员。可以放心地忽略这个失败的检查。CVU 执行的所有其他检查的结果报告应该为“passed”,之后才能继续进行 Oracle Grid Infrastructure 的安装。



使用 CVU 验证硬件和操作系统设置

接下来要运行的 CVU 检查将验证硬件和操作系统设置。同样,在 racnode1 节点上以具有用户等效性配置的 grid 用户帐户运行以下命令:

[grid@racnode1 ~]$ cd /home/grid/software/oracle/grid 
[grid@racnode1 grid]$ ./runcluvfy.sh stage -post hwos -n racnode1,racnode2
-verbose

查看 CVU 报告。CVU 执行的所有其他检查的结果报告应该为“passed”,之后才能继续进行 Oracle Grid Infrastructure 的安装。

 


第 1 页   第 2 页   第 3 页