张一山求婚的视频:基于iSCSI与Openfiler构建自己的Oracle RAC(二)

来源:百度文库 编辑:中财网 时间:2024/04/29 15:24:59

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

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


12. 创建“oracle”用户和目录

在集群中的两个 Oracle RAC 节点上执行以下任务!

在本节中,我们将创建 oracle UNIX 用户帐户、推荐的 O/S 组以及所有必需的目录。待创建的 O/S 组如下:

描述 Oracle 权限 Oracle 组名 UNIX 组名 Oracle 库存和软件所有者     oinstall 数据库管理员 SYSDBA OSDBA dba 数据库操作员 SYSOPER OSOPER oper

我们将使用 Oracle 集群文件系统第 2 版 (OCFS2) 存储需要 Oracle 集群件软件共享的文件。在使用 OCFS2 时,集群中的两个 Oracle RAC 节点上的 UNIX 用户 oracle 的 UID 和 UNIX 组“oracle”的 GID 必须相同。如果 UID 或 GID 不同,则 OCFS2 文件系统中的文件将显示为“unowned”,甚至可能被其他用户所拥有。对于本文而言,oracle UID 使用 501,“oracle”GID 使用 501。

注意,UNIX 组 oinstall 的成员被视为 Oracle 软件的“所有者”。dba 组的成员可以管理 Oracle 数据库,例如,启动和关闭数据库。可选组 oper 的成员拥有一组有限的数据库管理权限,如管理和运行备份。该组的默认名称为 oper。要使用该组,选择“Custom”安装类型来安装 Oracle 数据库软件。在本文中,我们将创建 oracle 用户帐户以承担全部责任!

创建 Oracle 的组和用户

首先,创建 UNIX oinstalldba 组以及 oracle 用户帐户:

# groupadd -g 501 oinstall# groupadd -g 502 dba# groupadd -g 503 oper# useradd -m -u 501 -g oinstall -G dba,oper -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle# id oracleuid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper)

设置 oracle 帐户的口令:

# passwd oracleChanging password for user oracle.New UNIX password: xxxxxxxxxxxRetype new UNIX password: xxxxxxxxxxxpasswd: all authentication tokens updated successfully.

验证用户 nobody 存在

安装 Oracle 软件之前,执行以下过程,以验证用户 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 数据库软件。在配置 oracle 用户的环境时(本节后面的内容),我们将把该目录的位置指定给 $ORACLE_BASE 环境变量。

以下内容假设在根文件系统中创建目录。请注意,这样做是为了简便起见,不建议将其作为通用做法。通常,这些目录将在单独的文件系统中创建。

创建目录之后,您必须为其指定正确的拥有者、组和权限。在两个 Oracle RAC 节点上执行以下命令:

# mkdir -p /u01/app/oracle# chown -R oracle:oinstall /u01/app/oracle# chmod -R 775 /u01/app/oracle

在过程结束时,您将看到以下内容:

  • /u01 由根目录拥有。
  • /u01/app 由根目录拥有。
  • /u01/app/oracle 由具有 775 权限的 oracle:oinstall 拥有。该所有权和权限允许 OUI 在 /u01/app/oracle/oraInventory 路径下创建 oraInventory 目录。

 

创建 Oracle 集群件主目录

接下来,创建一个新目录,用于存储 Oracle 集群件软件。在配置 oracle 用户的环境时(本节后面的内容),我们将把该目录的位置指定给 $ORA_CRS_HOME 环境变量。

如上一节所述,以下内容假设目录将在根文件系统中创建。这样做是为了简便起见,不建议将其作为通用做法。通常,这些目录将在单独的文件系统中创建。

创建目录之后,您必须为其指定正确的拥有者、组和权限。在两个 Oracle RAC 节点上执行以下命令:

# mkdir -p /u01/app/crs# chown -R oracle:oinstall /u01/app/crs# chmod -R 775 /u01/app/crs

在过程结束时,您将看到以下内容:

  • /u01 由根目录拥有。
  • /u01/app 由根目录拥有。
  • /u01/app/crs 由具有 775 权限的 oracle:oinstall 拥有。这些权限是安装 Oracle 集群件所需的,并且在安装过程中将被更改。

 

为 OCFS2/ 集群件创建挂载点

现在,让我们为 Oracle 集群文件系统第 2 版 (OCFS2) 创建挂载点,它将用于存储两个 Oracle 集群件共享文件。

在两个 Oracle RAC 节点上执行以下命令:

# mkdir -p /u02# chown -R oracle:oinstall /u02# chmod -R 775 /u02

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

要确保为两个 Oracle RAC 节点上的“oracle”UNIX 用户 id 正确设置环境,请使用以下 .bash_profile

当您为每个 Oracle RAC 节点设置 Oracle 环境变量时,请确保为每个 RAC 节点分配唯一的 Oracle SID!对于此示例,我使用:

  • linux1ORACLE_SID=racdb1
  • linux2ORACLE_SID=racdb2

oracle 用户帐户登录到每个节点:

# su - oracle
“oracle”用户帐户的 .bash_profile
# .bash_profile            # Get the aliases and functions            if [ -f ~/.bashrc ]; then            . ~/.bashrc            fi            alias ls="ls -FA"            export JAVA_HOME=/usr/local/java            # User specific environment and startup programs            export ORACLE_BASE=/u01/app/oracle            export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1            export ORA_CRS_HOME=/u01/app/crs            export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin            export CV_JDKHOME=/usr/local/java            # Each RAC node must have a unique ORACLE_SID. (i.e. racdb1, racdb2,...)            export ORACLE_SID=racdb1            export PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_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 NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"            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

 


13. 为 Oracle 配置 Linux 服务器

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

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

概述

本节将集中讨论针对 Oracle RAC 10g 的安装配置两台 Oracle RAC Linux 服务器的步骤。这包括验证足够的交换空间、设置共享内存和信号、设置文件句柄的最大数量、设置 IP 本地端口范围、设置对 oracle 用户的 shell 限制、激活系统的所有内核参数,以及如何验证两个集群节点的日期和时间是否正确。

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

对交换空间的考虑因素

  • 在 RHEL/OEL 5 上安装 Oracle 数据库 10g 第 2 版至少需要 1024MB 内存。(注:安装期间交换容量不足会导致 Oracle Universal Installer“挂起”或“死机”)

     

  • 要检查您已经具有的内存容量,键入:
    # cat /proc/meminfo | grep MemTotal    MemTotal: 2074084 kB

     

  • 要检查您已经分配的交换容量,键入:
    # cat /proc/meminfo | grep SwapTotal    SwapTotal: 4128760 kB

     

  • 如果您的内存少于 2,048MB(介于 RAM 与 SWAP 之间),您可以通过创建临时交换文件添加临时交换空间。这样,您就不必使用原始设备甚至更彻底地重建系统了。

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

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

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

    # chmod 600 tempswap

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

    # mke2fs tempswap
    # mkswap tempswap
    # swapon tempswap

配置内核参数

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

kernel.shmmax = 4294967295kernel.shmall = 268435456kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file-max = 65536net.ipv4.ip_local_port_range = 1024 65000net.core.rmem_default=1048576net.core.rmem_max=1048576net.core.wmem_default=262144net.core.wmem_max=262144

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

kernel.shmallkernel.shmmaxnet.core.rmem_defaultnet.core.rmem_maxnet.core.wmem_defaultnet.core.wmem_max

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

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

# cat >> /etc/sysctl.conf <

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

# sysctl -pnet.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route = 0kernel.sysrq = 0kernel.core_uses_pid = 1net.ipv4.tcp_syncookies = 1kernel.msgmnb = 65536kernel.msgmax = 65536kernel.shmmax = 4294967295kernel.shmall = 268435456net.core.rmem_default = 1048576net.core.rmem_max = 1048576net.core.wmem_default = 262144net.core.wmem_max = 262144kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file-max = 65536net.ipv4.ip_local_port_range = 1024 65000

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

# /sbin/sysctl -a | grep shmvm.hugetlb_shm_group = 0kernel.shmmni = 4096kernel.shmall = 268435456kernel.shmmax = 4294967295# /sbin/sysctl -a | grep semkernel.sem = 250        32000   100     128# /sbin/sysctl -a | grep file-maxfs.file-max = 65536# /sbin/sysctl -a | grep ip_local_port_rangenet.ipv4.ip_local_port_range = 1024     65000# /sbin/sysctl -a | grep 'core\.[rw]mem'net.core.rmem_default = 1048576net.core.wmem_default = 262144net.core.rmem_max = 1048576net.core.wmem_max = 262144

为 Oracle 用户设置 Shell 限制

要改善 Linux 系统上的软件性能,Oracle 建议您提高 oracle 用户的 shell 限制:

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

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

cat >> /etc/security/limits.conf <
cat >> /etc/pam.d/login <

为“oracle”UNIX 帐户更新默认的 shell 启动文件。

  • 对于 Bourne、Bash 或 Korn shell,通过运行以下命令将以下行添加到 /etc/profile 文件:
    cat >> /etc/profile <
  • 对于 C shell(csh 或 tcsh),通过运行以下命令将以下行添加到 /etc/csh.login 文件:
    cat >> /etc/csh.login <

