分类: Oracle
2008-04-14 16:46:25
在集群中的两个 Oracle RAC 节点上执行以下任务!
您将使用 OCFS2 存储 Oracle 集群件软件需要共享的文件。在使用 OCFS2 时,集群中的两个 Oracle RAC 节点上的 UNIX 用户 oracle 的 UID 和 UNIX 组 dba 的 GID 必须相同。如果 UID 或 GID 不同,则 OCFS2 文件系统中的文件将显示为“unowned”,甚至可能由其他用户所拥有。对于本文而言,oracle UID 使用 175,dba GID 使用 115。
创建 Oracle 的组和用户
让我们继续此示例,创建 Unix dba 组和 oracle 用户帐户以及所有相关目录。
# mkdir -p /u01/app
# groupadd -g 115 dba
# groupadd -g 116 oinstall
# useradd -u 175 -g 115 -d /u01/app/oracle -s /bin/bash -c "Oracle Software Owner" -p oracle oracle
# chown -R oracle:dba /u01
# passwd oracle
# su - oracle
注:当您为每个 Oracle RAC 节点设置 Oracle 环境变量时,请确保为每个 RAC 节点分配唯一的 Oracle SID!对于此示例,我使用:
为 oracle 用户帐户创建登录脚本
在两个节点上都创建了“oracle”UNIX 用户 id 后,通过使用以下 .bash_profile 确保正确设置了环境:.................................... # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi alias ls="ls -FA" # 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=$ORACLE_BASE/product/crs export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin export JAVA_HOME=/usr/local/java # 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 ....................................
为 OCFS2/集群件创建挂载点
最后,为将用于存储两个 Oracle 集群件共享文件的 OCFS2 文件系统创建挂载点。需要以“root”用户帐户运行这些命令:
$ su -
# mkdir -p /u02/oradata/orcl
# chown -R oracle:dba /u02
在集群中的两个 Oracle RAC 节点上执行以下配置过程!
每次引导算机时,都需要在集群中的两个 Oracle RAC 节点上定义本节讨论的内核参数。本节提供了设置 Oracle 必需的那些内核参数的详细信息。(“用于所有 Oracle RAC 节点的所有启动命令”)中包含有关如何将这些命令置于启动脚本 (/etc/sysctl.conf) 中的说明。
概述
本节集中讨论了针对 Oracle10g RAC 安装配置两台 Oracle RAC Linux 服务器的步骤。这包括验证足够的交换空间、设置共享内存和信号、设置文件句柄的最大数量、设置 IP 本地端口范围、设置对 oracle 用户的 shell 限制、激活系统的所有内核参数,以及如何验证两个集群节点的日期和时间是否正确。
在本节中,您将注意到可以使用多种方法来配置(设置)这些参数。就本文而言,我将通过把所有命令置于 /etc/sysctl.conf 文件中使所有更改永久有效(通过重新引导)。
对交换空间的考虑因素
# cat /proc/meminfo | grep MemTotal
MemTotal:1033116 kB
# cat /proc/meminfo | grep SwapTotal
SwapTotal:2031608 kB
以 root 身份创建一个用作额外交换空间的文件,假设大小为 300MB:
# dd if=/dev/zero of=tempswap bs=1k count=300000
现在我们应该更改文件的权限:
# chmod 600 tempswap
最后我们将该“分区”格式化为交换分区,并将其添加到交换空间:
# mke2fs tempswap
# mkswap tempswap
# swapon tempswap
设置共享内存
共享内存通过将通用的结构和数据放在共享内存段中,使得进程可以对它们进行访问。这是现有最快的进程间通信 (IPC) 方式,主要是因为数据在进程之间传递时没有涉及内核操作。不需要在进程间复制数据。
Oracle 将共享内存用于它的共享全局区 (SGA),这是一个由所有的 Oracle 备份进程及前台进程共享的内存区域。为 SGA 分配足够的容量对于 Oracle 的性能非常重要,这是因为它负责保存数据库缓冲区高速缓存、共享 SQL、访问路径,等等。
要确定所有共享内存的限制,使用以下命令:
# ipcs -lm
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1
设置 SHMMAXSHMMAX 参数定义共享内存段的最大大小(以字节为单位)。Oracle SGA 由共享内存组成,且错误设置 SHMMAX 可能会限制 SGA 的大小。在设置 SHMMAX 时,切记 SGA 的大小应该适合于一个共享内存段。SHMMAX 设置不足可能会导致以下问题:
ORA-27123:unable to attach to shared memory segment您可以通过执行以下命令确定 SHMMAX 的值:# cat /proc/sys/kernel/shmmaxSHMMAX 的默认值为 32MB。通常,这个值对于配置 Oracle SGA 而言太小了。我通常使用以下方法将 SHMMAX 参数设置为 2GB:
33554432
- 可以通过使用以下命令直接更改 /proc 文件系统 (/proc/sys/kernel/shmmax) 来更改 SHMMAX 的默认设置,而不必重新引导计算机:
# sysctl -w kernel.shmmax=2147483648- 然后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使这种更改永久有效:
# echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf设置 SHMMNI
我们现在看一下 SHMMNI 参数。这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096。
可以通过执行以下命令确定 SHMMNI 的值:
# cat /proc/sys/kernel/shmmniSHMMNI 的默认设置应足以满足 Oracle RAC 10g 第 2 版安装的需要。
4096设置 SHMALL
最后,我们来看 SHMALL 共享内存内核参数。该参数控制系统一次可以使用的共享内存总量(以页为单位)。简言之,该参数的值始终应至少为:
ceil(SHMMAX/PAGE_SIZE)SHMALL 的默认大小为 2097152,并可以使用以下命令进行查询:# cat /proc/sys/kernel/shmallSHMALL 的默认设置应足以满足 Oracle RAC 10g 第 2 版安装的需要。
2097152(注:i386 平台上的 Red Hat Linux 中的页面大小为 4,096 字节。但您可以使用 bigpages,它支持更大内存页面的配置。)
设置信号
至此,您已经配置了共享内存设置,接下来将配置信号。对“信号”的最佳描述是,它是用于在共享资源(如共享内存)的进程(或进程中的线程)之间提供同步的计数器。UNIX System V 支持信号集,其中的每个信号都是一个计数信号。当应用程序请求信号时,它使用“集合”来完成此工作。
要确定所有信号限制,使用以下命令:
# ipcs -ls您还可以使用以下命令:
------ Semaphore Limits --------
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
设置 SEMMSLSEMMSL 内核参数用于控制每个信号集合的最大信号数。
Oracle 建议将 SEMMSL 设置为 init.ora 文件(适用于 Linux 系统上所有数据库)中的最大 PROCESS 实例参数设置再加上 10。此外,Oracle 建议将 SEMMSL 设置为不小于 100。
设置 SEMMNI
SEMMNI 内核参数用于控制整个 Linux 系统中信号集的最大数量。Oracle 建议将 SEMMNI 设置为不小于 100。
设置 SEMMNS
SEMMNS 内核参数用于控制整个 Linux 系统中的信号(而非信号集)的最大数量。
Oracle 建议将 SEMMNS 设置为系统上每个数据库的 PROCESSES 实例参数设置之和,加上最大的 PROCESSES 的两倍,最后为系统上的每个 Oracle 数据库加上 10。
使用以下计算式确定可以在 Linux 系统上分配的信号的最大数量。它将是以下两者中较小的一个值:
SEMMNS -or- (SEMMSL * SEMMNI)设置 SEMOPM
SEMOPM 内核参数用于控制每个 semop 系统调用可以执行的信号操作数。
semop 系统调用(函数)能够使用一个 semop 系统调用完成多个信号的操作。一个信号集可以拥有每个信号集中最大数量的 SEMMSL,因此建议将 SEMOPM 设置为等于 SEMMSL。
Oracle 建议将 SEMOPM 设置为不小于 100。
设置信号内核参数
最后,我们来看如何使用一些方法来设置所有信号参数。在下文中,我想更改(增加)的唯一参数是 SEMOPM。所有其他的默认设置可以完全满足我们的示例安装。
- 可以通过使用以下命令直接更改 /proc 文件系统 (/proc/sys/kernel/sem) 来更改所有信号设置的默认设置,而不必重新引导计算机:
# sysctl -w kernel.sem="250 32000 100 128"- 然后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使这种更改永久有效:
# echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
设置文件句柄
在配置我们的 Red Hat Linux 服务器时,确保文件句柄的最大数量足够大是非常关键的。文件句柄的设置表示您在 Linux 系统上可以打开的文件数。
使用以下命令来确定整个系统中文件句柄的最大数量:
# cat /proc/sys/fs/file-maxOracle 建议将整个系统的文件句柄值至少设置为 65536。
102563
# sysctl -w fs.file-max=65536
# echo "fs.file-max=65536" >> /etc/sysctl.conf
# cat /proc/sys/fs/file-nrfile-nr 文件显示了三个参数:分配的文件句柄总数、当前使用的文件句柄数以及可以分配的最大文件句柄数。
825 0 65536
(注:如果需要增大 /proc/sys/fs/file-max 中的值,请确保正确设置 ulimit。对于 2.4.20,通常将其设置为 unlimited。使用 ulimit 命令验证 ulimit 设置:
# ulimit
unlimited
设置 IP 本地端口范围
配置系统,使本地端口范围为 1024 至 65000。
使用以下命令确定 ip_local_port_range 的值:
# cat /proc/sys/net/ipv4/ip_local_port_rangeip_local_port_range 的默认值是从 32768 到 61000 的端口。Oracle 建议的本地端口范围是 1024 到 65000。
32768 61000
# sysctl -w net.ipv4.ip_local_port_range="1024 65000"
# echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf
为 Oracle 用户设置 Shell 限制
要改善 Linux 系统上的软件性能,Oracle 建议您提高 oracle 用户的 shell 限制:
Shell 限制 |
limits.conf 中的条目 |
硬限制 |
最大打开文件描述符数 |
nofile |
65536 |
可用于单个用户的最大进程数 |
nproc |
16384 |
cat >> /etc/security/limits.conf <oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
cat >> /etc/pam.d/login <为“oracle”UNIX 帐户更新默认的 shell 启动文件。session required /lib/security/pam_limits.so
EOF
cat >> /etc/profile <if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
cat >> /etc/csh.login <if ( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
endif
EOF
激活系统的所有内核参数
此时,我们已经包含了成功进行 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.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_max = 262144
kernel.shmmax = 2147483648
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
在所有的集群节点上设置正确的日期和时间
在安装 Oracle 集群件、数据库以及随附 CD 期间,Oracle Universal Installer (OUI) 将首先安装运行该安装程序的本地节点(即 linux1)的软件。然后,将该软件以远程方式复制到集群中的其余节点(即 linux2)。在远程复制过程中,OUI 将在每个远程节点上执行 UNIX“tar”命令,以提取进行了存档和复制的文件。如果执行安装的节点上的日期和时间大于其要进行复制的节点上的日期和时间,那么 OUI 将在“tar”中引发一个错误,以指示其在试图提取带有时间戳的文件时失败。请注意,尽管这看起来像 OUI 中一个严重的错误,但您完全可以将其看作是一个警告而忽略。“tar”命令 DOES 确实提取了文件;然而,当您在远程节点上执行文件列表时(使用 ls -l),它们将缺少时间字段,直到服务器上的时间大于该文件的时间戳。 在启动以上任何一个所述安装之前,确保尽可能将集群的每个成员节点设置为相同的时间和日期。由于两个 Oracle RAC 节点使用相同的参考 Network Time Protocol 服务器,因此 Oracle 强烈建议使用多数操作系统的 Network Time Protocol 功能来执行该操作。 然而,访问 Network Time Protocol 服务器并非始终可用。在这种情况下,为集群中的节点手动设置日期和时间,确保要从其中执行软件安装的节点 (linux1) 的时间和日期小于集群中所有其他节点 (linux2)。我一般使二者之间相差 20 秒,如以下示例所示: 设置 linux1 的日期和时间:Error while copying directory /u01/app/oracle/product/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 2006-09-13 09:21:34 is 735 s in the future /bin/tar:./bin/olsnodes:time stamp 2006-09-13 09:21:34 is 735 s in the future ...(more errors on this node)
# date -s "6/25/2007 23:00:00"设置 linux2 的日期和时间:
# date -s "6/25/2007 23:00:20"本文中所述的双节点 RAC 配置没有使用 Network Time Protocol 服务器。
在集群中的两个 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.9-55.0.0.0.2.ELhugemem/kernel/drivers/char/hangcheck-timer.ko /lib/modules/2.6.9-55.0.0.0.2.ELsmp/kernel/drivers/char/hangcheck-timer.ko /lib/modules/2.6.9-55.0.0.0.2.EL/kernel/drivers/char/hangcheck-timer.ko在以上输出中,我们关注的是 /lib/modules/2.6.9-55.0.0.0.2.ELhugemem/kernel/drivers/char 目录中的 hangcheck 计时器对象 (hangcheck-timer.ko),因为这是我们运行的内核。
配置并加载 hangcheck-timer 模块
hangcheck-timer 模块有两个关键的参数:
system hang time > (hangcheck_tick + hangcheck_margin)配置 Hangcheck 内核模块参数
每次加载 hangcheck-timer 内核模块(手动加载或由 Oracle 加载)时,它都需要知道对我们刚刚讨论的两个参数(hangcheck-tick 和 hangcheck-margin) 所使用的值。这些值需要在每次重新引导 Linux 服务器后可用。为此,在 /etc/modprobe.conf 文件中创建一个具有正确值的条目,如下所示:
# su -每次加载 hangcheck-timer 内核模块时,它将使用由我在 /etc/modprobe.conf 文件中创建的条目定义的值。
# echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modprobe.conf
手动加载 Hangcheck 内核模块以进行测试
Oracle 负责在需要时加载 hangcheck-timer 内核模块。因此,不必在任何启动文件(如 /etc/rc.local)中执行 hangcheck-timer 内核模块的 modprobe 或 insmod。
我继续在 /etc/rc.local 文件中包含 hangcheck-timer 内核模块的 modprobe 完全只是出于个人习惯。有朝一日我将戒掉这个习惯,但请注意,启动过程中包含 hangcheck-timer 内核模块的 modprobe 并无害处。
为了使自己保持清醒并能够在夜晚安睡,我始终按如下所示在每次启动时配置 hangcheck-timer 内核的加载:
# echo "/sbin/modprobe hangcheck-timer" >> /etc/rc.local
(注:您不必在每次重新引导后使用 modprobe 或 insmod 手动加载 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 -2 Jun 25 18:18:31 linux1 kernel:Hangcheck:starting hangcheck timer 0.9.0 (tick is 30 seconds, margin is 180 seconds). Jun 25 18:18:31 linux1 kernel:Hangcheck:Using monotonic_clock().
在集群中的两个 Oracle RAC 节点上执行以下配置过程!
在可以安装并使用 Oracle 真正应用集群之前,您必须为所有集群节点上的“oracle”UNIX 用户帐户配置安全 shell (RSH) 或远程 shell (RSH)。此处的目的是为“oracle”UNIX 用户帐户设置用户等效性。利用用户等效性 (User equivalence),“oracle”UNIX 用户帐户无需口令就可访问集群中的所有其他节点(运行命令和复制文件)。使用 SSH 或 RSH(其中 SSH 是首选方法)都可实现此配置。Oracle 在 10g 第 1 版中增加了将 SSH 工具套件用于设置用户等效项的支持。在 Oracle10g 之前,用户等效性必须使用远程 shell 进行配置。 注意,如果 10g 中的 Oracle Universal Installer 没有检测出存在安全 shell 工具(ssh 和 scp),那么它将尝试使用远程 shell 工具(rsh 和 rcp)。 那么,我们为什么必须设置用户等效性?安装 Oracle 集群件和 Oracle 数据库软件只在 RAC 集群中的一个节点上进行。在特定节点上运行 Oracle Universal Installer (OUI) 时,它将使用 ssh 和 scp 命令(如果使用远程 shell,则用 rsh 和 rcp 命令)在集群内的所有其他节点上运行远程命令并向这些节点复制文件(Oracle 软件)。运行 OUI (runInstaller) 的节点上的“oracle”UNIX 用户帐户必须受到您的 RAC 集群中其他所有节点的信任。这意味着,相对于集群中的所有其他 Linux 服务器,您必须能够在要从其中运行 OUI 的 Linux 服务器上运行安全 shell 命令(ssh 或 scp)或远程 shell 命令(rsh 和 rcp),而不会收到输入口令的提示。 注意,普通 RAC 操作无需使用安全 shell 或远程 shell。然而,对于 RAC 和补丁集安装以及创建集群数据库时,必须启用该配置。 第一步是确定使用哪种远程访问方法 — 安全 shell 还是远程 shell。二者各有利弊。例如,远程 shell 非常易于安装和配置。它的构造只需很少的几步,并当登录到受信任的节点(要从其中执行安装的节点)后,其在终端会话中始终可用。然而,在安装和任何修补过程中,到远程节点的连接不安全。另一方面,安全 shell 可在安装和修补时提供安全连接,但是设置步骤繁琐。此外,每次 oracle 用户登录到受信任的节点后,都需要在终端会话中启用该方法。官方 Oracle 文档仅给出了设置安全 shell 的步骤,并将其作为首选方法。 在以下两个部分对于配置用户等效性的这两种方法进行了介绍: 使用安全 Shell 方法本部分将介绍如何配置 OpenSSH 版本 3。要确定是否 SSH 已安装并运行,可输入以下命令:
# pgrep sshd如果 SSH 正在运行,那么该命令的响应将是一个进程 ID 编号(一个或多个)列表。请在集群中的两个 Oracle RAC 节点上运行该命令,以验证 SSH 后台程序已安装并正在运行! 要了解更多有关 SSH 的信息,请参阅以下 man 页:
2808# man ssh在两个 Oracle RAC 节点上创建 RSA 和 DSA 密钥配置 SSH 的第一步是在集群中的两个 Oracle RAC 节点上创建 RSA 和 DSA 密钥对。执行该操作的命令将为 RSA 和 DSA 各创建一个公共密钥和一个私有密钥(每个节点总共 4 个密钥)。然后,需要将 RSA 和 DSA 公共密钥的内容复制到一个授权密钥文件 中,之后将该文件分发到集群中的两个 Oracle RAC 节点。为当前 Shell 会话启用 SSH 用户等效性使用以下步骤创建 RSA 和 DSA 密钥对。请注意,集群中的两个 Oracle RAC 节点上均需要完成这些步骤:
- 以“oracle”UNIX 用户帐号进行登录。
# su - oracle- 如果必要,在“oracle”用户的主目录中创建 .ssh 目录,并在其上设置正确的权限:
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh- 输入以下命令,为版本 3 的 SSH 协议生成 RSA 密钥对(公共密钥和私有密钥):
$ /usr/bin/ssh-keygen -t rsa在提示符下:
- 接受针对密钥文件的默认位置。
- 输入并确认口令短语。该口令应当与“oracle”UNIX 用户帐户口令不同,但这不是必需的。
该命令会将公共密钥写入 ~/.ssh/id_rsa.pub 文件,将私有密钥写入 ~/.ssh/id_rsa 文件。注意,始终不要将密钥分发给任何人!
- 输入以下命令,为版本 3 的 SSH 协议生成 DSA 密钥对(公共密钥和私有密钥):
$ /usr/bin/ssh-keygen -t dsa在提示符下:
- 接受针对密钥文件的默认位置。
- 输入并确认口令短语。该口令应当与“oracle”UNIX 用户帐户口令不同,但这不是必需的。
该命令会将公共密钥写入 ~/.ssh/id_dsa.pub 文件,将私有密钥写入 ~/.ssh/id_dsa 文件。注意,始终不要将密钥分发给任何人!
- 为集群中的两个 Oracle RAC 节点重复以上步骤。
现在,每个 Oracle RAC 节点都包含用于 RSA 和 DSA 的公共和私有密钥,您需要在其中一个节点上创建一个授权密钥文件。授权密钥文件只是一个包含每个人(每个节点)的 RSA 和 DSA 公共密钥的文件。在授权密钥文件包含了所有公共密钥后,将其分发至集群中的所有其他节点。
在集群中的其中一个节点上完成以下步骤,然后分发授权密钥文件。考虑到本文的目的,我将使用 linux1:
- 首先,确定该节点上是否已经存在授权密钥文件 (~/.ssh/authorized_keys)。在多数情况下,该文件是不存在的,因为本文假设您使用的是新安装。如果该文件不存在,那么现在开始创建:
$ touch ~/.ssh/authorized_keys以上的列表应当显示前一部分中创建的 id_rsa.pub 和 id_dsa.pub 公共密钥。
$ cd ~/.ssh
$ ls -l *.pub
-rw-r--r-- 1 oracle dba 603 Aug 31 23:40 id_dsa.pub
-rw-r--r-- 1 oracle dba 223 Aug 31 23:36 id_rsa.pub- 在该步骤中,使用 SSH 将 ~/.ssh/id_rsa.pub 和 ~/.ssh/id_dsa.pub 公共密钥的内容从集群中的两个 Oracle RAC 节点复制到刚才创建的授权密钥文件中 (~/.ssh/authorized_keys)。同样,我将通过 linux1 进行操作。系统将提示您为每个访问的 Oracle RAC 节点输入“oracle”UNIX 用户帐户口令。注意,在使用 SSH 访问您所在的节点 (linux1) 时,第一次将提示输入“oracle”UNIX 用户帐户口令。第二次尝试访问该节点时,将提示输入用于解锁私有密钥的口令短语。对于任何其他节点,系统将始终询问“oracle”UNIX 用户帐户口令。
以下示例将从 linux1 运行,假设这是个双节点集群,即节点 linux1 和 linux2:
$ ssh linux1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys注:第一次使用 SSH 从特定系统连接到节点时,您可能会看见一条类似下面的消息:
The authenticity of host 'linux1 (192.168.1.100)' can't be established.
RSA key fingerprint is 61:8a:f9:9e:28:a2:b7:d3:70:8d:dc:76:ca:d9:23:43.
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 linux1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
Enter passphrase for key '/u01/app/oracle/.ssh/id_rsa':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 84:2b:bd:eb:31:2c:23:36:55:c2:ee:54:d2:23:6a:e4.
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 linux2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
oracle@linux2's password:xxxxxThe authenticity of host 'linux1 (192.168.1.100)' can't be established.在提示符下输入 yes 进行确认。如果从该系统连接到相同的节点,您将不会再次看到该消息。
RSA key fingerprint is 61:8a:f9:9e:28:a2:b7:d3:70:8d:dc:76:ca:d9:23:43.
Are you sure you want to continue connecting (yes/no)? yes- 此时,在 linux1 上,我们在授权密钥文件 (~/.ssh/authorized_keys) 中获得了来自集群中各个节点的 RSA 和 DSA 公共密钥内容。我们现在将其复制到集群中的其余节点。在这个双节点集群示例中,唯一剩下的节点就是 linux2。使用 scp 命令将授权密钥文件复制到集群中的其余所有节点:
$ scp ~/.ssh/authorized_keys linux2:.ssh/authorized_keys
oracle@linux2's password:xxxxx
authorized_keys 100% 1652 1.6KB/s 00:00- 通过登录到节点并运行以下命令,为集群中的两个 Oracle RAC 节点更改授权密钥文件的权限:
$ chmod 600 ~/.ssh/authorized_keys- 此时,如果在另一个节点上使用 ssh 登录或运行命令,则会提示您输入在创建 DSA 密钥时指定的口令短语。例如,在 linux1 中测试以下内容:
$ ssh linux1 hostname注:如果除主机名外,您还看到任何其他消息或文本,则 Oracle 安装可能失败了。进行必要的更改,以确保您在输入这些命令时只有主机名显示。您应当确保修改生成任何输出或询问任何问题的登录脚本(一个或多个)的任何部分,以便它们仅当 shell 是交互式 shell 时生效。
Enter passphrase for key '/u01/app/oracle/.ssh/id_rsa':xxxxx
linux1
$ ssh linux2 hostname
Enter passphrase for key '/u01/app/oracle/.ssh/id_rsa':xxxxx
linux2运行 OUI 时,需要不用提示输入口令短语就可运行安全 shell 工具命令(ssh 和 scp)。尽管集群中的两个 Oracle RAC 节点上都配置了 SSH,使用安全 shell 工具命令时仍会提示输入口令短语。因此,在运行 OUI 之前,您需要为打算从其中运行 OUI 的终端会话启用用户等效性。考虑到本文目的,所有 Oracle 安装都将在 linux1 中进行。 在尝试运行 OUI 之前,需要在任何新的终端 shell 会话中启用用户等效性。如果您注销并又重新登录将从其中执行 Oracle 安装的节点,那么您必须为终端 shell 会话启用用户等效性,因为这不是默认设置。 要为当前终端 shell 会话启用用户等效性,执行以下步骤:移除所有 stty 命令
- 以“oracle”UNIX 用户帐户登录希望从其中运行 OUI 的节点 (linux1)。
# su - oracle- 输入以下命令:
$ exec /usr/bin/ssh-agent $SHELL $ /usr/bin/ssh-add Enter passphrase for /u01/app/oracle/.ssh/id_rsa:xxxxx Identity added:/u01/app/oracle/.ssh/id_rsa (/u01/app/oracle/.ssh/id_rsa) Identity added:/u01/app/oracle/.ssh/id_dsa (/u01/app/oracle/.ssh/id_dsa)在提示符下,为生成的每个密钥输入口令短语。- 如果 SSH 配置正确,您将能够从该终端对话使用 ssh 和 scp 命令,而无需提供口令或口令短语。
$ ssh linux1 "date;hostname" Mon Jun 25 18:24:23 EDT 2007 linux1 $ ssh linux2 "date;hostname" Mon Jun 25 18:26:15 EDT 2007 linux2注:以上命令应显示两个 Oracle RAC 节点上设置的日期及其主机名。如果任何节点提示输入口令或口令短语,则验证位于该节点上的 ~/.ssh/authorized_keys 文件是否包含正确的公共密钥。此外,如果除日期和主机名外,您还看到其他任何消息或文本,则 Oracle 安装可能失败了。进行必要的更改,以确保您在输入这些命令时只有日期显示。您应当确保修改生成任何输出或询问任何问题的登录脚本(一个或多个)的任何部分,以便它们仅当 shell 是交互式 shell 时生效。- Oracle Universal Installer 是一个 GUI 接口,要求使用 X 服务器。在启用了用户等效性的终端会话中(您将从其中执行 Oracle 安装的节点),将环境变量 DISPLAY 设置为有效的 X 窗口显示:
Bourne、Korn 和 Bash shell:
$ DISPLAY=C shell::0
$ export DISPLAY$ setenv DISPLAY将 DISPLAY 变量设置为有效的 X 窗口显示后,您应当执行当前终端会话的另一个测试,以确保 X11 forwarding 没有启用::0 $ ssh linux1 hostname linux1 $ ssh linux1 hostname linux2注:如果您使用远程客户端来连接到执行安装的节点,则会看到类似下面的消息:"Warning:No xauth data; using fake authentication data for X11 forwarding.”,这意味着您的授权密钥文件配置正确,但是,您的 SSH 配置启用了 X11 forwarding。例如:$ export DISPLAY=melody:0注意,启用 X11 Forwarding 将导致 Oracle 安装失败。要纠正这个问题,需为禁用 X11 Forwarding 的“oracle”UNIX 用户帐户创建一个用户级 SSH 客户端配置文件:
$ ssh linux2 hostname
Warning:No xauth data; using fake authentication data for X11 forwarding.
linux2
- 使用文本编辑器,编辑或创建文件 ~/.ssh/config
- 确保 ForwardX11 属性设为 no。例如,将以下内容插入 ~/.ssh/config file:
Host *
ForwardX11 no- 您必须从该终端会话运行 Oracle Universal Installer,或记住在从不同终端会话启动 Oracle Universal Installer 之前,重复这些步骤(该部分的步骤 2、3 和 4)以启用用户等效性。
在安装 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 将指示错误并停止安装。
在多数 Linux 系统上,远程 shell 提供的服务默认为禁用。本部分将介绍启用并配置用户等效性所需的任务,以供 Oracle Universal Installer、运行命令时以及使用远程 shell 工具复制到集群中远程节点的文件使用。目的是使 Oracle Universal Installer 能够使用 rsh 和 rcp 来运行命令,以及不用提供口令就可将文件复制到远程节点。请注意,使用远程 shell 方法来配置用户等效性不安全。rsh 后台程序使用位于用户(oracle 的)主目录中的 /etc/hosts.equiv 文件或 .rhosts 文件验证用户。
首先,确保集群中的两个 Oracle RAC 节点上都安装了 rsh RPM:
# rpm -q rsh rsh-server rsh-0.17-25.4 rsh-server-0.17-25.4根据以上信息,我们可以确认已经安装了 rsh 和 rsh-server。如果未安装 rsh,则可以从 RPM 所在的 CD 中运行以下命令:# su - # rpm -ivh rsh-0.17-25.4.i386.rpm rsh-server-0.17-25.4.i386.rpm要启用“rsh”和“rlogin”服务,必须将 /etc/xinetd.d/rsh 文件中的“disable”属性设置为“no”并且必须重新加载 xinetd。这可通过在集群中的所有节点上运行以下命令来完成:
# su -要使“oracle”UNIX 用户帐户在 RAC 节点中获得信任,在集群中的所有节点上创建 /etc/hosts.equiv 文件:
# chkconfig rsh on # chkconfig rlogin on # service xinetd reload Reloading configuration:[ OK ]# su - # touch /etc/hosts.equiv # chmod 600 /etc/hosts.equiv # chown root.root /etc/hosts.equiv现在,将所有 RAC 节点添加到集群中类似于以下示例的两个 Oracle RAC 节点的 /etc/hosts.equiv 文件中:# cat /etc/hosts.equiv +linux1 oracle +linux2 oracle +linux1-priv oracle +linux2-priv oracle注:在以上示例中,第二个字段只允许 oracle 用户帐号在所指定的节点上运行 rsh 命令。由于安全原因,/etc/hosts.equiv 文件应该由 root 所拥有,并应该将权限设置为 600。实际上,某些系统只有在该文件的所有者为 root 并且权限被设置为 600 时才接受此文件的内容。 尝试测试 rsh 命令前,确保使用的是正确版本的 rsh。在默认情况下,Red Hat Linux 将 /usr/kerberos/sbin 放在 $PATH 变量的前面。这会导致执行 rsh 的 Kerberos 版本。我通常会重命名 rsh 的 Kerberos 版本,以便使用正常的 rsh 命令。使用以下命令:
# su -
# which rsh
/usr/kerberos/bin/rsh
# mv /usr/kerberos/bin/rsh /usr/kerberos/bin/rsh.original
# mv /usr/kerberos/bin/rcp /usr/kerberos/bin/rcp.original
# mv /usr/kerberos/bin/rlogin /usr/kerberos/bin/rlogin.original
# which rsh
/usr/bin/rsh现在,应从将要执行 Oracle 集群件和 10g RAC 安装的节点测试连接并运行 rsh 命令。我将使用节点 linux1 执行所有安装,因此我将从该节点运行以下命令:
# su - oracle $ rsh linux1 ls -l /etc/hosts.equiv -rw------- 1 root root 70 Jun 25 18:29 /etc/hosts.equiv $ rsh linux1-priv ls -l /etc/hosts.equiv -rw------- 1 root root 70 Jun 25 18:29 /etc/hosts.equiv $ rsh linux2 ls -l /etc/hosts.equiv -rw------- 1 root root 70 Jun 25 18:29 /etc/hosts.equiv $ rsh linux2-priv ls -l /etc/hosts.equiv -rw------- 1 root root 70 Jun 25 18:29 /etc/hosts.equiv与使用安全 shell 不同,不需要用其他操作或命令来启用用户等效性以使用远程 shell。在成功登录终端会话后,用户等效性将针对“oracle”UNIX 用户帐户启用。
验证以下启动命令都包含在集群中的两个 Oracle RAC 节点上!
至此,我们已经详细介绍了需要在 Oracle10g RAC 配置的两个节点上配置的参数和资源。在本部分中,我们将稍事调整,简要复述这些参数、命令和条目(在本文前面的章节中已提到过),当引导计算机时需要在两个 Oracle RAC 节点上执行它们。
对于以下的每个启动文件,都应将灰色的条目包含在每个启动文件中。
/etc/modprobe.conf
(所有要由内核模块使用的参数和值。)
alias eth0 r8169 alias eth1 e1000 alias scsi_hostadapter ata_piix alias snd-card-0 snd-intel8x0 options snd-card-0 index=0 install snd-intel8x0 /sbin/modprobe --ignore-install snd-intel8x0 && /usr/sbin/alsactl restore >/dev/null 2>&1 || : remove snd-intel8x0 { /usr/sbin/alsactl store >/dev/null 2>&1 || :; }; /sbin/modprobe -r --ignore-remove snd-intel8x0 alias usb-controller ehci-hcd alias usb-controller1 uhci-hcd options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
/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 # 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 # Default setting in bytes of the socket receive buffer net.core.rmem_default=262144 # Default setting in bytes of the socket send buffer net.core.wmem_default=262144 # Maximum socket receive buffer size which may be set by using # the SO_RCVBUF socket option net.core.rmem_max=262144 # Maximum socket send buffer size which may be set by using # the SO_SNDBUF socket option net.core.wmem_max=262144 # +---------------------------------------------------------+ # | SHARED MEMORY | # +---------------------------------------------------------+ kernel.shmmax=2147483648 # +---------------------------------------------------------+ # | 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/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 linux1 192.168.1.101 linux2 # Private Interconnect - (eth1) 192.168.2.100 linux1-priv 192.168.2.101 linux2-priv # Public Virtual IP (VIP) addresses - (eth0) 192.168.1.200 linux1-vip 192.168.1.201 linux2-vip # Private Storage Network for Openfiler - (eth1) 192.168.1.195 openfiler1 192.168.2.195 openfiler1-priv 192.168.1.106 melody 192.168.1.102 alex 192.168.1.105 bartman 192.168.1.120 cartman
/etc/hosts.equiv
(/etc/hosts.equiv 文件仅在使用远程 shell 方法建立远程访问和用户等效性时需要。使用远程 shell 方法启用用户等效性后,无需提供口令就可以 oracle 用户帐户登录各个 Oracle RAC 节点。)
+linux1 oracle
+linux2 oracle
+linux1-priv oracle
+linux2-priv oracle
/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
应在集群中的这两个 Oracle RAC 节点上执行本节中的大多数配置过程!但创建 OCFS2 文件系统应只在 RAC 集群中的一个节点上执行。
现在,开始配置 Oracle 集群文件系统第 2 版 (OCFS2)。由 Oracle Corporation 开发的 OCFS2 是一个集群文件系统,它允许集群中的所有节点通过标准文件系统接口并发访问一个设备。这样便可以对需要在集群中运行的应用程序进行轻松地管理。
OCFS(第 1 版)于 2002 年 12 月发布,使 Oracle 真正应用集群 (RAC) 用户可以运行集群化数据库而不必处理原始设备。文件系统是为存储数据库相关文件(如数据文件、控制文件、重做日志、归档日志等)设计的。OCFS2 是下一代 Oracle 集群文件系统。它是作为一个通用集群文件系统而设计的。使用它,用户不但可以在共享磁盘上存储与数据库相关的文件,而且还可以存储 Oracle 二进制文件和配置文件(共享的 Oracle 主目录),从而使 RAC 的管理变得更简单。
在本指南中,你将使用 Enterprise Linux 第 4 版 Update 5(OCFS2 1.2.5-1 版)包含的 OCFS2 版本来存储 Oracle Clusterware 软件共享所需的两个文件。除了这两个文件以外,您还将使用此空间存储所有 Oracle RAC ASM 实例的共享 SPFILE。
有关适用于 Linux 的 OCFS2 的更多信息(包括安装说明),请参见本页面。
安装 OCFS2
在本文以前的版本中,此时您需要从 下载 OCFS2 软件。OCFS2 软件包括以下程序包:
然而,现在不需要下载 OCFS2 软件了,因为它已包括在 Enterprise Linux 中。如果您遵循我所提供的 Enterprise Linux 安装指导,则已经安装了所有内容,这时您将拥有所有 OCFS2 必需的 RPM 程序包。但如果您执行了其他安装类型(即,高级服务器),则可能缺少 OCFS2 程序包并需要安装它们。OCFS2 所需的所有 RPM 都包括在 Enterprise Linux 的 Disk 3 上。为了确定系统上是否安装了 OCFS2,可以在 Oracle RAC 集群的两个节点运行以下命令:
# rpm -qa | grep ocfs2 | sort ocfs2-2.6.9-55.0.0.0.2.EL-1.2.5-1 ocfs2-2.6.9-55.0.0.0.2.ELhugemem-1.2.5-1 ocfs2-2.6.9-55.0.0.0.2.ELsmp-1.2.5-1 ocfs2console-1.2.4-1 ocfs2-tools-1.2.4-1 ocfs2-tools-devel-1.2.4-1
注意,上面的清单包括适用于三种体系结构类型(单处理器、hugemem 和多处理器)的 OCFS2 内核驱动程序。默认情况下,Enterprise Linux 与 hugemem 内核一起安装,这意味着只需要 ocfs2-2.6.9-55.0.0.0.2.ELhugemem-1.2.5-1。然而,安装了其他两个 OCFS2 内核驱动程序对配置也没有影响。
如果您缺少 OCFS2 程序包并需要安装它们,则加载 Enterprise Linux 的 Disk 3 并以 root 用户账户运行以下命令。确保在集群的两个 Oracle RAC 节点上执行该操作。
$ su - # mount -r /media/cdrom # cd /media/cdrom/Enterprise/RPMS # rpm -Uvh ocfs2* warning:ocfs2-2.6.9-55.0.0.0.2.EL-1.2.5-1.i686.rpm:V3 DSA signature:NOKEY, key ID b38a8516 Preparing... ########################################### [100%] 1:ocfs2-tools ########################################### [ 20%] 2:ocfs2-2.6.9-55.0.0.0.2.########################################### [ 40%] 3:ocfs2-2.6.9-55.0.0.0.2.########################################### [ 60%] 4:ocfs2-2.6.9-55.0.0.0.2.########################################### [ 80%] 5:ocfs2console ########################################### [100%] # rpm -qa | grep ocfs2 | sort ocfs2-2.6.9-55.0.0.0.2.EL-1.2.5-1 ocfs2-2.6.9-55.0.0.0.2.ELhugemem-1.2.5-1 ocfs2-2.6.9-55.0.0.0.2.ELsmp-1.2.5-1 ocfs2console-1.2.4-1 ocfs2-tools-1.2.4-1
禁用 SELinux(RHEL4 U2 以及更高版本)
向 RHEL4 U2 以及更高版本(Enterprise Linux 4.5 基于 RHEL4 U5)的用户提供一个建议,即 OCFS2 当前无法在启用 SELinux 的情况下运行。如果你使用的是 RHEL4 U2 或更高版本(由于我们使用的是 Enterprise Linux 4.5,因此我们也包括在内),则您需要验证 SELinux 已禁才能执行 O2CB 服务。
在安装 Enterprise Linux 期间中,我们在屏幕上禁用 SELinux。然而,如果您在安装期间未禁用 SELinux,您可以使用 system-config-securitylevel 工具禁用 SELinux。
要禁用 SELinux(或验证 SELinux 是否已禁用),运行“Security Level Configuration GUI”实用程序:
# /usr/bin/system-config-securitylevel &
这将显示以下屏幕:
现在,单击 SELinux 选项卡并取消选中“Enabled”复选框。单击 [OK] 后,将显示一个警告对话框。只需单击“Yes”确认该警告。禁用 SELinux 选项后,屏幕现在应如下所示:
如果您需要在该部分禁用所有节点的 SELinux,则需要重新引导每个节点以实施更改。在继续配置 OCFS2 之前,必须禁用 SELinux!
# init 6
配置 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 -这将显示如下所示的 GUI:
# ocfs2console &
使用 ocfs2console GUI 工具执行以下步骤:
以下对话框显示了节点 linux1 和 linux2 的 OCFS2 设置:
退出 ocfs2console 后,将获得一个类似如下所示的 /etc/ocfs2/cluster.conf。需要在集群中的两个 Oracle RAC 节点上完成该过程,并且所有节点的 OCFS2 配置文件必须完全相同:
node:
ip_port = 7777
ip_address = 192.168.1.100
number = 0
name = linux1
cluster = ocfs2
node:
ip_port = 7777
ip_address = 192.168.1.101
number = 1
name = linux2
cluster = ocfs2
cluster:
node_count = 2
name = ocfs2
O2CB 集群服务
在使用 OCFS2 执行任何操作(如格式化或挂载文件系统)之前,我们需要先运行 OCFS2 的集群堆栈 O2CB(它将是以上执行的配置过程的结果)。此堆栈包含以下服务:
已将以上所有集群服务打包到 o2cb 系统服务 (/etc/init.d/o2cb) 中。以下是 o2cb 系统服务的某些更有用的命令和选项的简要列表。
注:以下命令仅用于演示目的,不应在安装和配置 OCFS2 时运行!
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: 7 Network idle timeout: 10000 Network keepalive delay: 5000 Network reconnect delay: 2000 Checking O2CB heartbeat:Not active
Loading module "configfs":OK Mounting configfs filesystem at /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 模块。
Starting O2CB cluster ocfs2:OK以上命令将使我们创建的集群 ocfs2 处于联机状态。
Stopping O2CB cluster ocfs2:OK以上命令将使我们创建的集群 ocfs2 处于脱机状态。
Stopping O2CB cluster ocfs2:OK Unmounting ocfs2_dlmfs filesystem:OK Unloading module "ocfs2_dlmfs":OK Unmounting configfs filesystem:OK Unloading module "configfs":OK以上命令将卸载所有 OCFS2 模块。
将 O2CB 配置为在引导时启动并调整 O2CB 心跳阈值
您现在需要配置 OC2B 驱动程序的引导属性,以便在每次引导时将启动集群堆栈服务。您还可以将 OCFS2 的心跳阈值 从默认设置 7 调整为 61。本节涉及的所有任务都需要在该集群的两个节点上执行。
按如下所示设置引导属性:
# /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 ('[]').Hittingwithout 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) [7]: 61 Specify network idle timeout in ms (>=5000) [10000]: 10000 Specify network keepalive delay in ms (>=1000) [5000]: 5000 Specify network reconnect delay in ms (>=2000) [2000]: 2000 Writing O2CB configuration:OK Loading module "configfs":OK Mounting configfs filesystem at /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 执行本节中的所有命令。
现在,我们开始使用“”一节中针对 OCFS2 分区的 iSCSI 卷。
注意:需要格外重点注意的是,此时在本文中,在对 iSCSI 卷进行分区以用于 OCFS2(如 /dev/sdb1)后,您可能已经重新引导 linux1 若干次。这意味着从 Openfiler 发现的 iSCSI 目标名映射可能与 linux1 上的本地 SCSI 设备名不同。请重复“”一节中所述的过程,以确定重新引导之后是否发现 iSCSI 目标名与 linux1 上的本地 SCSI 设备名不同。
例如,在要用于 OCFS2 的 iSCSI 卷上创建主分区时,我指定 iSCSI 目标名“iqn.2006-01.com.openfiler:rac1.crs”映射到本地 SCSI 设备名 /dev/sdb。然后,在本节前面部分,我必须在禁用 SELinux 后重新引导两个节点。执行完“”一节中所述的过程后,我确定“iqn.2006-01.com.openfiler:rac1.crs”现已映射到本地 SCSI 设备名 /dev/sdd。这意味着我将在本节中在分区 /dev/sdd1 上创建 OCFS2 文件系统!请注意,您计算机上的本地 SCSI 设备名很有可能不同。
如果 O2CB 集群处于脱机状态,则启动它。格式化操作要求集群处于联机状态,这是因为它需要确保在集群的某个节点上未挂载该卷。
在本文档的前面部分中,我们在一节中创建了目录 /u02/oradata/orcl。本节包含用于创建和安装集群管理器 使用的文件系统 (/u02/oradata/orcl) 的命令。
注意,可以使用 GUI 工具 ocfs2console 或命令行工具 mkfs.ocfs2 创建和安装 OCFS2 文件系统。在 ocfs2console 实用程序中,使用菜单 [Tasks] - [Format]。
参见下面有关如何使用命令行工具 mkfs.ocfs2 创建 OCFS2 文件系统的说明。
为创建文件系统,我们使用 Oracle 可执行文件 mkfs.ocfs2。考虑到本示例的目的,我使用映射到 crs 的 iSCSI 卷 /dev/sdd1 的本地 iSCSI 设备名,以 root 用户帐户仅从 linux1 运行以下命令。另请注意,我还指定了一个名为“oracrsfiles”的标签,可在挂载或取消挂载卷时引用:
$ su - # mkfs.ocfs2 -b 4K -C 32K -N 4 -L oracrsfiles /dev/sdd1 mkfs.ocfs2 1.2.4 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) none on /proc type proc (rw) none on /sys type sysfs (rw) none on /dev/pts type devpts (rw,gid=5,mode=620) usbfs on /proc/bus/usb type usbfs (rw) /dev/hda1 on /boot type ext3 (rw) none 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 /config type configfs (rw) ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw) /dev/sdd1 on /u02/oradata/orcl 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/oradata/orcl ocfs2 _netdev,datavolume,nointr 0 0
注意用于挂载此文件系统的“_netdev”选项。OCFS2 卷必须使用 _netdev 挂载选项。该挂载选项指示将在网络启动后挂载该卷,在关闭网络前卸载该卷。
现在,让我们确保已经加载了 ocfs2.ko 内核模块,并确保将在引导过程中安装文件系统。
如果您遵循了本指南中的示例,则应已经启用了用于加载内核模块并安装 OCFS2 文件系统的操作。但您将仍以 root 用户帐户在集群的两个 Oracle RAC 节点上运行以下命令来检查这些选项:
$ su -应把我以粗体标记的标志设置为“on”。
# chkconfig --list o2cb
o2cb 0:off 1:off 2:on 3:on 4:on 5:on 6:off
检查新 OCFS2 文件系统的权限
使用 ls 命令检查所有权。应把权限设置为 0775,并将所有者设置为“oracle”、将组设置为“dba”。
我们来先检查权限:
# ls -ld /u02/oradata/orcl drwxr-xr-x 3 root root 4096 Jun 27 17:44 /u02/oradata/orcl正如在以上列表中所看到的,oracle 用户帐户(以及 dba 组)将无法写入此目录。我们来解决此问题:
# chown oracle.dba /u02/oradata/orcl # chmod 775 /u02/oradata/orcl我们回过头来再次检查集群中两个 Oracle RAC 节点的权限是否正确:
# ls -ld /u02/oradata/orcl drwxrwxr-x 3 oracle dba 4096 Jun 27 17:44 /u02/oradata/orcl
重新引导两个节点
开始介绍下一节之前,最好在此时重新引导 RAC 集群的两个节点。当计算机启动时,确保加载了集群堆栈服务并安装了新的 OCFS2 文件系统:
# mount /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) none on /proc type proc (rw) none on /sys type sysfs (rw) none on /dev/pts type devpts (rw,gid=5,mode=620) usbfs on /proc/bus/usb type usbfs (rw) /dev/hda1 on /boot type ext3 (rw) none 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 /config type configfs (rw) ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw) /dev/sdd1 on /u02/oradata/orcl type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)
如果修改了 O2CB 心跳阈值,则应验证其是否设置正确:
# cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold
61
如何确定 OCFS2 版本
要确定正在运行的 OCFS2 版本,使用:
# cat /proc/fs/ocfs2/version OCFS2 1.2.5 Wed May 2 16:16:08 PDT 2007 (build 0f745576f5282c9408787369d99ba880)
应在集群中的两个 Oracle RAC 节点上执行大多数安装和配置过程!但创建 ASM 磁盘将只需在集群中的单个节点上执行。
在本节中,我们将配置自动存储管理 (ASM),以将其用作所有 Oracle 物理数据库文件(数据、联机重做日志、控制文件、归档重做日志)以及闪回恢复区的文件系统/卷管理器。
Oracle10g 第 1 版中引入了 ASM,用于使管理员不必再管理单个文件和驱动器。ASM 内置在 Oracle 内核中。通过它,DBA 可以全天候管理 Oracle 集群实例的单个实例以集群实例的数千个磁盘驱动器。将把所有要用于 Oracle 的文件和目录包含在磁盘组 中。ASM 跨所有可用磁盘驱动器并行执行负载平衡,以防止热点并最大限度地提高性能(甚至对于快速更改数据使用模式也是如此)。
有两个不同方法可在 Linux 上配置 ASM:
在本文中,我将使用“使用 ASMLib I/O 的 ASM”方法。Oracle 指出(在Metalink 说明 275315.1 中)“提供的 ASMLib 支持 ASM I/O 用于 Linux 磁盘,无需考虑标准 UNIX I/O API 的限制”。我计划将来执行几个测试以确定使用 ASMLib 会获得的性能增益。这些性能度量和测试细节超出了本文的范围,因此将不予讨论。
如果要了解有关 Oracle ASMLib 2.0 的详细信息,请访问
安装 ASMLib 2.0 程序包
在本文以前的版本中,此时您需要从 下载 ASMLib 2.0 软件。 ASMLib 2.0 软件包括以下的程序包:
然而,现在不需要下载 ASMLib 软件了,因为它已包括在 Enterprise Linux 中(用户空间库除外,因为它是一个单独的下载)。如果您遵循我所提供的 Enterprise Linux 安装指导,则已经安装了所有内容,这时您将拥有所有 ASMLib 必需的 RPM 程序包(同样,用户空间库除外)。但如果您执行了其他安装类型(即,高级服务器),则可能缺少 ASMLib 程序包并需要安装它们。ASMLib 所需的所有 RPM 都包括在 Enterprise Linux 的 Disk 3 上。为了确定系统上是否安装了 ASMLib,可以在 Oracle RAC 集群的两个节点运行以下命令:
# rpm -qa | grep oracleasm | sort oracleasm-2.6.9-55.0.0.0.2.EL-2.0.3-2 oracleasm-2.6.9-55.0.0.0.2.ELhugemem-2.0.3-2 oracleasm-2.6.9-55.0.0.0.2.ELsmp-2.0.3-2 oracleasm-support-2.00.3-2
注意,上面的清单包括适用于三种架构类型(单处理器、hugemem 和多处理器)的 ASMLib 内核驱动程序。默认情况下,Enterprise Linux 与 hugemem 内核一起安装,这意味着只需要 oracleasm-2.6.9-55.0.0.0.2.ELhugemem-2.0.3-2。然而,安装了其他两个 ASMLib 内核驱动程序对配置也没有影响。
如果您缺少 ASMLib 程序包并需要安装它们,加载 Enterprise Linux 的 Disk 3 并以 root 用户账户运行以下命令。确保在集群的两个 Oracle RAC 节点上执行该操作。
$ su - # mount -r /media/cdrom # cd /media/cdrom/Enterprise/RPMS # rpm -Uvh oracleasm* warning:oracleasm-2.6.9-55.0.0.0.2.EL-2.0.3-2.i686.rpm:V3 DSA signature:NOKEY, key ID b38a8516 Preparing... ########################################### [100%] 1:oracleasm-support ########################################### [ 25%] 2:oracleasm-2.6.9-55.0.0.########################################### [ 50%] 3:oracleasm-2.6.9-55.0.0.########################################### [ 75%] 4:oracleasm-2.6.9-55.0.0.########################################### [ 100%] # rpm -qa | grep oracleasm | sort oracleasm-2.6.9-55.0.0.0.2.EL-2.0.3-2 oracleasm-2.6.9-55.0.0.0.2.ELhugemem-2.0.3-2 oracleasm-2.6.9-55.0.0.0.2.ELsmp-2.0.3-2 oracleasm-support-2.00.3-2
获取 Oracle ASMLib
正如前一节提到的那样,除了用户空间库(即 ASMLib 支持库)以外,,ASMLib 2.0 软件都包括在 Enterprise Linux 中。用户空间库是必需的,可以在下面的网站上免费下载:
将用户空间库下载到集群的两个 Oracle RAC 节点上,然后使用以下命令进行安装:
# rpm -Uvh oracleasmlib-2.0.2-1.i386.rpm Preparing... ########################################### [100%] 1:oracleasmlib ########################################### [100%]
有关通过坚不可摧的 Linux 网络(并非本文的必需)获取 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 ('[]').Hittingwithout 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 []:dba 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 磁盘以及它们是否可用。
在“”一节中,我们对 ASM 要使用的四个 iSCSI 卷进行了配置(分区)。ASM 将用于存储 Oracle 数据库文件,如联机重做日志、数据库文件、控制文件、归档重做日志以及闪回恢复区。
注意:需要格外重点注意的是,此时在本文中,在对 iSCSI 卷进行分区以用于 ASM(如 /dev/sda、/dev/sdb、/dev/sdc 和 /dev/sde)后,您可能已经重新引导 linux1 若干次。这意味着从 Openfiler 发现的 iSCSI 目标名映射可能与 linux1 上的本地 SCSI 设备名不同。请重复“”一节中所述的过程,以确定重新引导之后是否发现所有四个 ASM 卷的 iSCSI 目标名与 linux1 上的本地 SCSI 设备名不同。
例如,我在配置了 OCFS2 后(前一部分)重新引导了两个 Oracle RAC 节点。我适用于 linux1 的 ASM iSCSI 目标名映射发生了变化,如下所示:
iSCSI 目标名到本地 SCSI 设备名 — (ASM) | ||
iSCSI 目标名称 | 主机/SCSI ID | SCSI 设备名称 |
iqn.2006-01.com.openfiler:rac1.asm4 | 0 | /dev/sda |
iqn.2006-01.com.openfiler:rac1.asm3 | 1 | /dev/sde |
iqn.2006-01.com.openfiler:rac1.asm2 | 2 | /dev/sdb |
iqn.2006-01.com.openfiler:rac1.asm1 | 3 | /dev/sdc |
使用上述 iSCSI 目标名映射创建 ASM 磁盘时要使用的本地 SCSI 设备名。
注:如果使用相同硬件(实际上是相同的共享逻辑驱动器)重复本文,则在尝试创建 ASM 磁盘时可能会出现故障。如果确实遇到故障,则尝试使用以下命令列出所有 ASM 磁盘:# /etc/init.d/oracleasm listdisks您可以看到,结果表明我定义了四个 ASM 卷。如果您在之前的运行中已经定义了四个卷,那么使用以下命令将其删除。删除之前创建的卷后,使用“oracleasm createdisk”命令(如下所示)创建新卷。
VOL1
VOL2
VOL3
VOL4# /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 目标名到 SCSI 本地设备名映射(如上所述)创建 ASM 磁盘,键入以下内容:
$ su - # /etc/init.d/oracleasm createdisk VOL1 /dev/sdc1 Marking disk "/dev/sdc1" as an ASM disk [ OK ] # /etc/init.d/oracleasm createdisk VOL2 /dev/sdb1 Marking disk "/dev/sdb1" as an ASM disk [ OK ] # /etc/init.d/oracleasm createdisk VOL3 /dev/sde1 Marking disk "/dev/sde1" as an ASM disk [ OK ] # /etc/init.d/oracleasm createdisk VOL4 /dev/sda1 Marking disk "/dev/sda1" 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
只需要在集群中的一个节点上执行以下下载过程!
下一个逻辑步骤是安装 Oracle 集群件第 2 版 (10.2.0.1.0)、Oracle 数据库 10g 第 2 版 (10.2.0.1.0) 以及最终用于 Linux x86 软件的 Oracle 数据库 10g 随附 CD 第 2 版 (10.2.0.1.0)。但我们必须先从 Oracle 技术网 (OTN) 下载并提取所需的 Oracle 软件程序包。
您将从 Oracle 下载所需的软件并将其提取到集群的一个 Linux 节点(即 linux1)上。您将从此计算机执行所有安装。Oracle 安装程序将把所需的软件程序包复制到我们在(为远程访问配置 RAC 节点)中用远程访问方法设置的 RAC 配置中的所有其他节点上。
登录到您将从其中以“oracle”用户帐户执行所有 Oracle 安装的节点 (linux1)。在该示例中,您将把所需的 Oracle 软件下载到 linux1 并将其保存到 /u01/app/oracle/orainstall。
下载并提取软件
首先, Oracle 集群件第 2 版 (10.2.0.1.0)、Oracle 数据库 10g 第 2 版 (10.2.0.1.0) 以及用于 Linux x86 的 Oracle 数据库 10g 随附 CD 第 2 版 (10.2.0.1.0) 软件。所有下载均在同一页面中提供。
以 oracle 用户帐户将下载的三个程序包提取到临时目录。在该示例中,我将使用 /u01/app/oracle/orainstall。
按如下所示提取 Oracle 集群件程序包:
# su - oracle然后提取 Oracle 数据库软件:
$ cd ~oracle/orainstall
$ unzip 10201_clusterware_linux32.zip
$ cd ~oracle/orainstall最后,提取 Oracle 随附 CD 软件:
$ unzip 10201_database_linux32.zip
$ cd ~oracle/orainstall
$ unzip 10201_companion_linux32.zip
在集群中的两个 Oracle RAC 节点上执行以下检查!
安装 Enterprise Linux 时,您应验证已安装了 Oracle 所需的所有 RPM。如果您遵循我所提供的 Enterprise Linux 安装指导,则已经安装了所有内容,这时您将拥有所有必需的 RPM 程序包。但如果您执行了其他安装类型(即,高级服务器),则可能缺少某些程序包并需要安装它们。所有必需的 RPM 都位于 Enterprise Linux CD/ISO 上。
下一个安装前步骤是运行集群验证实用程序 (CVU)。CVU 是 Oracle 集群件安装介质上提供的一个命令行实用程序。它负责执行各种系统检查,以协助您确认 Oracle RAC 节点针对 Oracle 集群件和 Oracle 真正应用集群安装进行了正确的配置。CVU 只需从您将从其中执行 Oracle 安装的节点(本文中为 linux1)运行即可。
检查必需的 RPM
以下是必须安装的程序包(请记住您的 Linux 版本号可能略有不同):
binutils-2.15.92.0.2-22 compat-db-4.1.25-9 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 compat-libgcc-296-2.96-132.7.2 control-center-2.8.0-12.rhel4.5 cpp-3.4.6-8.0.1 gcc-3.4.6-8.0.1 gcc-c++-3.4.6-8.0.1 glibc-2.3.4-2.36 glibc-common-2.30.4-2.36 glibc-devel-2.3.4-2.36 glibc-headers-2.3.4-2.36 glibc-kernheaders-2.4-9.1.100.EL gnome-libs-1.4.1.2.90-44.2 libaio-0.3.105-2 libstdc++-3.4.6-8.0.1 libstdc++-devel-3.4.6-8.0.1 make-3.80-6.EL4 openmotif-2.2.3-10.1.el4 openmotif21-2.1.30-11.RHEL4.6 pdksh-5.2.14-30.3 setarch-1.6-1 sysstat-5.0.5-14.rhel4 xscreensaver-4.18-5.rhel4.13.0.1
注意,openmotif RPM 程序包只在安装 Oracle 演示时需要。本文不包括 Oracle 演示的安装。
要查询程序包信息(例如,gcc 和 glibc-devel),使用“rpm -q <程序包名> [, <程序包名>]”命令,如下所示:
# rpm -q gcc glibc-devel gcc-3.4.6-8.0.1 glibc-devel-2.3.4-2.36如果需要安装以上任意程序包,使用“rpm -Uvh <程序包名.rpm>”。例如,要安装 GCC gcc-3.4.6-8.0.1 程序包,使用:
# rpm -Uvh gcc-3.4.6-8.0.1.i386.rpm
使用集群验证实用程序的先决条件
JDK 1.4.2必须先在系统上安装 JDK 1.4.2,然后才可以运行 CVU。如果系统上没有安装 JDK 1.4.2,则在尝试运行 CVU 时,您将收到一个类似下面的错误消息:
ERROR.Either CV_JDKHOME environment variable should be set or /stagepath/cluvfy/jrepack.zip should exist.如果没有安装 JDK 1.4.2,请从 Sun 网站下载该软件并使用 Sun 的说明进行安装。以下网站提供有 JDK 1.4.2 下载:。
如果安装了 JDK 1.4.2,那么您必须定义到 JDK 的路径的用户环境变量 CV_JDKHOME。例如,如果 JDK 1.4.2 安装在 /usr/local/j2re1.4.2_08 中,那么以您计划用于运行 CVU 的用户身份登录并输入以下命令:
CV_JDKHOME=/usr/local/j2re1.4.2_08 export CV_JDKHOME
安装 cvuqdisk RPM(仅适用于 RHEL 用户)运行 CVU 的第二个先决条件是针对 Red Hat Linux 用户的。如果运行的是 Red Hat Linux,则必须下载 Red Hat 操作系统程序包 cvuqdisk 并将其安装到集群中的两个 Oracle RAC 节点上。这意味着您将需要在 linux1 和 linux2 上安装 cvuqdisk RPM。如果没有 cvuqdisk,CVU 将无法发现共享磁盘,您在运行 CVU 时会收到错误消息“Package cvuqdisk not installed(程序包 cvuqdisk 未安装)”。
cvuqdisk RPM 可在 rpm 目录中的 Oracle 集群件安装介质中找到。考虑到本文的目的,将 Oracle 集群件介质解压缩到 linux1 上的 /u01/app/oracle/orainstall/clusterware 目录。注意,在安装 cvuqdisk RPM 之前,我们需要设置名为 CVUQDISK_GRP 的环境变量,使其指向将要拥有 cvuqdisk 实用程序的组。默认的组是 oinstall,这不是本文中我们用于 oracle UNIX 用户帐户的组。因为我们使用的是 dba 组,所以需要在尝试安装 cvuqdisk RPM 之前设置 CVUQDISK_GRP=dba。
在 linux1 中找到 cvuqdisk RPM 并将其复制到 linux2,然后在两个 Oracle RAC 节点上执行以下步骤进行安装:
$ su - # cd /u01/app/oracle/orainstall/clusterware/rpm # CVUQDISK_GRP=dba; export CVUQDISK_GRP # rpm -iv cvuqdisk-1.0.1-1.rpm Preparing packages for installation... cvuqdisk-1.0.1-1 # ls -l /usr/sbin/cvuqdisk -rwsr-x--- 1 root dba 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-add Enter passphrase for /u01/app/oracle/.ssh/id_rsa:xxxxx Identity added:/u01/app/oracle/.ssh/id_rsa (/u01/app/oracle/.ssh/id_rsa) Identity added:/u01/app/oracle/.ssh/id_dsa (/u01/app/oracle/.ssh/id_dsa)在使用 方法时,一般在 oracle 用户帐户的 /etc/hosts.equiv 文件中定义用户等效性,并在所有新终端 shell 会话上进行启用。
利用 CVU 检查 CRS 的安装前任务
满足了所有使用 CVU 的先决条件后,我们首先以“oracle”用户帐户(启用了用户等效性)从 linux1 运行以下命令,以检查 Oracle 集群件 (CRS) 的所有安装前任务是否完成:
$ cd /u01/app/oracle/orainstall/clusterware/cluvfy $ ./runcluvfy.sh stage -pre crsinst -n linux1,linux2 -verbose
查看 CVU 报表。注意,报告中几个可以忽略的错误。
第一个错误有关“oinstall”组 [作为基本组] 中的用户“oracle”的成员资格。考虑到本文的目的,“oracle”用户帐户只能分配给“dba”组,因此可以忽略该错误,没什么问题。
第二个错误与为 VIP 查找一组适合的接口有关。这是 Metalink 说明 中的一个错误文件:
如说明中所述,可以忽略该错误,没什么问题。Suitable interfaces for the private interconnect on subnet "192.168.2.0": linux2 eth1:192.168.2.101 linux1 eth1:192.168.2.100 ERROR: Could not find a suitable set of interfaces for VIPs. Result:Node connectivity check failed.
最后一组可忽略的错误与处理 RHEL4 Update 4 中不存在的特定 RPM 程序包版本有关。例如:
这些特定的程序包在 CVU 报告中列为缺少,请确保在集群中的两个 Oracle RAC 节点上安装了正确版本的 compat-* 程序包。例如,在 RHEL4 Update 4 中,这些程序包应为:
利用 CVU 检查硬件和操作系统设置
接下来要运行的 CVU 检查将验证硬件和操作系统设置。同样,从 linux1 以“oracle”UNIX 用户帐户运行以下命令:
$ cd /u01/app/oracle/orainstall/clusterware/cluvfy $ ./runcluvfy.sh stage -post hwos -n linux1,linux2 -verbose
查看 CVU 报表。与之前的检查(CRS 的安装前任务)一样,为 VIP 查找一组合适的接口将失败,可将其忽略,没什么问题。
另请注意,检查共享存储可访问性将失败。
Checking shared storage accessibility... WARNING: Unable to determine the sharedness of /dev/sde on nodes: linux2,linux2,linux2,linux2,linux2,linux1,linux1,linux1,linux1,linux1 Shared storage check failed on nodes "linux2,linux1".
该警告也可忽略,没什么问题。虽然我们知道这些磁盘可见并在集群中的两个 Oracle RAC 节点中共享,但本身将失败。导致该错误的若干原因已得到证明。第一个原因来自 Metalink,指出 cluvfy 当前没有使用 SCSI 设备之外的其他设备。这将包括设备(如 EMC PowerPath)和卷组(如 Openfiler 中的卷组)。截至本文撰写之日,除了使用手动方法检测共享设备外没有其他解决方法。该错误的另一个原因由 Oracle Corporation 的 Bane Radulovic 提出。他的研究表明,CVU 在 Linux 上调用 smartclt 时,smartclt 不会从 iSCSI 设备返回序列号。例如,针对 /dev/sde 进行的检查显示:
# /usr/sbin/smartctl -i /dev/sde smartctl version 5.33 [i686-redhat-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is Device:Openfile Virtual disk Version: 0 Serial number: Device type:disk Local Time is:Wed Oct 25 23:41:20 2006 EDT Device supports SMART and is Disabled Temperature Warning Disabled or Not Supported
截至本文撰写之日,我们还不知道 Openfiler 开发人员是否打算对此进行修复。