文章
| 第 1 页 第 2 页 第 3 页
12. 创建“oracle”用户和目录 在集群中的两个 Oracle RAC 节点上执行以下任务! 在本部分中,我们将创建 oracle UNIX 用户帐户、推荐的 O/S 组以及所有必需的目录。待创建的 O/S 组如下:
oracle 用户帐户将拥有 Oracle 集群件、Oracle RAC 数据库和 ASM 软件。UID 和 GID 必须在所有 Oracle RAC 节点上保持一致。 注意,UNIX 组 oinstall 的成员被视为 Oracle 软件的“所有者”。dba 组的成员可以管理 Oracle 数据库,例如,启动和关闭数据库。Oracle 11g 新增了 SYSASM 权限,专用于执行 ASM 管理任务。使用 SYSASM 而非 SYSDBA 权限,可以在 ASM 管理和数据库管理之间实现更清晰的责任分离。OSASM 是一个新的操作系统组,专用于 ASM。OSASM 组的成员可以使用操作系统验证以 SYSASM 身份进行连接,并拥有对 ASM 的全部访问权限。最后一组 (asmdba) 是针对 ASM 的 OSDBA 组。您必须创建一个针对 ASM 的 OSDBA 组,以提供对 ASM 实例的访问。如果 OSASM 和 OSDBA 是两个不同的组,这一操作是必需的。在本文中,我们将创建 oracle 用户帐户以承担全部责任! 创建 Oracle 的组和用户 我们首先创建推荐的 UNIX 组和 oracle 用户帐户。
# groupadd -g 501 oinstall
# groupadd -g 502 dba
# groupadd -g 503 oper
# groupadd -g 504 asm
# groupadd -g 506 asmdba
# useradd -m -u 501 -g oinstall -G dba,oper,asm -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper),504(asm)
设置 oracle 帐户的口令:
# passwd oracle
Changing password for user oracle.
New UNIX password: xxxxxxxxxxx
Retype new UNIX password: xxxxxxxxxxx
passwd: all authentication tokens updated successfully.
验证用户 nobody 存在 安装软件之前,执行以下操作,以验证用户 nobody 存在于系统中:
创建 Oracle 基本目录 下一步是创建一个新目录,用于存储 Oracle 数据库软件。在配置 oracle 用户的环境时(本部分后面的内容),我们将把该目录的位置指定给 $ORACLE_BASE 环境变量。 以下内容假设在根文件系统中创建目录。请注意,这样做是为了简便起见,不建议将其作为通用做法。通常,这些目录将在单独的文件系统中创建。 创建目录之后,您必须为其指定正确的拥有者、组和权限。在两个 Oracle RAC 节点上执行以下命令:
# mkdir -p /u01/app/oracle
# chown -R oracle:oinstall /u01/app
# chmod -R 775 /u01/app
在过程结束时,您将看到以下内容:
创建 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
在过程结束时,您将看到以下内容:
为 OCFS2/ 集群件创建挂载点 现在,让我们为 Oracle 集群文件系统第 2 版 (OCFS2) 创建挂载点,它将用于存储两个 Oracle 集群件共享文件。 如上一部分中所述,以下内容假设目录将在根文件系统中创建。这样做是为了简便起见,不建议将其作为通用做法。通常,这些目录将在单独的文件系统中创建。在两个 Oracle RAC 节点上执行以下命令:
# mkdir -p /u02/oradata/orcl
# chown -R oracle:oinstall /u02/oradata/orcl
# chmod -R 775 /u02/oradata/orcl
为 oracle 用户帐户创建登录脚本 要确保为两个 Oracle RAC 节点上的“oracle”UNIX 用户 id 正确设置环境,请使用以下 .bash_profile:注:当您为每个 Oracle RAC 节点设置 Oracle 环境变量时,请确保为每个 RAC 节点分配唯一的 Oracle SID!对于此示例,我使用:
以 oracle 用户帐户登录到每个节点:
# su - oracle
....................................
# .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/11.1.0/db_1
export ORA_CRS_HOME=/u01/app/crs
export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
# Each RAC node must have a unique ORACLE_SID. (i.e. orcl1, orcl2,...)
export ORACLE_SID=orcl1
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 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 节点上定义本节讨论的内核参数。本节提供了设置 Oracle 必需的那些内核参数的详细信息。第 15 节(“用于所有 Oracle RAC 节点的所有启动命令”)中包含有关如何将这些命令置于启动脚本 (/etc/sysctl.conf) 中的说明。 概述 本部分将集中讨论针对 Oracle RAC 11g 的安装配置两台 Oracle RAC Linux 服务器的步骤。这包括验证足够的交换空间、设置共享内存和信号、设置文件句柄的最大数量、设置 IP 本地端口范围、设置对 oracle 用户的 shell 限制、激活系统的所有内核参数,以及如何验证两个集群节点的日期和时间是否正确。 在本节中,您将注意到可以使用多种方法来配置(设置)这些参数。就本文而言,我将通过把所有命令置于 /etc/sysctl.conf 文件中使所有更改永久有效(通过重新引导)。 对交换空间的考虑因素
配置内核参数和 Shell 限制 本部分中出现的内核参数和 Shell 限制仅作为推荐值由 Oracle 写入文档中。对于生产数据库系统,Oracle 建议您对这些值进行调整,以优化系统性能。 在两个 Oracle RAC 节点上,验证本部分中所示的内核参数的设置值大于或等于推荐值。另请注意,在设置这四个信号值时,需要将全部四个值输入同一行。 设置共享内存 共享内存通过将通用的结构和数据放在共享内存段中,使得进程可以对它们进行访问。这是现有最快的进程间通信 (IPC) 方式,主要是因为数据在进程之间传递时没有涉及内核操作。使用共享内存,不需要在进程间复制数据。 Oracle 将共享内存用于它的共享全局区 (SGA),这是一个由所有的 Oracle 备份进程及前台进程共享的内存区域。为 SGA 分配足够的容量对于 Oracle 的性能非常重要,这是因为它负责保存数据库缓冲区高速缓存、共享 SQL、访问路径,等等。 要确定所有共享内存的限制,使用以下命令:
# ipcs -lm
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 4194303
max total shared memory (kbytes) = 1073741824
min seg size (bytes) = 1
设置 SHMMAX 设置信号 至此,您已经配置了共享内存设置,接下来将配置信号。对“信号”的最佳描述是,它是用于在共享资源(如共享内存)的进程(或进程中的线程)之间提供同步的计数器。UNIX System V 支持信号集,其中的每个信号都是一个计数信号。当应用程序请求信号时,它使用“集合”来完成此工作。 要确定所有信号限制,使用以下命令:
# ipcs -ls
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
您还可以使用以下命令:
# cat /proc/sys/kernel/sem
250 32000 32 128
设置 SEMMSL 设置文件句柄 在配置 Oracle RAC 节点时,确保文件句柄的最大数量足够大是非常关键的。文件句柄的设置表示您在 Linux 系统上可以打开的文件数。 使用以下命令来确定整个系统中文件句柄的最大数量:
# cat /proc/sys/fs/file-max
102308
Oracle 建议将整个系统的文件句柄值至少设置为 65536。
# cat /proc/sys/fs/file-nr
960 0 65536
file-nr 文件显示了三个参数:分配的文件句柄总数、当前使用的文件句柄数以及可以分配的最大文件句柄数。 注:如果您需要增加 /proc/sys/fs/file-max 中的值,则要确保正确地设置 ulimit。对于 2.4 和 2.6 内核,通常设为 unlimited。使用 ulimit 命令验证 ulimit 设置:
# ulimit
unlimited
设置 IP 本地端口范围 配置系统,使本地端口范围为 1024 至 65000。 使用以下命令确定 ip_local_port_range 的值:
# cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
ip_local_port_range 的默认值是从 32768 到 61000 的端口。Oracle 建议的本地端口范围是 1024 到 65000。
为 Oracle 用户设置 Shell 限制 要改善 Linux 系统上的软件性能,Oracle 建议您提高 oracle 用户的 shell 限制:
要进行这些更改,以 root 用户身份运行以下命令: cat >> /etc/security/limits.conf <<EOF cat >> /etc/pam.d/login <<EOF 为“oracle”UNIX 帐户更新默认的 shell 启动文件。
激活系统的所有内核参数 此时,我们已经包含了成功进行 Oracle 安装和配置所需的所有 Linux 内核参数。在以上每一部分中,我们对 Linux 系统进行了配置,将所有内核参数置于 /etc/sysctl.conf 文件中以通过重新引导将其保存在系统启动上。现在,我们可以重新启动以确保所有这些参数在内核中进行设置,或者,我们只需通过以 root 用户身份运行以下命令来“运行”/etc/sysctl.conf 文件。请在集群的每一个节点上执行该操作!
# 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
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
kernel.shmmax = 1073741823
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
在所有的集群节点上设置正确的日期和时间 在安装 Oracle 集群件、数据库以及示例时,Oracle Universal Installer (OUI) 首先将软件安装到运行安装程序的本地节点上(即 linux1)。然后,将该软件以远程方式复制到集群中的其余节点(即 linux2)。在远程复制过程中,OUI 将在每个远程节点上执行 UNIX“tar”命令,以提取进行了存档和复制的文件。如果执行安装的节点上的日期和时间大于其要进行复制的节点上的日期和时间,那么 OUI 将在“tar”中引发一个错误,以指示其在试图提取带有时间戳的文件时失败。
在启动以上任何一个所述安装之前,确保尽可能将集群的每个成员节点设置为相同的时间和日期。由于两个 Oracle RAC 节点使用相同的参考 Network Time Protocol 服务器,因此 Oracle 强烈建议使用多数操作系统的 Network Time Protocol 功能来执行该操作。 然而,访问 Network Time Protocol 服务器并非始终可用。在这种情况下,为集群中的节点手动设置日期和时间时,确保要从其中执行软件安装的节点 (linux1) 的时间和日期等于或略小于集群中的所有其他节点 (linux2)。我一般使二者之间相差 20 秒,如以下示例所示: 设置 linux1 的日期和时间:
# date -s "10/09/2007 23:00:00"
设置 linux2 的日期和时间:
# date -s "10/09/2007 23:00:20"
本文中所述的双节点 RAC 配置没有使用 Network Time Protocol 服务器。
14. 使用 SSH 为远程访问配置 RAC 节点 在集群中的两个 Oracle RAC 节点上执行以下配置过程! 在安装 Oracle RAC 11g 之前,您必须为 UNIX 用户帐户配置安全 shell (SSH),该帐户将用于安装 Oracle 集群件 11g 和 Oracle 数据库 11g 软件。本部分中所述的安装和配置任务需要在两个 Oracle RAC 节点上执行。如本文前面所配置的那样,Oracle 集群件 11g 和 Oracle 数据库 11g 软件的所有者将是“oracle”。 此处的目的是为 oracle UNIX 用户帐户设置用户等效性。利用用户等效性 (User equivalence), oracle UNIX 用户帐户无需口令就可访问集群中的所有其他节点(运行命令和复制文件)。Oracle 在 10g 第 1 版中增加了将 SSH 工具套件用于设置用户等效项的支持。在 Oracle 数据库 10g 之前,用户等效性必须使用远程 shell (RSH) 进行配置。 本文中所述的 SSH 配置采用 SSH1。如果 SSH 不可用,则 OUI 将转而尝试使用 rsh 和 rcp。不过,在大多数 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) 时,它将使用 ssh 和 scp 命令在集群内的所有其他节点上运行远程命令,并向这些节点复制文件(Oracle 软件)。运行 OUI (runInstaller) 的节点上的 oracle UNIX 用户帐户必须受到您的 RAC 集群中其他所有节点的信任。这意味着,相对于集群中的所有其他 Linux 服务器,您必须能够在将要运行 OUI 的 Linux 服务器上运行安全 shell 命令(ssh 或 scp),而不会收到输入口令的提示。 注意,普通 RAC 操作无需使用安全 shell。然而,对于 RAC 和补丁集安装以及创建集群数据库时,必须启用该配置。 下面部分将介绍配置 SSH1、RSA 密钥和用户等效性所需的方法。 要确定是否 SSH 已安装并运行,可输入以下命令:
# pgrep sshd
2808
如果 SSH 正在运行,那么该命令的响应将是一个进程 ID 编号(一个或多个)列表。在集群中的两个 Oracle RAC 节点上运行该命令,以验证 SSH 后台程序已安装并正在运行! 要了解更多有关 SSH 的信息,请参阅以下 man 页:
# man ssh
在两个 Oracle RAC 节点上创建 RSA 密钥 配置 SSH 的第一步是在集群中的两个 Oracle RAC 节点上创建 RSA 公钥/私钥对。执行该操作的命令将为 RSA 创建一个公共密钥和一个私有密钥(每个节点总共 2 个密钥)。然后,需要将 RSA 公共密钥的内容复制到一个授权密钥文件 中,之后将该文件分发到集群中的两个 Oracle RAC 节点。 使用以下步骤创建 RSA 密钥对。请注意,集群中的两个 Oracle RAC 节点上均需要完成这些步骤:
现在,每个 Oracle RAC 节点都包含用于 RSA 的公共和私有密钥,您需要在其中一个节点上创建一个授权密钥文件。授权密钥文件只是一个包含每个人(每个节点)的 RSA 公共密钥的文件。在授权密钥文件包含了所有公共密钥后,将其分发至集群中的所有其他节点。 在集群中的其中一个节点上完成以下步骤,然后分发授权密钥文件。考虑到本文的目的,我将使用 linux1:
为当前 Shell 会话启用 SSH 用户等效性 运行 OUI 时,需要不用提示输入口令短语就可运行安全 shell 工具命令(ssh 和 scp)。尽管集群中的两个 Oracle RAC 节点上都配置了 SSH,使用安全 shell 工具命令时仍会提示输入口令短语。因此,在运行 OUI 之前,您需要为打算从其中运行 OUI 的终端会话启用 用户等效性。考虑到本文目的,所有 Oracle 安装都将在 linux1 中进行。 在尝试运行 OUI 之前,需要在任何新的终端 shell 会话中启用用户等效性。如果您注销并又重新登录将从其中执行 Oracle 安装的节点,那么您必须为终端 shell 会话启用用户等效性,因为这不是默认设置。 要为当前终端 shell 会话启用用户等效性,执行以下步骤:
删除所有 stty 命令 在安装 Oracle 软件时,系统上任何包含 stty 命令的隐藏文件(即 .bashrc、 .cshrc、 .profile)都将导致安装过程失败。 要避免该问题,您必须修改这些文件以取消所有关于 STDERR 的输出,如下所示:
注:如果由远程 shell 加载的隐藏文件包含 stty 命令,则 OUI 将指示错误并停止安装。
15. 适用于这两个 Oracle RAC 节点的所有启动命令 验证以下启动命令都包含在集群中的两个 Oracle RAC 节点上! 至此,我们已经详细介绍了配置 Oracle 11g RAC 时需要在两个节点上配置的参数和资源。在本部分中,我们将简要复述这些参数、命令和条目(在本文前面部分中已提到过),当引导计算机时需要在两个 Oracle RAC 节点上执行它们。 对于以下的每个启动文件,都应将 灰色的条目包含在每个启动文件中。
/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 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
# +---------------------------------------------------------+
验证 /etc/sysctl.conf 文件中配置了各个所需的内核参数。然后,在集群的两个 Oracle RAC 节点上运行以下命令,以确保每个参数真正生效:
# 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
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
kernel.shmmax = 1073741823
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
/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)
/etc/udev/rules.d/55-openiscsi.rules ................................................................. # /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
.................................................................
#!/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
echo "${target_name##*.}"
.................................................................
16. 安装和配置 Oracle 集群文件系统 (OCFS2) 应在集群中的这两个 Oracle RAC 节点上执行本节中的大多数安装和配置过程!但创建 OCFS2 文件系统应只在 RAC 集群中的一个节点上执行。 现在,开始安装和配置 Oracle 集群文件系统第 2 版 (OCFS2) 软件。由 Oracle Corporation 开发的 OCFS2 是一个集群文件系统,它允许集群中的所有节点通过标准文件系统接口并发访问一个设备。这样便可以对需要在集群中运行的应用程序进行轻松地管理。 OCFS(第 1 版)于 2002 年 12 月发布,使 Oracle 真正应用集群 (RAC) 用户可以运行集群化数据库而不必处理原始设备。文件系统是为存储数据库相关文件(如数据文件、控制文件、重做日志、归档日志等)设计的。OCFS2 是下一代 Oracle 集群文件系统。它是作为一个通用集群文件系统而设计的。使用它,用户不但可以在共享磁盘上存储与数据库相关的文件,而且还可以存储 Oracle 二进制文件和配置文件(如共享的 Oracle Home),从而使 RAC 的管理变得更简单。 在本指南中,您将使用 Enterprise Linux 版本 5.0 中包含的 OCFS2(OCFS2 版本 1.2.6-1)来存储 Oracle Clusterware 软件共享所需的两个文件。除了这两个文件以外,您还将使用此空间存储所有 Oracle ASM 实例的共享 SPFILE。 有关适用于 Linux 的 OCFS2 的更多信息(包括安装说明),请参见此页面。 安装 OCFS2 在本文的前面几个版本中,现在您应该需要从 http://oss.oracle.com/ 下载 OCFS2 软件。由于 Enterprise Linux 中包含了 OCFS2,不再需要这一操作。OCFS2 软件堆栈包含以下软件包:
在 Enterprise Linux 5.0 中,OCFS2 软件包在默认情况下不会安装。CD #3 包含有 OCFS2 软件包。要确定 OCFS2 软件包是否已安装(多数情况下没有),在两个 Oracle RAC 节点上执行以下命令:
# rpm -qa | grep ocfs2 | sort
如果未安装 OCFS2 软件包,则将 Enterprise Linux CD #3 加载到每个 Oracle RAC 节点,并执行以下命令:
安装完 OCFS2 软件包后,在两个 Oracle RAC 节点上验证已安装该软件:
# rpm -qa | grep ocfs2 | sort
ocfs2-2.6.18-8.el5-1.2.6-1.el5
ocfs2console-1.2.6-1.el5
ocfs2-tools-1.2.6-1.el5
禁用 SELinux(RHEL4 U2 以及更高版本) 对于 RHEL4 U2 以及更高版本(Enterprise Linux 5.0 基于 RHEL 5.0)的用户,我们建议 OCFS2 不要在启用 SELinux 的情况下运行。如果您现在使用的是 RHEL4 U2 或更高版本(由于我们用的是 Enterprise Linux 5.0,这部分用户也包括我们),您需要确认已禁用 SELinux,以便执行 O2CB 服务。 在安装 Enterprise Linux 时,我们在 SELinux 屏幕上 禁用 了 SELinux 功能。不过,如果您在安装过程中没有禁用 SELinux,可以使用工具 system-config-securitylevel 来禁用 SELinux。 要禁用 SELinux(或验证它已禁用),运行“Security Level Configuration”GUI 实用程序:
# /usr/bin/system-config-securitylevel &
这将显示以下屏幕: 图 13 安全级别配置打开屏幕/防火墙禁用 现在,单击 SELinux 选项卡,并选择“Disabled”选项。单击 [OK] 后,将显示一个警告对话框。只需单击“Yes”确认该警告。禁用 SELinux 选项后,屏幕现在应如下所示: 图 14 SELinux 禁用 如果此处您需要在任一节点上禁用 SELinux,这些节点将需要重新引导以实施更改。在继续配置 OCFS2 之前,必须禁用 SELinux! 配置 OCFS2 下一步是在集群中的两个 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: 图 15 ocfs2console GUI 使用 ocfs2console GUI 工具执行以下步骤:
图 16启动 OCFS2 集群堆栈 以下对话框显示了节点 linux1 和 linux2 使用的 OCFS2 设置: 图 17 为 OCFS2 配置节点 注:如果发生错误,请参考故障诊断部分:
o2cb_ctl: Unable to access cluster service while creating node
退出 ocfs2console 后,将获得一个类似如下所示的 /etc/ocfs2/cluster.conf。需要在集群中的两个 Oracle RAC 节点上完成该过程,并且所有节点的 OCFS2 配置文件必须完全相同:
O2CB 集群服务 在使用 OCFS2 执行任何操作(如格式化或挂载文件系统)之前,我们需要先运行 OCFS2 的集群堆栈 O2CB(它将是以上执行的配置过程的结果)。此堆栈包含以下服务:
已将以上所有集群服务打包到 o2cb 系统服务 (/etc/init.d/o2cb) 中。以下是 o2cb 系统服务的某些更有用的命令和选项的简要列表。 注:以下命令仅用于进行说明,在安装和配置本文所述的 OCFS2 时无需运行!
您现在需要配置 OC2B 驱动程序的引导属性,以便在每次引导时将启动集群堆栈服务。您还需要将 OCFS2 心跳阈值的默认设置从 31 修改为 61。在集群的两个 Oracle RAC 节点上执行以下命令:
# /etc/init.d/o2cb offline ocfs2
# /etc/init.d/o2cb unload
# /etc/init.d/o2cb configure
Configuring the O2CB driver.
This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot. The current values will be shown in brackets ('[]'). Hitting
<enter> without typing an answer will keep that current value. Ctrl-C
will abort.
Load O2CB driver on boot (y/n) [n]: y
Cluster to start on boot (Enter "none" to clear) [ocfs2]: ocfs2
Specify heartbeat dead threshold (>=7) [31]: 61
Specify network idle timeout in ms (>=5000) [30000]: 30000
Specify network keepalive delay in ms (>=1000) [2000]: 2000
Specify network reconnect delay in ms (>=2000) [2000]: 2000
Writing O2CB configuration: OK
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
Starting O2CB cluster ocfs2: OK
格式化 OCFS2 文件系统 注:与本部分中其他任务不同,只能在 RAC 集群中的一个节点上创建 OCFS2 文件系统。我将只从 linux1 执行本节中的所有命令。 现在,我们开始使用“在 iSCSI 卷上创建分区”一节中针对 OCFS2 分区的 iSCSI 卷。 如果 O2CB 集群处于脱机状态,则启动它。格式化操作要求集群处于联机状态,这是因为它需要确保在集群的另一个节点上未挂载该卷。 在本文前面部分中,我们在为 OCFS2 /集群件创建挂载点部分中创建了目录 /u02/oradata/orcl,它将用作 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/part1
mkfs.ocfs2 1.2.6
Filesystem label=oracrsfiles Block 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=67108864
Initial number of node slots: 4
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 1 block(s)
Formatting Journals: done
Writing lost+found: done
mkfs.ocfs2 successful
挂载 OCFS2 文件系统 现在已经创建了此文件系统,接下来我们便可以载入它了。首先,使用命令行进行挂载,然后我将介绍如何将它包含在 /etc/fstab 中以在每次引导时挂载它。 注:需要使用 OCFS2 标签 oracrsfiles 以 root 用户帐户在两个 Oracle RAC 节点上执行集群文件系统挂载! 首先,此处介绍了如何从命令行手动挂载 OCFS2 文件。注意,需要以 root 用户帐户执行该操作:
$ su -
# mount -t ocfs2 -o datavolume,nointr -L "oracrsfiles" /u02/oradata/orcl
如果挂载成功,您将只是获得提示。但我们应运行以下检查来确保文件系统挂载正确。 首先,使用 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) cartman:SHARE2 on /cartman type nfs (rw,addr=192.168.1.120) configfs on /sys/kernel/config type configfs (rw) ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)请记下我挂载新文件系统所使用的 datavolume 选项。Oracle 数据库用户 必须使用 datavolume 挂载选项安装任何将包含表决磁盘文件、集群注册表 (OCR)、数据文件、重做日志、归档日志以及控制文件的卷,以确保 Oracle 进程打开包含 O_DIRECT 标志的文件。 nointr 选项确保 I/O 不会由于信号而中断。 不应使用该挂载选项挂载任何其他类型的卷,其中包括 Oracle 主目录(本指南未使用它)。 为什么挂载卷需要花费这么长的时间?挂载一个卷大约需要 5 秒钟。它这样做是为了使心跳线程保持稳定。在以后的版本中,Oracle 计划增加对全局心跳(这将使大多数挂载瞬间完成)的支持。 让我们了解一下到目前为止已经执行的操作。您安装了 OCFS2 软件程序包,它将用于存储集群管理器所需的共享文件。安装后,您将 OCFS2 模块加载到内核中,然后对集群文件系统进行了格式化。最后,您使用 OCFS2 标签“oracrsfiles”挂载了新建的文件系统。本节将逐步完成在每次使用 OCFS2 标签引导计算机时负责挂载新 OCFS2 文件系统的步骤。 首先将以下行添加到集群中两个 Oracle RAC 节点的 /etc/fstab 文件中:
LABEL=oracrsfiles /u02/oradata/orcl ocfs2 _netdev,datavolume,nointr 0 0
注意用于挂载此文件系统的“_netdev”选项。OCFS2 卷必须使用 _netdev 挂载选项。该挂载选项指示将在网络启动后挂载该卷,在关闭网络前卸载该卷。 现在,让我们确保已经加载了 ocfs2.ko 内核模块,并确保将在引导过程中安装文件系统。 如果您遵循了本指南中的示例,则应已经启用了用于加载内核模块并安装 OCFS2 文件系统的操作。但您将仍以 root 用户帐户在集群的两个 Oracle RAC 节点上运行以下命令来检查这些选项:
$ su -
# chkconfig --list o2cb
o2cb 0:off 1:off 2:on 3: on 4: on 5: on 6:off
应把我以粗体标记的标志设置为“on”。
使用 ls 命令检查所有权。应把权限设置为 0775,且将所有者设置为“oracle”,将组设置为“oinstall”。 我们来先检查权限:
# ls -ld /u02/oradata/orcl
drwxr-xr-x 3 root root 4096 Oct 11 01:13 /u02/oradata/orcl
正如在以上列表中所看到的, oracle 用户帐户(以及 oinstall 组)将无法写入此目录。我们来解决此问题:
# chown oracle:oinstall /u02/oradata/orcl
# chmod 775 /u02/oradata/orcl
我们回过头来再次检查集群中两个 Oracle RAC 节点的权限是否正确:
# ls -ld /u02/oradata/orcl
drwxrwxr-x 3 oracle oinstall 4096 Oct 11 01:13 /u02/oradata/orcl
重新引导两个节点 开始介绍下一节之前,最好在此时重新引导 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) 如果修改了 O2CB 心跳阈值,则应验证其是否设置正确: # cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold 如何确定 OCFS2 版本 要确定正在运行的 OCFS2 版本,使用:
# cat /proc/fs/ocfs2/version
OCFS2 1.2.6 Wed Jun 6 08:51:49 EDT 2007 (build 423c87604536cfd173cccdc48b1cc0ab)
17. 安装和配置自动存储管理 (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”方法。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 软件。由于 Enterprise Linux 中包含了 ASMLib,此处不再需要这一操作(但用户空间库除外,它需要单独下载)。ASMLib 2.0 软件堆栈包含下面的软件包:
在 Enterprise Linux 5.0 中,ASMLib 2.0 软件包在默认情况下不会安装。CD #3 上面有 ASMLib 2.0 内核驱动程序,CD #2 上面有驱动支持文件。用户空间库需单独下载,因为 Enterprise Linux 中不包含该程序。要确定 Oracle ASMLib 软件包是否已安装(多数情况下没有),在两个 Oracle RAC 节点上执行下述操作:
# rpm -qa | grep oracleasm | sort
如果未安装 ASMLib 2.0 软件包,依次加载 Enterprise Linux CD #2 和 #3 到各个 Oracle RAC 节点上,同时执行下面的操作:
安装完 ASMLib 软件包后,在两个 Oracle RAC 节点上验证已安装该软件:
# rpm -qa | grep oracleasm | sort
oracleasm-2.6.18-8.el5-2.0.4-1.el5
oracleasm-support-2.0.4-1.el5
获得 Oracle ASMLib 如前所述,ASMLib 2.0 软件包含在 Enterprise Linux 中,但用户空间库则不然(用户空间库也叫做 ASMLib 支持库)。用户空间库是必需的,您可以在此处下载: 在将用户空间库下载到集群中的两个 Oracle RAC 节点后,使用下面的命令进行安装:
# rpm -Uvh oracleasmlib-2.0.3-1.el5.i386.rpm
Preparing... ########################################### [100%]
1:oracleasmlib ########################################### [100%]
有关通过坚不可摧的 Linux 网络(并非本文的必需)获取 ASMLib 支持库的信息,请访问通过 Unbreakable Linux 网络获得 Oracle ASMLib。 配置和加载 ASMLib 2.0 程序包 现在,您下载并安装了用于 Linux 的 ASMLib 程序包,接下来您需要配置并加载 ASM 内核模块。需要在两个 Oracle RAC 节点上以 root 运行此任务:
$ su -
# /etc/init.d/oracleasm configure
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 []: oracle
Default group to own the driver interface []: oinstall
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: [ OK ]
Creating /dev/oracleasm mount point: [ OK ]
Loading module "oracleasm": [ OK ]
Mounting ASMlib driver filesystem:[ OK ]
Scanning system for ASM 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 VOL1 Removing ASM disk "VOL1" [ OK ] # /etc/init.d/oracleasm deletedisk VOL2 Removing ASM disk "VOL2" [ OK ] # /etc/init.d/oracleasm deletedisk VOL3 Removing ASM disk "VOL3" [ OK ] # /etc/init.d/oracleasm deletedisk VOL4 Removing ASM disk "VOL4" [ OK ]
要使用 iSCSI 目标名到本地设备名映射创建 ASM 磁盘,键入以下内容: $ su - # /etc/init.d/oracleasm createdisk VOL1 /dev/iscsi/asm1/part1 Marking disk "/dev/iscsi/asm1/part1" as an ASM disk [ OK ] # /etc/init.d/oracleasm createdisk VOL2 /dev/iscsi/asm2/part1 Marking disk "/dev/iscsi/asm2/part1" as an ASM disk [ OK ] # /etc/init.d/oracleasm createdisk VOL3 /dev/iscsi/asm3/part1 Marking disk "/dev/iscsi/asm3/part1" as an ASM disk [ OK ] # /etc/init.d/oracleasm createdisk VOL4 /dev/iscsi/asm4/part1 Marking disk "/dev/iscsi/asm4/part1" as an ASM disk [ OK ] 在 RAC 集群中的所有其他节点上,您必须执行磁盘扫描程序 以识别新卷:
# /etc/init.d/oracleasm scandisks
Scanning system for ASM disks [ OK ]
现在,我们可以使用以下命令在 RAC 集群中的两个节点上以 root 用户帐户测试是否成功创建了 ASM 磁盘:
# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
18. 下载 Oracle RAC 11 g 软件 只需要在集群中的一个节点上执行以下下载过程! 下一个逻辑步骤是安装 Oracle 软件,不过,我们必须首先从 Oracle 技术网 (OTN) 上下载并提取要求的 Oracle 软件包: http://www.oracle.com/technetwork/cn/database/database11g/downloads/111060-linuxsoft-087548-zhs.html 您将从 Oracle 下载所需的软件并将其提取到集群的一个 Linux 节点(即 linux1)上。您将从此计算机执行所有安装。Oracle 安装程序将使用远程访问方法将所需的软件程序包复制到我们在第 14 节(使用 SSH 为远程访问配置 RAC 节点)中设置的 RAC 配置中的所有其他节点上。 登录到您将从其中以“oracle”用户帐户执行所有 Oracle 安装的节点 (linux1)。在该示例中,您将把所需的 Oracle 软件下载到 linux1 并将其保存到 /home/oracle/orainstall。 下载并提取软件 首先,下载 Oracle 集群件 11g 第 1 版 (11.1.0.6.0) 和 Oracle 数据库 11g 第 1 版 (11.1.0.6.0),同时可根据需要下载 Oracle 数据库 11g 示例第 1 版 (11.1.0.6.0) 软件,它们都用于 Linux x86。所有下载均在同一页面中提供。 以 oracle 用户帐户将下载的三个程序包提取到临时目录。在该示例中,我将使用 /home/oracle/orainstall。 按如下所示提取 Oracle 集群件程序包:
# su - oracle
$ cd /home/oracle/orainstall
$ unzip linux_11gR1_clusterware.zip
然后提取 Oracle 数据库软件:
$ cd /home/oracle/orainstall
$ unzip linux_11gR1_database.zip
最后,提取(可选的)Oracle 示例软件:
$ cd /home/oracle/orainstall
$ unzip linux_11gR1_examples.zip
19. Oracle 集群件 11g 的安装前任务 在集群中的两个 Oracle RAC 节点上执行以下检查! 在安装 Oracle 集群件和 Oracle RAC 软件之前,强烈建议运行集群验证实用程序 (CVU) 以验证硬件和软件配置。CVU 是 Oracle 集群件安装介质上提供的一个命令行实用程序。它负责执行各种系统检查,以协助您确认 Oracle RAC 节点针对 Oracle 集群件和 Oracle 真正应用集群安装进行了正确的配置。CVU 只需从您将从其中执行 Oracle 安装的节点(本文中为 linux1)运行即可。 安装 cvuqdisk RPM验证远程访问/用户等效性 使用 CVU 验证 Oracle 集群件要求
利用 CVU 验证硬件和操作系统设置
第 1 页 第 2 页 第 3 页 |