在所有的集群节点上设置正确的日期和时间

在安装 Oracle 集群件、数据库以及随附 CD 期间,Oracle Universal Installer (OUI) 首先将软件安装到运行该安装程序的本地节点(即 linux1)。然后,将该软件以远程方式复制到集群中的其余节点(即 linux2)。在远程复制过程中,OUI 将在每个远程节点上执行 UNIX“tar”命令,以提取进行了存档和复制的文件。如果执行安装的节点上的日期和时间大于其要进行复制的节点上的日期和时间,那么 OUI 将在“tar”中引发一个错误,以指示其在试图提取带有时间戳的文件时失败。

Error while copying directory/u01/app/crs with exclude file list 'null' to nodes 'linux2'.[PRKC-1002 : All the submitted commands did not execute successfully]---------------------------------------------linux2:/bin/tar: ./bin/lsnodes: time stamp 2009-07-28 09:21:34 is 735 s in the future/bin/tar: ./bin/olsnodes: time stamp 2009-07-28 09:21:34 is 735 s in the future...(more errors on this node)

请注意,尽管这看起来像 OUI 中一个严重的错误,但您完全可以将其看作是一个警告而忽略。“tar”命令 DOES 确实提取了文件;然而,当您在远程节点上执行文件列表时(使用 ls -l),它们将缺少时间字段,直到服务器上的时间大于该文件的时间戳。

启动以上所述任一安装之前,确保尽可能将集群的每个成员节点设置为相同的时间和日期。由于两个 Oracle RAC 节点使用相同的参考 Network Time Protocol 服务器,因此 Oracle 强烈建议使用多数操作系统的 Network Time Protocol 功能来执行该操作。

然而,访问 Network Time Protocol 服务器并非始终可用。在这种情况下,为集群中的节点手动设置日期和时间,确保要从其中执行软件安装的节点 (linux1) 的时间和日期小于集群中所有其他节点 (linux2)。我一般使二者之间相差 20 秒,如以下示例所示:

设置 linux1 的日期和时间:

# date -s "7/28/2009 23:00:00"

设置 linux2 的日期和时间:

# date -s "7/28/2009 23:00:20"

本文中所述的双节点 RAC 配置没有使用 Network Time Protocol 服务器。

 


14. 配置 hangcheck-timer 内核模块

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

Oracle9i 第 1 版 (9.0.1) 和 Oracle9i 第 2 版 (9.2.0.1) 使用一个称为 watchdogd 的用户空间监视后台程序 监视集群的运行状况,并在出现故障时重新启动 RAC 节点。从 Oracle9i 第 2 版 (9.2.0.2) 开始(在 Oracle 10g 第 2 版中仍然存在),一个称为 hangcheck-timer 的 Linux 内核模块取代了监视后台程序,该模块更好地解决了可用性和可靠性问题。它将 hang-check 计时器加载到 Linux 内核中并检查系统是否挂起。它将设置一个计时器,并在特定的时间量之后检查该计时器。有一个用于检查挂起情况的可配置阈值,如果超过该阈值,计算机将重新引导。尽管 Oracle 集群件(集群管理器)操作不需要 hangcheck-timer 模块,但 Oracle 强烈建议使用它。

hangcheck-timer.ko 模块

hangcheck-timer 模块使用了一个基于内核的计时器,该计时器周期性地检查系统任务调度程序来捕获延迟,从而确定系统的运行状况。如果系统挂起或暂停,则计时器重置该节点。hangcheck-timer 模块使用时间戳计数器 (TSC) CPU 寄存器,该寄存器每接收到一个时钟信号就将计数加一。由于此寄存器由硬件自动更新,因此 TCS 提供了更精确的时间度量。

关于 hangcheck-timer 项目的更多信息可在此处找到。

安装 hangcheck-timer.ko 模块

hangcheck-timer 通常仅与 Oracle 一同提供,但是,现在从内核版本 2.4.9-e.12 起,该模块与 Red Hat Linux AS 包含在一起。hangcheck-timer 应当已包含在内。使用以下命令来确认您已经包含了该模块:

# find /lib/modules -name "hangcheck-timer.ko"/lib/modules/2.6.18-128.el5/kernel/drivers/char/hangcheck-timer.ko
在以上输出中,我们关注的是 /lib/modules/2.6.18-128.el5/kernel/drivers/char 目录中的 hangcheck 计时器对象 (hangcheck-timer.ko),因为这是我们运行的核心。

配置并加载 hangcheck-timer 模块

hangcheck-timer 模块有两个关键的参数:

  • hangcheck-tick:此参数定义了系统运行状况检查的间隔时间。默认值为 60 秒;Oracle 建议将它设置为 30 秒。
  • hangcheck-margin:此参数定义了 hangcheck-timer 在重置 RAC 节点前所容许的最大挂起延迟。它定义了以秒为单位的误差幅度。默认值为 180 秒;Oracle 建议将它设置为 180 秒。
这两个 hangcheck-timer 模块参数表示在该模块重置系统前 RAC 节点必须挂起的时长。当以下条件为真时将会重置节点:
system hang time > (hangcheck_tick + hangcheck_margin)
配置 Hangcheck 内核模块参数

每次加载 hangcheck-timer 内核模块(手动加载或由 Oracle 加载)时,它都需要知道对我们刚刚讨论的两个参数 (hangcheck-tickhangcheck-margin)所使用的值。这些值需要在每次重新引导 Linux 服务器后可用。为此,在 /etc/modprobe.conf 文件中创建一个具有正确值的条目,如下所示:

# su -# echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modprobe.conf
每次加载 hangcheck-timer 内核模块时,它将使用由我在 /etc/modprobe.conf 文件中创建的条目定义的值。

手动加载 Hangcheck 内核模块以进行测试

Oracle 负责在需要时加载 hangcheck-timer 内核模块。因此,不必在任何启动文件(如 /etc/rc.local)中执行 hangcheck-timer 内核模块的 modprobeinsmod

我继续在 /etc/rc.local 文件中包含 hangcheck-timer 内核模块的 modprobe 完全只是出于个人习惯。有朝一日我将戒掉这个习惯,但请注意,启动过程中包含 hangcheck-timer 内核模块的 modprobe 并无害处。

为了使自己保持清醒并能够在夜晚安睡,我始终按如下所示在每次启动时配置 hangcheck-timer 内核的加载:

# echo "/sbin/modprobe hangcheck-timer" >> /etc/rc.local

您不必在每次重新引导后使用 modprobeinsmod 手动加载 hangcheck-timer 内核模块。Oracle 会在需要时自动加载 hangcheck-timer 模块。

现在,为了测试 hangcheck-timer 内核模块以验证它是否选取我们在 /etc/modprobe.conf 文件中定义的正确参数,使用 modprobe 命令。尽管可以通过向其传递相应的参数(如 insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180)加载 hangcheck-timer 内核模块,但我们需要验证它是否选取了我们在 /etc/modprobe.conf 文件中设置的选项。

要手动加载 hangcheck-timer 内核模块并验证它是否使用在 /etc/modprobe.conf 文件中定义的正确值,运行以下命令:

# su -# modprobe hangcheck-timer# grep Hangcheck /var/log/messages | tail -2Jul 30 17:50:43 linux1 kernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 30 seconds, margin is 180 seconds).Jul 30 17:50:43 linux1 kernel: Hangcheck: Using get_cycles().

 


15. 使用 SSH 为远程访问配置 RAC 节点

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

在安装 Oracle RAC 10g 之前,您必须为 UNIX 用户帐户配置安全 shell (SSH),该帐户将用于安装 Oracle 集群件 10g 和 Oracle 数据库 10g 软件。本节中所述的安装和配置任务需要在两个 Oracle RAC 节点上执行。如本文前面所配置的那样,Oracle 集群件 10g 和 Oracle 数据库 10g 软件的所有者将是“oracle”。

此处的目的是为 oracle UNIX 用户帐户设置用户等效性。利用用户等效性 (User equivalence),oracle UNIX 用户帐户无需口令就可访问集群中的所有其他节点(运行命令和复制文件)。Oracle 在 10g 第 1 版中增加了将 SSH 工具套件用于设置用户等效项的支持。在 Oracle 数据库 10g 之前,用户等效性必须使用远程 shell (RSH) 进行配置。

本文中所述的 SSH 配置采用 SSH1。如果 SSH 不可用,则 OUI 将转而尝试使用 rshrcp。不过,在大多数 Linux 系统上,这些服务在默认情况下处于禁用状态。本文不讨论 RSH 的使用。

您需要 SSH 协议所需的 RSA 或 DSA 密钥。RSA 用于 SSH 1.5 协议,而 DSA 则默认用于 SSH 2.0 协议。利用 OpenSSH,您既可以使用 RSA,也可以使用 DSA。针对本文,我们将使用 SSH1 来配置 SSH。

