Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 集群(二)
上一篇 / 下一篇 2008-09-05 09:49:00 / 个人分类:Oracle
您将使用 OCFS2 存储 Oracle 集群件软件需要共享的文件。在使用 OCFS2 时,集群中的两个 Oracle RAC 节点上的 UNIX 用户oracle的 UID 和 UNIX 组dba的 GID 必须相同。如果 UID 或 GID 不同,则 OCFS2 文件系统中的文件将显示为“unowned”,甚至可能由其他用户所拥有。对于本文而言,oracleUID 使用 175,dbaGID 使用 115。
创建 Oracle 的组和用户
让我们继续此示例,创建 Unixdba组和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!对于此示例,我使用:
- linux1:ORACLE_SID=orcl1
- linux2:ORACLE_SID=orcl2
为 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
....................................最后,为将用于存储两个 Oracle 集群件共享文件的 OCFS2 文件系统创建挂载点。需要以“root”用户帐户运行这些命令:
$su -
#mkdir -p /u02/oradata/orcl
#chown -R oracle:dba /u02
12. 为 Oracle 配置 Linux 服务器
在集群中的两个 Oracle RAC 节点上执行以下配置过程!
每次引导算机时,都需要在集群中的两个 Oracle RAC 节点上定义本节讨论的内核参数。本节提供了设置 Oracle 必需的那些内核参数的详细信息。第 15 节(“用于所有 Oracle RAC 节点的所有启动命令”)中包含有关如何将这些命令置于启动脚本 (/etc/sysctl.conf) 中的说明。
概述
本节集中讨论了针对 Oracle10gRAC 安装配置两台 Oracle RAC Linux 服务器的步骤。这包括验证足够的交换空间、设置共享内存和信号、设置文件句柄的最大数量、设置 IP 本地端口范围、设置对 oracle 用户的 shell 限制、激活系统的所有内核参数,以及如何验证两个集群节点的日期和时间是否正确。
在本节中,您将注意到可以使用多种方法来配置(设置)这些参数。就本文而言,我将通过把所有命令置于/etc/sysctl.conf文件中使所有更改永久有效(通过重新引导)。
对交换空间的考虑因素
- 安装 Oracle10g第 2 版至少需要 512MB 内存。(注:安装期间交换容量不足会导致 Oracle Universal Installer“挂起”或“死机”)
- 要检查您已经具有的内存容量,键入:
#cat /proc/meminfo | grep MemTotal
MemTotal:1033116 kB - 要检查您已经分配的交换容量,键入:
#cat /proc/meminfo | grep SwapTotal
SwapTotal:2031608 kB - 如果您的内存少于 512MB(介于 RAM 与 SWAP 之间),您可以通过创建临时交换文件添加临时交换空间。这样,您就不必使用原始设备甚至更彻底地重建系统了。
以 root 身份创建一个用作额外交换空间的文件,假设大小为 300MB:
# dd if=/dev/zero f=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
- 可以通过使用以下命令直接更改/proc文件系统 (/proc/sys/fs/file-max) 更改文件句柄最大数量的默认设置,不必重新引导计算机:
#sysctl -w fs.file-max=65536
- 然后,通过将该内核参数插入到/etc/sysctl.conf启动文件中,您可以使这种更改永久有效:
#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
- 可以通过使用以下命令直接修改/proc文件系统 (/proc/sys/net/ipv4/ip_local_port_range),以更改本地端口范围的默认设置,而不必重新引导计算机:
#sysctl -w net.ipv4.ip_local_port_range="1024 65000"
- 然后,通过将该内核参数插入到/etc/sysctl.conf启动文件中,您可以使这种更改永久有效:
#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 <<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
cat >> /etc/pam.d/login <<EOF为“oracle”UNIX 帐户更新默认的 shell 启动文件。
session required /lib/security/pam_limits.so
EOF
- 对于 Bourne、Bash 或 Korn shell,通过运行以下命令将以下行添加到/etc/profile文件:
cat >> /etc/profile <<EOF
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 - 对于 C shell(csh 或 tcsh),通过运行以下命令将以下行添加到/etc/csh.login文件:
cat >> /etc/csh.login <<EOF
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 服务器。
13. 配置 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.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模块有两个关键的参数:
- hangcheck-tick:此参数定义了系统运行状况检查的间隔时间。默认值为 60 秒;Oracle 建议将它设置为 30 秒。
- hangcheck-margin:此参数定义了 hangcheck-timer 在重置 RAC 节点前所容许的最大挂起延迟。它定义了以秒为单位的误差幅度。默认值为 180 秒;Oracle 建议将它设置为 180 秒。
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 -2Jun 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().
14. 为远程访问配置 RAC 节点
在集群中的两个 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。使用远程 Shell 方法要确定是否 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-addEnter passphrase for /u01/app/oracle/.ssh/id_rsa:xxxxxIdentity 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=<Any X-Windows Host>:0C shell:
$export DISPLAY$setenv DISPLAY <Any X-Windows Host>:0将DISPLAY变量设置为有效的 X 窗口显示后,您应当执行当前终端会话的另一个测试,以确保X11 forwarding没有启用:$ssh linux1 hostnamelinux1 $ssh linux1 hostnamelinux2注:如果您使用远程客户端来连接到执行安装的节点,则会看到类似下面的消息:"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 节点上都安装了rshRPM:
#rpm -q rsh rsh-serverrsh-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 reloadReloading 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 用户帐户启用。
15. 适用于这两个 Oracle RAC 节点的所有启动命令
验证以下启动命令都包含在集群中的两个 Oracle RAC 节点上!
至此,我们已经详细介绍了需要在 Oracle10gRAC 配置的两个节点上配置的参数和资源。在本部分中,我们将稍事调整,简要复述这些参数、命令和条目(在本文前面的章节中已提到过),当引导计算机时需要在两个 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-hcdoptions 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-priv192.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
16. 安装和配置 Oracle 集群文件系统 (OCFS2)
应在集群中的这两个 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
在本文以前的版本中,此时您需要从http://oss.oracle.com/下载 OCFS2 软件。OCFS2 软件包括以下程序包:
- OCFS2 内核驱动程序
- ocfs2-x.x.x-xx.EL-x.x.x-x.i686.rpm —(适用于单处理器)
- ocfs2-x.x.x-xx.ELsmp-x.x.x-x.i686.rpm —(适用于多处理器)
- ocfs2-x.x.x-xx.ELhugemem-x.x.x-x.i686.rpm —(适用于 hugemem)
- OCFS2 工具
- ocfs2-tools-x.x.x-x.i386.rpm
- OCFS2 控制台
- ocfs2console-x.x.x-x.i386.rpm
然而,现在不需要下载 OCFS2 软件了,因为它已包括在 Enterprise Linux 中。如果您遵循我所提供的 Enterprise Linux 安装指导,则已经安装了所有内容,这时您将拥有所有 OCFS2 必需的 RPM 程序包。但如果您执行了其他安装类型(即,高级服务器),则可能缺少 OCFS2 程序包并需要安装它们。OCFS2 所需的所有 RPM 都包括在 Enterprise Linux 的 Disk 3 上。为了确定系统上是否安装了 OCFS2,可以在 Oracle RAC 集群的两个节点运行以下命令:
#rpm -qa | grep ocfs2 | sortocfs2-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 | sortocfs2-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 &
这将显示以下屏幕:

图 13Security Level Configuration 打开屏幕
现在,单击SELinux选项卡并取消选中“Enabled”复选框。单击 [OK] 后,将显示一个警告对话框。只需单击“Yes”确认该警告。禁用 SELinux 选项后,屏幕现在应如下所示:

图 14SELinux 禁用
如果您需要在该部分禁用所有节点的 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 &

图 15ocfs2console GUI
使用ocfs2consoleGUI 工具执行以下步骤:
- 选择[Cluster] -> [Configure Nodes...]。这将启动 OCFS2 集群堆栈(图 16)并显示“Node Configuration”对话框。
- 在“Node Configuration”对话框上,单击 [Add] 按钮。
- 这将显示“Add Node”对话框。
- 在“Add Node”对话框中,输入集群中第一个节点的Host name和IP address。将IP Port设置为默认值 7777。在我的示例中,我添加了两个节点,即使用linux1/192.168.1.100表示第一个节点,并使用linux2/192.168.1.101表示第二个节点。
- 单击“Node Configuration”对话框上的 [Apply] — 所有节点现在将处于“Active”状态,如图 17所示。
- 单击“Node Configuration”对话框上的 [Close]。
- 确认所有值均正确后,使用[File] -> [Quit]退出应用程序。需要在集群的两个 Oracle RAC 节点上执行该操作。

图 16启动 OCFS2 集群堆栈
以下对话框显示了节点linux1和linux2的 OCFS2 设置:

图 17为 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(它将是以上执行的配置过程的结果)。此堆栈包含以下服务:
- 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: 7 Network idle timeout: 10000 Network keepalive delay: 5000 Network reconnect delay: 2000 Checking O2CB heartbeat:Not active
- /etc/init.d/o2cb load
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 模块。 - /etc/init.d/o2cb online ocfs2
Starting O2CB cluster ocfs2:OK
以上命令将使我们创建的集群 ocfs2 处于联机状态。 - /etc/init.d/o2cb offline ocfs2
Stopping O2CB cluster ocfs2:OK
以上命令将使我们创建的集群 ocfs2 处于脱机状态。 - /etc/init.d/o2cb unload
Stopping O2CB cluster ocfs2:OK Unmounting ocfs2_dlmfs filesystem:OK Unloading module "ocfs2_dlmfs":OK Unmounting configfs filesystem:OK Unloading module "configfs":OK
以上命令将卸载所有 OCFS2 模块。
您现在需要配置 OC2B 驱动程序的引导属性,以便在每次引导时将启动集群堆栈服务。您还可以将OCFS2 的心跳阈值从默认设置 7 调整为 61。本节涉及的所有任务都需要在该集群的两个节点上执行。
按如下所示设置引导属性:
#/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 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]:yCluster to start on boot (Enter "none" to clear) [ocfs2]:ocfs2Specify heartbeat dead threshold (>=7) [7]:61Specify network idle timeout in ms (>=5000) [10000]:10000Specify network keepalive delay in ms (>=1000) [5000]:5000Specify network reconnect delay in ms (>=2000) [2000]:2000Writing 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执行本节中的所有命令。
现在,我们开始使用“在 iSCSI 卷上创建分区”一节中针对 OCFS2 分区的 iSCSI 卷。
注意:需要格外重点注意的是,此时在本文中,在对 iSCSI 卷进行分区以用于 OCFS2(如/dev/sdb1)后,您可能已经重新引导linux1若干次。这意味着从 Openfiler 发现的 iSCSI 目标名映射可能与linux1上的本地 SCSI 设备名不同。请重复“发现 iSCSI 目标”一节中所述的过程,以确定重新引导之后是否发现 iSCSI 目标名与linux1上的本地 SCSI 设备名不同。
例如,在要用于 OCFS2 的 iSCSI 卷上创建主分区时,我指定 iSCSI 目标名“iqn.2006-01.com.openfiler:rac1.crs”映射到本地 SCSI 设备名/dev/sdb。然后,在本节前面部分,我必须在禁用 SELinux 后重新引导两个节点。执行完“发现 iSCSI 目标”一节中所述的过程后,我确定“iqn.2006-01.com.openfiler:rac1.crs”现已映射到本地 SCSI 设备名/dev/sdd。这意味着我将在本节中在分区/dev/sdd1上创建 OCFS2 文件系统!请注意,您计算机上的本地 SCSI 设备名很有可能不同。
如果 O2CB 集群处于脱机状态,则启动它。格式化操作要求集群处于联机状态,这是因为它需要确保在集群的某个节点上未挂载该卷。
在本文档的前面部分中,我们在为 OCFS2/集群件创建挂载点一节中创建了目录/u02/oradata/orcl。本节包含用于创建和安装集群管理器使用的文件系统 (/u02/oradata/orcl) 的命令。
注意,可以使用 GUI 工具ocfs2console或命令行工具mkfs.ocfs2创建和安装 OCFS2 文件系统。在ocfs2console实用程序中,使用菜单[Tasks] - [Format]。
参见下面有关如何使用命令行工具mkfs.ocfs2创建 OCFS2 文件系统的说明。
为创建文件系统,我们使用 Oracle 可执行文件 <
相关阅读:
- Oracle 数据库上构建 .NET 应用程序 (ora_eizo, 2008-9-04)
- Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 集群(一) (ora_eizo, 2008-9-05)
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG: enterprise Enterprise linux Linux LINUX oracle Oracle RAC 集群
标题搜索
日历
|
|||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | |||||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
| 11 | 12 | 13 | 14 | 15 | 16 | 17 | |||
| 18 | 19 | 20 | 21 | 22 | 23 | 24 | |||
| 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
我的存档
数据统计
- 访问量: 3960
- 日志数: 67
- 建立时间: 2007-10-12
- 更新时间: 2008-11-11