如果您安装了 SSH2,但不能使用 SSH1,那么请参考 SSH 分发文档来配置 SSH1 兼容性或使用 DSA 配置 SSH2。此类配置超出了本文的范围,因而将不会就其进行论述。

那么,我们为什么必须设置用户等效性?安装 Oracle 集群件和 Oracle 数据库软件只在 RAC 集群中的一个节点上进行。在特定节点上运行 Oracle Universal Installer (OUI) 时,它将使用 sshscp 命令在集群内的所有其他节点上运行远程命令,并向这些节点复制文件(Oracle 软件)。运行 OUI (runInstaller) 的节点上的 oracle UNIX 用户帐户必须受到您的 RAC 集群中其他所有节点的信任。这意味着,相对于集群中的所有其他 Linux 服务器,您必须能够在将要运行 OUI 的 Linux 服务器上运行安全 shell 命令(sshscp),而不会收到输入口令的提示

注意,普通 RAC 操作无需使用安全 shell。然而,对于 RAC 和补丁集安装以及创建集群数据库时,必须启用该配置。

下面章节将介绍配置 SSH1、RSA 密钥和用户等效性所需的方法。

配置安全 Shell

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

# pgrep sshd2400

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

要了解更多有关 SSH 的信息,请参阅以下 man 页:

# man ssh

在两个 Oracle RAC 节点上创建 RSA 密钥

配置 SSH 的第一步是在集群中的两个 Oracle RAC 节点上创建 RSA 公钥/私钥对。执行该操作的命令将为 RSA 创建一个公共密钥和一个私有密钥(每个节点总共 2 个密钥)。然后,需要将 RSA 公共密钥的内容复制到一个授权密钥文件 中,之后将该文件分发到集群中的两个 Oracle RAC 节点。

使用以下步骤创建 RSA 密钥对。请注意,集群中的两个 Oracle RAC 节点上均需要完成这些步骤:

  1. oracle UNIX 用户帐户进行登录。
    # su - oracle
  2. 如果必要,在 oracle 用户的主目录下创建 .ssh 目录,并设置正确的权限,以确保仅 oracle 用户具有读写权限:
    $ mkdir -p ~/.ssh    $ chmod 700 ~/.ssh
  3. 输入以下命令,为 SSH 协议生成 RSA 密钥对(公共密钥和私有密钥):
    $ /usr/bin/ssh-keygen -t rsa

    在提示符下:

    • 接受针对密钥文件的默认位置(按 [ENTER] 键)。
    • 输入并确认口令短语。该口令应当与 oracle UNIX 用户帐户口令不同,但这不是必需的。

     

    该命令会将公共密钥写入 ~/.ssh/id_rsa.pub 文件,将私有密钥写入 ~/.ssh/id_rsa 文件。注意,始终不要将密钥分发给任何人!

  4. 为集群中的两个 Oracle RAC 节点重复以上步骤。

 

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

在集群中的其中一个节点上完成以下步骤,然后分发授权密钥文件。考虑到本文的目的,我将使用 linux1

  1. 首先,确定该节点上是否已经存在授权密钥文件 (~/.ssh/authorized_keys)。在多数情况下,该文件是不存在的,因为本文假设您使用的是新安装。如果该文件不存在,那么现在开始创建:
    $ touch ~/.ssh/authorized_keys    $ cd ~/.ssh    $ ls -l *.pub    -rw-r--r-- 1 oracle oinstall 395 Jul 30 18:51 id_rsa.pub

    以上清单应当显示上一节中创建的 id_rsa.pub 公共密钥。

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

    以下示例将从 linux1 运行,假设这是个双节点集群,即节点 linux1linux2

    $ ssh linux1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys    The authenticity of host 'linux1 (192.168.1.100)' can't be established.    RSA key fingerprint is 46:0f:1b:ac:a6:9d:86:4d:38:45:85:76:ad:3b:e7:c9.    Are you sure you want to continue connecting (yes/no)? yes    Warning: Permanently added 'linux1,192.168.1.100' (RSA) to the list of known hosts.    oracle@linux1's password: xxxxx    $ ssh linux2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys    The authenticity of host 'linux2 (192.168.1.101)' can't be established.    RSA key fingerprint is eb:39:98:a7:d9:61:02:a2:80:3b:75:71:70:42:d0:07.    Are you sure you want to continue connecting (yes/no)? yes    Warning: Permanently added 'linux2,192.168.1.101' (RSA) to the list of known hosts.    oracle@linux2's password: xxxxx

    第一次使用 SSH 从特定系统连接到节点时,您可能会看见一条类似如下所示的消息:

    The authenticity of host 'linux1 (192.168.1.100)' can't be established.    RSA key fingerprint is 46:0f:1b:ac:a6:9d:86:4d:38:45:85:76:ad:3b:e7:c9.    Are you sure you want to continue connecting (yes/no)? yes

    在提示符下输入 yes 进行确认。如果从该系统连接到相同的节点,您将不会再次看到该消息。

  3. 此时,在 linux1 上,我们在授权密钥文件 (~/.ssh/authorized_keys) 中获得了来自集群中各个节点的 RSA 公共密钥内容。我们现在将其复制到集群中的其余节点。在这个双节点集群示例中,唯一剩下的节点就是 linux2。使用 scp 命令将授权密钥文件复制到集群中的其余所有节点:
    $ scp ~/.ssh/authorized_keys linux2:.ssh/authorized_keys    oracle@linux2's password: xxxxx    authorized_keys                 100%  790     0.8KB/s   00:00
  4. 通过登录到节点并运行以下命令,为集群中的两个 Oracle RAC 节点更改授权密钥文件的权限:
    $ chmod 600 ~/.ssh/authorized_keys
  5. 此时,如果在另一个节点上使用 ssh 登录或运行命令,则会提示您输入在创建 RSA 密钥时指定的口令短语。例如,在 linux1 中测试以下内容:
    $ ssh linux1 hostname    Enter passphrase for key '/home/oracle/.ssh/id_rsa': xxxxx    linux1    $ ssh linux2 hostname    Enter passphrase for key '/home/oracle/.ssh/id_rsa': xxxxx    linux2
    如果除主机名外,您还看到任何其他消息或文本,则 Oracle 安装可能失败了。进行必要的更改,以确保您在输入这些命令时只有主机名显示。您应当确保修改生成任何输出或询问任何问题的登录脚本的任何部分,以便它们仅当 shell 是交互式 shell 时才会生效。

为当前 Shell 会话启用 SSH 用户等效性

运行 OUI 时,需要不用提示输入口令短语就可运行安全 shell 工具命令(sshscp)。尽管集群中的两个 Oracle RAC 节点上都配置了 SSH,使用安全 shell 工具命令时仍会提示输入口令短语。因此,在运行 OUI 之前,您需要为打算从其中运行 OUI 的终端会话启用用户等效性。考虑到本文目的,所有 Oracle 安装都将在 linux1 中进行。

在尝试运行 OUI 之前,需要在任何新的终端 shell 会话中启用用户等效性。如果您注销并又重新登录将从其中执行 Oracle 安装的节点,那么您必须为终端 shell 会话启用用户等效性,因为这不是默认设置。

要为当前终端 shell 会话启用用户等效性,执行以下步骤:

  1. 作为 oracle UNIX 用户帐户登录到您要在其上运行 OUI 的节点 (linux1)。
    # su - oracle

     

  2. 输入以下命令:
    $ exec /usr/bin/ssh-agent $SHELL    $ /usr/bin/ssh-add    Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx    Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)

    在提示符下,为生成的每个密钥输入口令短语。

  3. 如果 SSH 配置正确,您将能够从该终端对话使用 sshscp 命令,而无需提供口令或口令短语。
    $ ssh linux1 "date;hostname"    Thu Jul 30 19:32:49 EDT 2009    linux1    $ ssh linux2 "date;hostname"    Thu Jul 30 19:33:06 EDT 2009    linux2

    以上命令应显示两个 Oracle RAC 节点上设置的日期及其主机名。如果任何节点提示输入口令或口令短语,则验证位于该节点上的 ~/.ssh/authorized_keys 文件是否包含正确的公共密钥。此外,如果除日期和主机名外,您还看到其他任何消息或文本,则 Oracle 安装可能失败了。进行必要的更改,以确保您在输入这些命令时只显示日期和主机名。您应当确保修改生成任何输出或询问任何问题的登录脚本的任何部分,以便它们仅当 shell 是交互式 shell 时才会生效。

  4. Oracle Universal Installer 是一个 GUI 接口,要求使用 X 服务器。在启用了用户等效性的终端会话中(您将从其中执行 Oracle 安装的节点),将环境变量 DISPLAY 设置为有效的 X 窗口显示:

    Bourne、Korn 和 Bash shell:

    $ DISPLAY=:0
    $ export DISPLAY

    C shell:

    $ setenv DISPLAY :0

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

    $ ssh linux1 hostname    linux1    $ ssh linux2 hostname    linux2

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

    $ export DISPLAY=melody:0    $ ssh linux2 hostname    Warning: No xauth data; using fake authentication data for X11 forwarding.    linux2

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

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

       

  5. 您必须从该终端会话运行 Oracle Universal Installer,或记住在从不同终端会话启动 Oracle Universal Installer 之前,重复这些步骤(本节的步骤 2、3 和 4)以启用用户等效性。

删除所有 stty 命令

在安装 Oracle 软件时,系统上任何包含 stty 命令的隐藏文件(即 .bashrc.cshrc.profile)都将导致安装过程失败。

要避免该问题,您必须修改这些文件以取消所有关于 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 将指示错误并停止安装。

 


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

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

至此,我们已经详细介绍了配置 Oracle 10g RAC 时需要在两个节点上配置的参数和资源。在本节中,我们将简要回顾这些参数、命令和条目(在本文前几节中提到过),当两个 Oracle RAC 节点引导时需要执行它们。

对于以下的每个启动文件,都应将灰色的条目包含在每个启动文件中。


/etc/modprobe.conf

(所有要由内核模块使用的参数和值。)

.................................................................alias eth0 r8169alias eth1 e1000alias scsi_hostadapter ata_piixalias snd-card-0 snd-intel8x0options snd-card-0 index=0options snd-intel8x0 index=0remove snd-intel8x0 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180.................................................................


/etc/sysctl.conf

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

.................................................................# Kernel sysctl configuration file for Oracle Enterprise Linux## For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and# sysctl.conf(5) for more details.# Controls IP packet forwardingnet.ipv4.ip_forward = 0# Controls source route verificationnet.ipv4.conf.default.rp_filter = 1# Do not accept source routingnet.ipv4.conf.default.accept_source_route = 0# Controls the System Request debugging functionality of the kernelkernel.sysrq = 0# Controls whether core dumps will append the PID to the core filename# Useful for debugging multi-threaded applicationskernel.core_uses_pid = 1# Controls the use of TCP syncookiesnet.ipv4.tcp_syncookies = 1# Controls the maximum size of a message, in byteskernel.msgmnb = 65536# Controls the default maxmimum size of a mesage queuekernel.msgmax = 65536# +---------------------------------------------------------+# | ADJUSTING NETWORK SETTINGS                              |# +---------------------------------------------------------+# | With Oracle 9.2.0.1 and onwards, Oracle now makes use   |# | of UDP as the default protocol on Linux for             |# | inter-process communication (IPC), such as Cache Fusion |# | and Cluster Manager buffer transfers between instances  |# | within the RAC cluster. Oracle strongly suggests to     |# | adjust the default and maximum receive buffer size      |# | (SO_RCVBUF socket option) to 1024 MB, and the default   |# | and maximum send buffer size (SO_SNDBUF socket option)  |# | to 256 KB. The receive buffers are used by TCP and UDP  |# | to hold received data until it is read by the           |# | application. The receive buffer cannot overflow because |# | the peer is not allowed to send data beyond the buffer  |# | size window. This means that datagrams will be          |# | discarded if they don't fit in the socket receive       |# | buffer. This could cause the sender to overwhelm the    |# | receiver.                                               |# +---------------------------------------------------------+# +---------------------------------------------------------+# | Default setting in bytes of the socket "receive" buffer |# | which may be set by using the SO_RCVBUF socket option.  |# +---------------------------------------------------------+net.core.rmem_default=1048576# +---------------------------------------------------------+# | Maximum setting in bytes of the socket "receive" buffer |# | which may be set by using the SO_RCVBUF socket option.  |# +---------------------------------------------------------+net.core.rmem_max=1048576# +---------------------------------------------------------+# | 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=262144# +---------------------------------------------------------+# | ADJUSTING ADDITIONAL KERNEL PARAMETERS FOR ORACLE       |# +---------------------------------------------------------+# | Configure the kernel parameters for all Oracle Linux    |# | servers by setting shared memory and semaphores,        |# | setting the maximum amount of file handles, and setting |# | the IP local port range.                                |# +---------------------------------------------------------+# +---------------------------------------------------------+# | SHARED MEMORY                                           |# +---------------------------------------------------------+# Controls the maximum shared segment size, in byteskernel.shmmax = 4294967295# Controls the maximum number of shared memory segments, in pageskernel.shmall = 268435456# Controls the maximum number of shared memory segments system widekernel.shmmni = 4096# +---------------------------------------------------------+# | SEMAPHORES                                              |# | ----------                                              |# |                                                         |# | SEMMSL_value  SEMMNS_value  SEMOPM_value  SEMMNI_value  |# |                                                         |# +---------------------------------------------------------+kernel.sem=250 32000 100 128# +---------------------------------------------------------+# | FILE HANDLES                                            |# ----------------------------------------------------------+fs.file-max=65536# +---------------------------------------------------------+# | LOCAL IP RANGE                                          |# ----------------------------------------------------------+net.ipv4.ip_local_port_range=1024 65000.................................................................

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

# sysctl -pnet.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route = 0kernel.sysrq = 0kernel.core_uses_pid = 1net.ipv4.tcp_syncookies = 1kernel.msgmnb = 65536kernel.msgmax = 65536net.core.rmem_default = 1048576net.core.rmem_max = 1048576net.core.wmem_default = 262144net.core.wmem_max = 262144kernel.shmmax = 4294967295kernel.shmall = 268435456kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file-max = 65536net.ipv4.ip_local_port_range = 1024 65000


/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.100    linux1192.168.1.101    linux2# Private Interconnect - (eth1)192.168.2.100    linux1-priv192.168.2.101    linux2-priv# Public Virtual IP (VIP) addresses - (eth0:1)192.168.1.200    linux1-vip192.168.1.201    linux2-vip# Private Storage Network for Openfiler - (eth1)192.168.1.195    openfiler1192.168.2.195    openfiler1-priv# Miscellaneous Nodes192.168.1.1      router192.168.1.102    alex192.168.1.103    nascar192.168.1.105    packmule192.168.1.106    melody192.168.1.120    cartman192.168.1.121    domo192.168.1.122    switch1192.168.1.190    george192.168.1.245    accesspoint.................................................................


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

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


/etc/udev/scripts/iscsidev.sh

.................................................................#!/bin/sh# FILE: /etc/udev/scripts/iscsidev.shBUS=${1}HOST=${BUS%%:*}[ -e /sys/class/iscsi_host ] || exit 1file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"target_name=$(cat ${file})# This is not an open-scsi driveif [ -z "${target_name}" ]; thenexit 1fiecho "${target_name##*.}".................................................................


/etc/rc.local

(加载 hangcheck-timer 内核模块。)

.................................................................#!/bin/sh## This script will be executed *after* all the other init scripts.# You can put your own initialization stuff in here if you don't# want to do the full Sys V style init stuff.touch /var/lock/subsys/local# +---------------------------------------------------------+# | HANGCHECK TIMER                                         |# | (I do not believe this is required, but doesn't hurt)   |# +---------------------------------------------------------+/sbin/modprobe hangcheck-timer.................................................................

 


17. 安装和配置 Oracle 集群文件系统 (OCFS2)

应在集群中的这两个 Oracle RAC 节点上执行本节中的大多数安装和配置过程!但创建 OCFS2 文件系统应只在 RAC 集群中的一个节点上执行。

现在,开始安装和配置 Oracle 集群文件系统第 2 版 (OCFS2) 软件。由 Oracle Corporation 开发的 OCFS2 是一个集群文件系统,它允许集群中的所有节点通过标准文件系统接口并发访问一个设备。这样便可以对需要在集群中运行的应用程序进行轻松地管理。

OCFS(第 1 版)于 2002 年 12 月发布,使 Oracle 真正应用集群 (RAC) 用户可以运行集群化数据库而不必处理原始设备。文件系统是为存储数据库相关文件(如数据文件、控制文件、重做日志、存档日志等)设计的。OCFS2 是下一代 Oracle 集群文件系统。它是作为一个通用集群文件系统而设计的。使用它,用户不但可以在共享磁盘上存储与数据库相关的文件,而且还可以存储 Oracle 二进制文件和配置文件(如共享的 Oracle Home),从而使 RAC 的管理变得更简单。

在本指南中,您将使用 Oracle Enterprise Linux 5.3 版中包含的 OCFS2(OCFS2 版本 1.2.9-1)来存储 Oracle 集群件软件所需共享的这两个文件。除了这两个文件以外,您还将使用此空间存储所有 Oracle ASM 实例的共享 SPFILE。

有关适用于 Linux 的 OCFS2 的更多信息(包括安装说明),请参见本页面。

安装 OCFS2

在本文的前面几个版本中,现在您应该需要从 http://oss.oracle.com/ 下载 OCFS2 软件。由于 Oracle Enterprise Linux 中包含了 OCFS2,我们不再需要进行这一操作。OCFS2 软件堆栈包含以下软件包:

32 位 (x86) 安装

  • OCFS2 内核驱动程序
    • ocfs2-x.x.x-x.el5-x.x.x-x.el5.i686.rpm —(用于默认内核)
    • ocfs2-x.x.x-x.el5PAE-x.x.x-x.el5.i686.rpm —(用于 PAE 内核)
    • ocfs2-x.x.x-x.el5xen-x.x.x-x.el5.i686.rpm —(用于 xen 内核)

     

  • OCFS2 工具
    • ocfs2-tools-x.x.x-x.el5.i386.rpm

     

  • OCFS2 工具开发
    • ocfs2-tools-devel-x.x.x-x.el5.i386.rpm

     

  • OCFS2 控制台
    • ocfs2console-x.x.x-x.el5.i386.rpm

 

64 位 (x86_64) 安装

  • OCFS2 内核驱动程序
    • ocfs2-x.x.x-x.el5-x.x.x-x.el5.x86_64.rpm —(用于默认内核)
    • ocfs2-x.x.x-x.el5PAE-x.x.x-x.el5.x86_64.rpm —(用于 PAE 内核)
    • ocfs2-x.x.x-x.el5xen-x.x.x-x.el5.x86_64.rpm —(用于 xen 内核)

     

  • OCFS2 工具
    • ocfs2-tools-x.x.x-x.el5.x86_64.rpm

     

  • OCFS2 工具开发
    • ocfs2-tools-devel-x.x.x-x.el5.x86_64.rpm

     

  • OCFS2 控制台
    • ocfs2console-x.x.x-x.el5.x86_64.rpm

 

就 Oracle Enterprise Linux 5.3 来说,默认情况下不会安装 OCFS2 软件包。CD #3 包含 OCFS2 软件包。要确定 OCFS2 软件包是否已安装(多数情况下没有),在两个 Oracle RAC 节点上执行以下命令:

# rpm -qa | grep ocfs2 | sort

如果未安装 OCFS2 软件包,请将 Oracle Enterprise Linux 3 号 CD 加载到每个 Oracle RAC 节点,然后执行以下命令:

From Oracle Enterprise Linux 5 - [CD #3]# mount -r /dev/cdrom /media/cdrom# cd /media/cdrom/Server# rpm -Uvh ocfs2-tools-1.2.7-1.el5.i386.rpm# rpm -Uvh ocfs2-2.6.18-128.el5-1.2.9-1.el5.i686.rpm# rpm -Uvh ocfs2console-1.2.7-1.el5.i386.rpm# cd /# eject

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

# rpm -qa | grep ocfs2 | sortocfs2-2.6.18-128.el5-1.2.9-1.el5ocfs2console-1.2.7-1.el5ocfs2-tools-1.2.7-1.el5

禁用 SELinux(RHEL4 U2 以及更高版本)

对于使用 RHEL4 U2 及更高版本(Oracle Enterprise Linux 5.3 基于 RHEL 5.3)的用户,我们建议 OCFS2 当前不要在启用 SELinux 的情况下运行。如果您现在使用的是 RHEL4 U2 或更高版本(由于我们用的是 Oracle Enterprise Linux 5.3,这部分用户也包括我们),您需要确认已禁用 SELinux,以便执行 O2CB 服务。

在安装 Oracle Enterprise Linux 时,我们在 SELinux 屏幕上禁用 了 SELinux。不过,如果您在安装过程中没有禁用 SELinux,可以使用工具 system-config-securitylevel 来禁用 SELinux。

要禁用 SELinux(或验证它已禁用),运行“Security Level Configuration”GUI 实用程序:

# /usr/bin/system-config-securitylevel &

这将显示以下屏幕:


图 16:Security Level Configuration 打开屏幕/防火墙禁用

现在,单击 SELinux 选项卡,并选择“Disabled”选项。单击 [OK] 后,将显示一个警告对话框。只需单击“Yes”确认该警告。禁用 SELinux 选项后,屏幕现在应如下所示:


图 17:禁用了 SELinux

如果此处您需要在任一节点上禁用 SELinux,这些节点将需要重新引导以实施更改。在继续配置 OCFS2 之前,必须禁用 SELinux!

配置 OCFS2

按照 Oracle 的建议,我们将 OCFS2 配置为使用专用 网络 (192.168.2.0) 来进行其所有的网络通信。尽管 OCFS2 使用的带宽并不富裕,但它确实需要各节点在网络上保持活动状态并定期发送 keepalive 数据包以确保它们在网络上的存在。为了避免因网络延迟而误认为节点从网络上消失(这可导致节点自我隔离),建议使用专用互连。对 Oracle RAC 和 OCFS2 使用相同的专用互连是安全的。

一个常见的问题是,应该使用哪种节点名称,该节点名称是否应与 IP 地址相关联?节点名称需要与计算机的主机名相匹配。而 IP 地址不需要与该主机名相关联。换言之,可以使用该节点上任意有效的 IP 地址。OCFS2 不会尝试将节点名(主机名)与指定的 IP 地址相匹配。

下一步是在集群中的两个 Oracle RAC 节点上生成和配置 /etc/ocfs2/cluster.conf 文件。完成此操作最简单的方法是运行 GUI 工具 ocfs2console。在本节中,我们不但使用 ocfs2console 创建和配置 /etc/ocfs2/cluster.conf 文件,而且还创建和启动集群堆栈 O2CB。如果 /etc/ocfs2/cluster.conf 文件不存在(本示例中便是这种情况),ocfs2console 工具将创建该文件以及一个默认集群名为 ocfs2 的新集群堆栈服务 (O2CB)。您将需要以 root 用户帐户在集群中的两个 Oracle RAC 节点上执行该操作:

$ su -
# ocfs2console &

这将显示如下所示的 GUI:


图 18:ocfs2console GUI

使用 ocfs2console GUI 工具执行以下步骤:

  1. 选择 [Cluster] -> [Configure Nodes...]。这将启动 OCFS2 集群堆栈(图 19)并显示“Node Configuration”对话框。
  2. 在“Node Configuration”对话框上,单击 [Add] 按钮。
    • 这将显示“Add Node”对话框。
    • 在“Add Node”对话框中,输入集群中第一个节点的 Host nameIP address。保留 IP Port 的默认值 7777。在我的示例中,我添加了两个节点,即用 linux1 / 192.168.2.100 表示第一个节点,用 linux2 / 192.168.2.101 表示第二个节点。
      输入的节点名“必须”与计算机的主机名相匹配,IP 地址将使用专用 互连。
    • 单击“Node Configuration”对话框上的 [Apply] — 所有节点现在将处于“Active”状态,如图 20 所示。
    • 单击“Node Configuration”对话框上的 [Close]。
  3. 确认所有值均正确后,使用 [File] -> [Quit] 退出应用程序。需要在集群的两个 Oracle RAC 节点上执行该操作。

 


图 19:启动 OCFS2 集群堆栈

以下对话框显示了节点 linux1linux2 使用的 OCFS2 设置:


图 20:为 OCFS2 配置节点

如果发生错误,请参考故障诊断一节:

    o2cb_ctl: Unable to access cluster service while creating node

退出 ocfs2console 后,将获得一个类似如下所示的 /etc/ocfs2/cluster.conf。需要在集群中的两个 Oracle RAC 节点上完成该过程,并且所有节点的 OCFS2 配置文件必须完全相同:

node:ip_port = 7777ip_address = 192.168.2.100number = 0name = linux1cluster = ocfs2node:ip_port = 7777ip_address = 192.168.2.101number = 1name = linux2cluster = ocfs2cluster:node_count = 2name = ocfs2

O2CB 集群服务

在使用 OCFS2 执行任何操作(如格式化或挂载文件系统)之前,我们需要先运行 OCFS2 的集群堆栈 O2CB(它将是以上执行的配置过程的结果)。此堆栈包含以下服务:

  • NM:用于跟踪 cluster.conf 中的所有节点的节点管理器
  • HB:当节点加入或离开集群时向上/向下发出通知的心跳服务
  • TCP:处理节点之间的通信
  • DLM:用于跟踪所有锁、这些锁的所有者和状态的分布式锁管理器
  • CONFIGFS:在 /config 中挂载的用户空间驱动的配置文件系统
  • DLMFS:用户空间与内核空间 DLM 的接口

 

已将以上所有集群服务打包到 o2cb 系统服务 (/etc/init.d/o2cb) 中。以下是 o2cb 系统服务的某些更有用的命令和选项的简要列表。

以下命令仅用于进行说明,在安装和配置本文所述的 OCFS2 时无需运行!

  • /etc/init.d/o2cb status
    Module "configfs": Loaded    Filesystem "configfs": Mounted    Module "ocfs2_nodemanager": Loaded    Module "ocfs2_dlm": Loaded    Module "ocfs2_dlmfs": Loaded    Filesystem "ocfs2_dlmfs": Mounted    Checking O2CB cluster ocfs2: Online    Heartbeat dead threshold: 31    Network idle timeout: 30000    Network keepalive delay: 2000    Network reconnect delay: 2000    Checking O2CB heartbeat: Not active

     

  • /etc/init.d/o2cb offline ocfs2
    Stopping O2CB cluster ocfs2: OK
    以上命令将使我们创建的集群 ocfs2 处于脱机状态。

     

  • /etc/init.d/o2cb unload
    Unmounting ocfs2_dlmfs filesystem: OK    Unloading module "ocfs2_dlmfs": OK    Unmounting configfs filesystem: OK    Unloading module "configfs": OK
    以上命令将卸载所有 OCFS2 模块。

     

  • /etc/init.d/o2cb load
    Loading module "configfs": OK    Mounting configfs filesystem at /sys/kernel/config: OK    Loading module "ocfs2_nodemanager": OK    Loading module "ocfs2_dlm": OK    Loading module "ocfs2_dlmfs": OK    Mounting ocfs2_dlmfs filesystem at /dlm: OK
    加载所有 OCFS2 模块。

     

  • /etc/init.d/o2cb online ocfs2
    Starting O2CB cluster ocfs2: OK
    以上命令将使我们创建的集群 ocfs2 处于联机状态。

     

 

配置 O2CB 在引导时启动并调整 O2CB 心跳阈值

您现在需要配置 OC2B 驱动程序的引导属性,以便在每次引导时将启动集群堆栈服务。您还需要将 OCFS2 心跳阈值的默认设置从 31 修改为 61。在集群的两个 Oracle RAC 节点上执行以下命令:

# /etc/init.d/o2cb offline ocfs2# /etc/init.d/o2cb unload# /etc/init.d/o2cb configureConfiguring the O2CB driver.This will configure the on-boot properties of the O2CB driver.The following questions will determine whether the driver is loaded onboot.  The current values will be shown in brackets ('[]').  Hitting without typing an answer will keep that current value.  Ctrl-Cwill abort.Load O2CB driver on boot (y/n) [n]: yCluster to start on boot (Enter "none" to clear) [ocfs2]: ocfs2Specify heartbeat dead threshold (>=7) [31]: 61Specify network idle timeout in ms (>=5000) [30000]: 30000Specify network keepalive delay in ms (>=1000) [2000]: 2000Specify network reconnect delay in ms (>=2000) [2000]: 2000Writing O2CB configuration: OKLoading module "configfs": OKMounting configfs filesystem at /sys/kernel/config: OKLoading module "ocfs2_nodemanager": OKLoading module "ocfs2_dlm": OKLoading module "ocfs2_dlmfs": OKMounting ocfs2_dlmfs filesystem at /dlm: OKStarting O2CB cluster ocfs2: OK

格式化 OCFS2 文件系统

与本节中其他任务不同,只能在 RAC 集群中的一个节点上创建 OCFS2 文件系统。我将只从 linux1 执行本节中的所有命令。

现在,我们开始使用“在 iSCSI 卷上创建分区”节中针对 OCFS2 分区的 iSCSI 卷。

如果 O2CB 集群处于脱机状态,则启动它。格式化操作要求集群处于联机状态,这是因为它需要确保在集群的另一个节点上未挂载该卷。

在本文的前面章节中,我们在为 OCFS2/集群件创建挂载点一节中创建了目录 /u02,它将用作 OCFS2 集群文件系统的挂载点。本节包含创建和安装文件系统所使用的命令,该文件系统将用于集群管理器

注意,可以使用 GUI 工具 ocfs2console 或命令行工具 mkfs.ocfs2 创建和安装 OCFS2 文件系统。在 ocfs2console 实用程序中,使用菜单 [Tasks] - [Format]

下面的内容演示了如何使用命令行工具 mkfs.ocfs2 创建 OCFS2 文件系统。

为创建文件系统,我们使用 Oracle 可执行文件 mkfs.ocfs2。考虑到本示例的目的,我使用映射到 crs 的 iSCSI 卷 /dev/iscsi/crs/part1 的本地 SCSI 设备名,以 root 用户帐户仅从 linux1 运行以下命令。另请注意,我还指定了一个名为“oracrsfiles”的标签,可在挂载或取消挂载卷时引用:

$ su -# mkfs.ocfs2 -b 4K -C 32K -N 4 -L oracrsfiles /dev/iscsi/crs/part1mkfs.ocfs2 1.2.7Filesystem label=oracrsfilesBlock size=4096 (bits=12)Cluster size=32768 (bits=15)Volume size=2145943552 (65489 clusters) (523912 blocks)3 cluster groups (tail covers 977 clusters, rest cover 32256 clusters)Journal size=67108864Initial number of node slots: 4Creating bitmaps: doneInitializing superblock: doneWriting system files: doneWriting superblock: doneWriting backup superblock: 1 block(s)Formatting Journals: doneWriting lost+found: donemkfs.ocfs2 successful

挂载 OCFS2 文件系统

现在已经创建了此文件系统,接下来我们便可以载入它了。首先,使用命令行进行挂载,然后我将介绍如何将它包含在 /etc/fstab 中以在每次引导时挂载它。

需要使用 OCFS2 标签 oracrsfilesroot 用户帐户在两个 Oracle RAC 节点上执行集群文件系统挂载!

首先,此处介绍了如何从命令行手动挂载 OCFS2 文件。注意,需要以 root 用户帐户执行该操作:

$ su -# mount -t ocfs2 -o datavolume,nointr -L "oracrsfiles" /u02

如果挂载成功,您将只是获得提示。但我们应运行以下检查来确保文件系统挂载正确。

首先,使用 mount 命令确保成功挂载了新文件系统。应在 RAC 集群的两个节点上执行该操作:

# mount/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)proc on /proc type proc (rw)sysfs on /sys type sysfs (rw)devpts on /dev/pts type devpts (rw,gid=5,mode=620)/dev/hda1 on /boot type ext3 (rw)tmpfs on /dev/shm type tmpfs (rw)none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)domo:Public on /domo type nfs (rw,addr=192.168.1.121)configfs on /sys/kernel/config type configfs (rw)ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)/dev/sde1 on /u02 type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)
请记下我挂载新文件系统所使用的 datavolume 选项。Oracle 数据库用户必须使用 datavolume 挂载选项安装任何将包含表决磁盘文件、集群注册表 (OCR)、数据文件、重做日志、存档日志以及控制文件的卷,以确保 Oracle 进程打开包含 O_DIRECT 标志的文件。nointr 选项确保 I/O 不会由于信号而中断。

应使用该挂载选项挂载任何其他类型的卷,其中包括 Oracle 主目录(本指南未使用它)。

为什么挂载卷需要花费这么长的时间?挂载一个卷大约需要 5 秒钟。它这样做是为了使心跳线程保持稳定。在以后的版本中,Oracle 计划增加对全局心跳(这将使大多数挂载瞬间完成)的支持。

将 OCFS2 配置为在启动时自动挂载

让我们了解一下到目前为止已经执行的操作。您安装了 OCFS2 软件程序包,它将用于存储集群管理器 所需的共享文件。安装后,您将 OCFS2 模块加载到内核中,然后对集群文件系统进行了格式化。最后,您使用 OCFS2 标签“oracrsfiles”挂载了新建的文件系统。本节将逐步完成在每次使用 OCFS2 标签引导计算机时负责挂载新 OCFS2 文件系统的步骤。

首先将以下行添加到集群中两个 Oracle RAC 节点的 /etc/fstab 文件中:

LABEL=oracrsfiles     /u02           ocfs2   _netdev,datavolume,nointr     0 0

注意用于挂载此文件系统的“_netdev”选项。OCFS2 卷必须使用 _netdev 挂载选项。该挂载选项指示将在网络启动后挂载该卷,在关闭网络前卸载该卷。

现在,让我们确保已经加载了 ocfs2.ko 内核模块,并确保将在引导过程中安装文件系统。

如果您遵循了本指南中的示例,则应已经启用了用于加载内核模块并安装 OCFS2 文件系统的操作。但您将仍以 root 用户帐户在集群的两个 Oracle RAC 节点上运行以下命令来检查这些选项:

$ su -# chkconfig --list o2cbo2cb 0:off 1:off 2:on 3:on 4:on 5:on 6:off
应把我以粗体标记的标志设置为“on”。

检查新 OCFS2 文件系统的权限

使用 ls 命令检查所有权。应把权限设置为 0775,且将所有者设置为“oracle”,将组设置为“oinstall”。

只需在 RAC 集群中的一个节点上执行以下任务。我将只从 linux1 执行本节中的所有命令。

我们来先检查权限:

# ls -ld /u02drwxr-xr-x 3 root root 4096 Jul 31 17:21 /u02
正如在以上列表中所看到的,oracle 用户帐户(以及 oinstall 组)将无法写入此目录。我们来解决此问题:
# chown oracle:oinstall /u02# chmod 775 /u02
我们回过头来再次检查集群中两个 Oracle RAC 节点的权限是否正确:
# ls -ld /u02drwxrwxr-x 3 oracle oinstall 4096 Jul 31 17:21 /u02

创建 Oracle 集群件文件目录

最后一个必需的任务是,在新的 OCFS2 文件系统上创建一个用于保存 Oracle 集群件共享文件的相应目录。我们还将修改这个新目录的权限,以允许“oracle”所有者和“oinstall”组读/写该目录。

只需在 RAC 集群中的一个节点上执行以下任务。我将只从 linux1 执行本节中的所有命令。

# mkdir -p /u02/oradata/racdb# chown -R oracle:oinstall /u02/oradata# chmod -R 775 /u02/oradata# ls -l /u02/oradatatotal 4drwxrwxr-x 2 oracle oinstall 4096 Jul 31 17:31 racdb

重新引导两个节点

开始介绍下一节之前,最好在此时重新引导 RAC 集群的两个节点。当计算机启动时,确保加载了集群堆栈服务并安装了新的 OCFS2 文件系统:

# mount/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)proc on /proc type proc (rw)sysfs on /sys type sysfs (rw)devpts on /dev/pts type devpts (rw,gid=5,mode=620)/dev/hda1 on /boot type ext3 (rw)tmpfs on /dev/shm type tmpfs (rw)none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)configfs on /sys/kernel/config type configfs (rw)ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)cartman:SHARE2 on /cartman type nfs (rw,addr=192.168.1.120)/dev/sdc1 on /u02 type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)

如果修改了 O2CB 心跳阈值,则应验证其是否设置正确:

# cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold61

如何确定 OCFS2 版本

要确定正在运行的 OCFS2 版本,使用:

# cat /proc/fs/ocfs2/versionOCFS2 1.2.9 Wed Jan 21 21:32:59 EST 2009 (build 5e8325ec7f66b5189c65c7a8710fe8cb)

 


18. 安装和配置自动存储管理 (ASMLib 2.0)

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

在本节中,我们将安装和配置 ASMLib 2.0,它用于自动存储管理 (ASM)。在本节中,我们将使用 ASM 作为所有 Oracle 物理数据库文件(数据、联机重做日志、控制文件、存档重做日志)以及闪回恢复区的共享文件系统/卷管理器。

Oracle 10g 第 1 版中引入了 ASM,用于使管理员不必再管理单个文件和驱动器。ASM 内置在 Oracle 内核中。通过它,DBA 可以全天候管理 Oracle 集群实例的单个实例以集群实例的数千个磁盘驱动器。将把所有要用于 Oracle 的文件和目录包含在磁盘组 中。ASM 跨所有可用磁盘驱动器并行执行负载平衡,以防止热点并最大限度地提高性能(甚至对于快速更改数据使用模式也是如此)。

有两个不同方法可在 Linux 上配置 ASM:

  • 使用 ASMLib I/O 的 ASM:此方法使用 ASMLib 调用在由 ASM 管理的原始块设备 上创建所有 Oracle 数据库文件。由于 ASMLib 使用块设备,因此该方法不需要原始设备。

     

  • 使用标准 Linux I/O 的 ASM:此方法使用标准 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 的详细信息,请访问 http://www.oracle.com/technology/tech/linux/asmlib/

安装 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.el5PAE-x.x.x-x.el5.i686.rpm —(用于 PAE 内核)
    • 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.el5PAE-x.x.x-x.el5.x86_64.rpm —(用于 PAE 内核)
    • 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.3 来说,默认情况下不安装 ASMLib 2.0 软件包。3 号 CD 中包含了 ASMLib 2.0 内核驱动程序和驱动程序支持文件。用户空间库需单独下载,因为 Oracle Enterprise Linux 中不包含该库。要确定 Oracle ASMLib 软件包是否已安装(多数情况下没有),在两个 Oracle RAC 节点上执行下述操作:

# rpm -qa | grep oracleasm | sort

如果未安装 Oracle ASMLib 2.0 软件包,请将 Oracle Enterprise Linux 3 号 CD 加载到每个 Oracle RAC 节点,然后执行以下命令:

From Oracle Enterprise Linux 5 - [CD #3]# mount -r /dev/cdrom /media/cdrom# cd /media/cdrom/Server# rpm -Uvh oracleasm-support-2.1.2-1.el5.i386.rpm# rpm -Uvh oracleasm-2.6.18-128.el5-2.0.5-1.el5.i686.rpm# cd /# eject

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

# rpm -qa | grep oracleasm | sortoracleasm-2.6.18-128.el5-2.0.5-1.el5oracleasm-support-2.1.2-1.el5

获得 Oracle ASMLib

如前所述,在 Oracle Enterprise Linux 中包含了 ASMLib 2.0 软件,但不包含用户空间库(也称作 ASMLib 支持库)。用户空间库是必需的,您可以在此处下载:

  • oracleasmlib-2.00.4-1.el5.i386.rpm

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

# rpm -Uvh oracleasmlib-2.0.4-1.el5.i386.rpmPreparing...                ########################################### [100%]1:oracleasmlib           ########################################### [100%]

有关通过坚不可摧的 Linux 网络(并非本文的必需)获取 ASMLib 支持库的信息,请访问通过 Unbreakable Linux 网络获得 Oracle ASMLib。

配置和加载 ASMLib 2.0 程序包

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

$ su -# /etc/init.d/oracleasm configureConfiguring the Oracle ASM library driver.This will configure the on-boot properties of the Oracle ASM librarydriver.  The following questions will determine whether the driver isloaded on boot and what permissions it will have.  The current valueswill be shown in brackets ('[]').  Hitting  without typing ananswer will keep that current value.  Ctrl-C will abort.Default user to own the driver interface []: oracleDefault group to own the driver interface []: oinstallStart Oracle ASM library driver on boot (y/n) [n]: yScan for Oracle ASM disks on boot (y/n) [y]: yWriting Oracle ASM library driver configuration: doneInitializing the Oracle ASMLib driver: [  OK  ]Scanning the system for Oracle ASMLib disks: [  OK  ]

为 Oracle 创建 ASM 磁盘

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

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

如果使用相同硬件(实际上是相同的共享逻辑驱动器)重复本文,则在尝试创建 ASM 磁盘时可能会出现故障。如果确实遇到故障,则尝试使用以下命令列出上述安装使用过的所有 ASM 磁盘:
# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
您可以看到,结果表明我定义了四个 ASM 卷。如果您在之前的运行中已经定义了四个卷,那么使用以下命令将其删除。删除之前创建的卷后,使用“oracleasm createdisk”命令(如下所示)创建新卷。
# /etc/init.d/oracleasm deletedisk VOL1Removing ASM disk "VOL1" [  OK  ]# /etc/init.d/oracleasm deletedisk VOL2Removing ASM disk "VOL2" [  OK  ]# /etc/init.d/oracleasm deletedisk VOL3Removing ASM disk "VOL3" [  OK  ]# /etc/init.d/oracleasm deletedisk VOL4Removing ASM disk "VOL4" [  OK  ]

 

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

$ su -# /etc/init.d/oracleasm createdisk VOL1 /dev/iscsi/asm1/part1Marking disk "/dev/iscsi/asm1/part1" as an ASM disk [  OK  ]# /etc/init.d/oracleasm createdisk VOL2 /dev/iscsi/asm2/part1Marking disk "/dev/iscsi/asm2/part1" as an ASM disk [  OK  ]# /etc/init.d/oracleasm createdisk VOL3 /dev/iscsi/asm3/part1Marking disk "/dev/iscsi/asm3/part1" as an ASM disk [  OK  ]# /etc/init.d/oracleasm createdisk VOL4 /dev/iscsi/asm4/part1Marking disk "/dev/iscsi/asm4/part1" as an ASM disk [  OK  ]

在 RAC 集群中的所有其他节点上,您必须执行磁盘扫描程序 以识别新卷:

# /etc/init.d/oracleasm scandisksScanning system for ASM disks [  OK  ]

 

现在,我们可以使用以下命令在 RAC 集群中的两个节点上以 root 用户帐户测试是否成功创建了 ASM 磁盘:

# /etc/init.d/oracleasm listdisksVOL1VOL2VOL3VOL4

 

 


19. 下载 Oracle RAC 10g 软件

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

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

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

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

 

32 位 (x86) 安装

http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201linuxsoft.html

64 位 (x86_64) 安装

http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201linx8664soft.html

您将从 Oracle 下载所需的软件并将其提取到集群中的一个 Linux 节点上,即 linux1。您将从此计算机执行所有的 Oracle 软件安装。Oracle 安装程序将使用远程访问方法将所需的软件程序包复制到我们在第 15 节(使用 SSH 为远程访问配置 RAC 节点)中设置的 RAC 配置中的所有其他节点上。

登录到您将从其中以“oracle”用户帐户执行所有 Oracle 安装的节点 (linux1)。在该示例中,您将把所需的 Oracle 软件下载到 linux1 并将其保存到 /home/oracle/orainstall

下载并提取软件

首先,下载适用于 Linux x86 或 Linux x86-64 的 Oracle 集群件第 2 版 (10.2.0.1.0)、Oracle 数据库 10g 第 2 版 (10.2.0.1.0) 以及 Oracle 数据库 10g 随附 CD 第 2 版 (10.2.0.1.0) 软件。所有下载均在同一页面中提供。

oracle 用户帐户将下载的三个程序包提取到临时目录。在该示例中,我将使用 /home/oracle/orainstall

按如下所示提取 Oracle 集群件程序包:

# su - oracle$ mkdir -p /home/oracle/orainstall$ cd /home/oracle/orainstall$ unzip 10201_clusterware_linux32.zip
然后提取 Oracle 数据库软件:
$ cd /home/oracle/orainstall$ unzip 10201_database_linux32.zip
最后,提取(可选的)Oracle 随附 CD 软件:
$ cd /home/oracle/orainstall$ unzip 10201_companion_linux32.zip

 


20. Oracle 数据库 10g 第 2 版安装前的准备工作

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

在安装 Oracle 集群件和 Oracle RAC 软件之前,强烈建议运行集群验证实用程序 (CVU) 以验证硬件和软件配置。CVU 是 Oracle 集群件安装介质上提供的一个命令行实用程序。它负责执行各种系统检查,以协助您确认 Oracle RAC 节点针对 Oracle 集群件和 Oracle 真正应用集群安装进行了正确的配置。CVU 只需从您将从其中执行 Oracle 安装的节点(本文中为 linux1)运行即可。注意,在 Oracle 集群件安装结束后,CVU 还会作为配置助手进程的一部分自动运行。

使用集群验证实用程序的先决条件

安装 cvuqdisk RPM(仅适用于 Oracle Enterprise Linux 和 RHEL 用户)

运行 CVU 的第一个前提条件针对运行 Oracle Enterprise Linux、Red Hat Linux 和 SuSE 的用户。如果使用上面列出的任一操作系统,则必须下载程序包 cvuqdisk,并将其安装到集群中的两个 Oracle RAC 节点上。这意味着您将需要在 linux1linux2 上安装 cvuqdisk RPM。如果没有 cvuqdisk,CVU 将无法发现共享磁盘,您在运行 CVU 时会收到错误消息“Package cvuqdisk not installed”(程序包 cvuqdisk 未安装)。

cvuqdisk RPM 可在 rpm 目录中的 Oracle 集群件安装介质中找到。考虑到本文的目的,将 Oracle 集群件介质解压缩到 linux1 上的 /home/oracle/orainstall/clusterware 目录。注意,在安装 cvuqdisk RPM 之前,我们需要设置名为 CVUQDISK_GRP 的环境变量,使其指向将要拥有 cvuqdisk 实用程序的组。默认的组是 oinstall,这正是本文中我们用于 oracle UNIX 用户帐户的组。

找到 cvuqdisk RPM,并以“oracle”用户帐户将其从 linux1 复制到 linux2

$ ssh linux2 "mkdir -p /home/oracle/orainstall/clusterware/rpm"$ scp /home/oracle/orainstall/clusterware/rpm/cvuqdisk-1.0.1-1.rpm linux2:/home/oracle/orainstall/clusterware/rpm

在两个 Oracle RAC 节点上,以“root”用户帐户执行以下步骤来安装 cvuqdisk RPM:

$ su -# cd /home/oracle/orainstall/clusterware/rpm# CVUQDISK_GRP=oinstall; export CVUQDISK_GRP# rpm -iv cvuqdisk-1.0.1-1.rpmPreparing packages for installation...cvuqdisk-1.0.1-1# ls -l /usr/sbin/cvuqdisk-rwsr-x--- 1 root oinstall 4168 Jun  2  2005 /usr/sbin/cvuqdisk

 

验证远程访问/用户等效性

应该从 linux1(我们将在该节点运行所有的 Oracle 安装)运行 CVU。运行 CVU 之前,以 oracle 用户帐户登录并验证已针对集群中的所有节点配置了远程访问/用户等效性。使用安全 shell 方法时,需要首先在终端 shell 会话上启用用户等效性,然后再尝试运行 CVU。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为每个键输入在提示时生成的通行短语):

# su - oracle$ exec /usr/bin/ssh-agent $SHELL$ /usr/bin/ssh-addEnter passphrase for /home/oracle/.ssh/id_rsa: xxxxxIdentity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)

 

使用 CVU 验证 Oracle 集群件要求

满足运行 CVU 实用程序的所有前提条件后,我们现在以“oracle”UNIX 用户帐户从 linux1 运行以下命令,以检查 Oracle 集群件的所有安装前任务是否完成:

$ cd /home/oracle/orainstall/clusterware/cluvfy$ mkdir -p jdk14$ unzip jrepack.zip -d jdk14$ CV_HOME=/home/oracle/orainstall/clusterware/cluvfy; export CV_HOME$ CV_JDKHOME=/home/oracle/orainstall/clusterware/cluvfy/jdk14; export CV_JDKHOME$ ./runcluvfy.sh stage -pre crsinst -n linux1,linux2 -verbose

 

查看 CVU 报表。注意,报告中几个可以忽略的错误。

如果您的系统只有 1GB 的 RAM 内存,在进行“总内存”检查时可能会收到错误:

Check: Total memoryNode Name     Available                 Required                  Comment------------  ------------------------  ------------------------  ----------linux2        1009.65MB (1033880KB)     1GB (1048576KB)           failedlinux1        1009.65MB (1033880KB)     1GB (1048576KB)           failedResult: Total memory check failed.

如上述输出所示,内存要求为 1GB (1048576 KB)。尽管您的系统可能在每个 Oracle RAC 节点上都安装了 1GB 的内存,但 Linux 内核会将其计算为 1033880 KB,这比要求的大小少了 14696 KB。可以认为这一数值非常接近要求,可以继续进行安装。正如本文前面所述,我强烈建议两个 Oracle RAC 节点分别具有 2GB 或以上的 RAM 内存,以满足性能要求。

第一个错误与为 VIP 查找一组适合的接口有关,可以忽略,没什么问题。这是 Metalink 说明 338924.1 中的一个错误文件:

Suitable interfaces for the private interconnect on subnet "192.168.2.0":linux2 eth1:192.168.2.101linux1 eth1:192.168.2.100ERROR:Could not find a suitable set of interfaces for VIPs.Result: Node connectivity check failed.

 

如说明中所述,可以忽略该错误,没什么问题。

最后一组可忽略的错误涉及 Oracle Enterprise Linux 5 中不需要的特定 RPM 程序包版本。例如:

  • compat-db-4.00.14-5
  • compat-gcc-7.3-2.96.128
  • compat-gcc-c++-7.3-2.96.128
  • compat-libstdc++-7.3-2.960.128
  • compat-libstdc++-devel-7.3-2.96.128
  • compat-libstdc++-devel-7.3-2.96.128

 

这些特定的程序包在 CVU 报告中列为缺少,请确保在集群中的两个 Oracle RAC 节点上安装了正确版本的 compat-* 程序包。例如,在 Oracle Enterprise Linux 4 Update 5 中,这些程序包应为:

  • compat-gcc-32-3.2.3-47.3
  • compat-gcc-32-c++-3.2.3-47.3
  • compat-libstdc++-33-3.2.3-47.3

 

利用 CVU 检查硬件和操作系统设置

接下来要运行的 CVU 检查将验证硬件和操作系统设置。同样,从 linux1 以“oracle”UNIX 用户帐户运行以下命令:

$ cd /home/oracle/orainstall/clusterware/cluvfy$ ./runcluvfy.sh stage -post hwos -n linux1,linux2 -verbose

查看 CVU 报表。与之前的检查(CRS 的安装前任务)一样,为 VIP 查找一组合适的接口将失败,可将其忽略,没什么问题。

另请注意,您可能在报告的“Checking shared storage accessibility...”部分收到警告信息:

Checking shared storage accessibility...WARNING:Unable to determine the sharedness of /dev/sde on nodes:linux2,linux2,linux2,linux2,linux2,linux1,linux1,linux1,linux1,linux1Shared storage check failed on nodes "linux2,linux1".

出现这种情况时,该警告也可忽略,没什么问题。虽然我们知道这些磁盘可见并在集群中的两个 Oracle RAC 节点中共享,但检查本身可能会失败。导致该错误的若干原因已得到证明。第一个原因来自 Metalink,指出 cluvfy 当前没有使用 SCSI 设备之外的其他设备。这将包括设备(如 EMC PowerPath)和卷组(如 Openfiler 中的卷组)。截至本文撰写之日,除了使用手动方法检测共享设备外没有其他解决方法。Oracle 的 Bane Radulovic 记录下了该错误的另一个原因。他的研究表明,CVU 在 Linux 上调用 smartclt 时,smartclt 不会从 iSCSI 设备返回序列号。例如,针对 /dev/sde 进行的检查显示:

# /usr/sbin/smartctl -i /dev/sdesmartctl version 5.33 [i686-redhat-linux-gnu] Copyright (C) 2002-4 Bruce AllenHome page is http://smartmontools.sourceforge.net/Device: Openfile Virtual disk     Version: 0Serial number:Device type: diskLocal Time is: Mon Sep  3 02:02:53 2007 EDTDevice supports SMART and is DisabledTemperature Warning Disabled or Not Supported

截至本文撰写之日,我们还不知道 Openfiler 开发人员是否打算对此进行修复。