邪恶八进制信息安全团队技术讨论组's Archiver

pub!1c 2006-2-17 12:45

[转载]在Linux和FireWire上构建您自己的Oracle集群

<P>信息来源: Oracle.com</P>
<P><SPAN class=boldbodycopy>了解如何安装和配置一个成本低于 1800 美元的 Oracle RAC 10<EM>g</EM> 第 2 版开发集群。</SPAN> </P>
<P class=legalese>2005 年 12 月更新</P>
<P class=parahead1>目录</P>
<OL>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#1">简介</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#2">Oracle RAC 10<I>g</I> 概述</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#3">共享存储器概述</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#4">FireWire 技术</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#5">硬件及成本</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#6">安装 Linux 操作系统</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#7">配置网络</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#8">获取并安装新的 Linux 内核/FireWire 模块</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#9">创建“oracle”用户和目录</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#10">在共享的 FireWire 存储设备上创建分区</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#11">为 Oracle 配置 Linux 服务器</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#12">配置 hangcheck-timer 内核模块</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#13">为远程访问配置 RAC 节点</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#14">用于每个 RAC 节点的所有启动命令</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#15">检查 Oracle 10<I>g</I> 第 2 版的 RPM 程序包</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#16">安装和配置 Oracle 集群文件系统 (OCFS2)</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#17">安装和配置自动存储管理 (ASMLib 2.0)</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#18">下载 Oracle 10<I>g</I> RAC 软件</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#19">安装 Oracle 10<I>g</I> 集群件软件</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#20">安装 Oracle 10<I>g</I> 数据库软件</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#21">创建 TNS 监听器进程</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#22">安装 Oracle10<I>g</I> 随附 CD 软件</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#23">创建 Oracle 集群数据库</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#24">验证 TNS 联网文件</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#25">创建/更改表空间</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#26">验证 RAC 集群与数据库配置</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#27">启动/停止集群</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#28">透明的应用程序故障切换 - (TAF)</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#29">结论</A>
<LI><A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#30">致谢</A> </LI></OL>
<P><BR>
<TABLE cellSpacing=0 cellPadding=1 width="38%" bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD noWrap><SPAN class=boldbodycopy>本指南相关下载:</SPAN><BR><SPAN class=boldbodycopy><IMG height=5 src="http://oracleimg.com/admin/images/ocom/bullet_5x5.gif" width=5 align=baseline border=0></SPAN> <A href="http://www.centos.org/modules/tinycontent/index.php?id=13" target=_blank><SPAN class=bodylink>CentOS Enterprise Linux 4.2</SPAN></A> <SPAN class=bodycopy>或</SPAN> <A href="http://www.redhat.com/apps/download/" target=_blank><SPAN class=bodylink>Red Hat Enterprise Linux 4</SPAN></A><BR><SPAN class=boldbodycopy><IMG height=5 src="http://oracleimg.com/admin/images/ocom/bullet_5x5.gif" width=5 align=baseline border=0></SPAN> <A href="http://oss.oracle.com/projects/ocfs2/files/RedHat/RHEL4/" target=_blank><SPAN class=bodylink>Oracle 集群文件系统第 2 版 - (1.0.4-1)<I></I></SPAN></A><BR><SPAN class=boldbodycopy><IMG height=5 src="http://oracleimg.com/admin/images/ocom/bullet_5x5.gif" width=5 align=baseline border=0></SPAN> <A href="http://oss.oracle.com/projects/ocfs2-tools/files/RedHat/RHEL4/" target=_blank><SPAN class=bodylink>Oracle 集群文件系统第 2 版工具 - (1.0.4-1)<I></I></SPAN></A><BR><SPAN class=boldbodycopy><IMG height=5 src="http://oracleimg.com/admin/images/ocom/bullet_5x5.gif" width=5 align=baseline border=0></SPAN> <A href="http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201linuxsoft.html" target=_blank><SPAN class=bodylink>Oracle 数据库 10<EM>g</EM> 第 2 版 EE、集群件、随附 CD - (10.2.0.1.0)</SPAN></A><BR><SPAN class=boldbodycopy><IMG height=5 src="http://oracleimg.com/admin/images/ocom/bullet_5x5.gif" width=5 align=baseline border=0></SPAN> <A href="http://oss.oracle.com/projects/rhel4kernels/files/2.6.9-11.0.0.10.3.EL/" target=_blank><SPAN class=bodylink>预编译的 RHEL 4 内核 - (2.6.9-11.0.0.10.3.EL)</SPAN></A><BR><SPAN class=boldbodycopy><IMG height=5 src="http://oracleimg.com/admin/images/ocom/bullet_5x5.gif" width=5 align=baseline border=0></SPAN> <A href="http://oss.oracle.com/projects/firewire/files/RedHat/RHEL4/" target=_blank><SPAN class=bodylink>预编译的 RHEL 4 FireWire 模块 - (2.6.9-11.0.0.10.3.EL)</SPAN></A><BR><SPAN class=boldbodycopy><IMG height=5 src="http://oracleimg.com/admin/images/ocom/bullet_5x5.gif" width=5 align=baseline border=0></SPAN> <A href="http://www.oracle.com/technology/software/tech/linux/asmlib/rhel4.html" target=_blank><SPAN class=bodylink>ASMLib 2.0 库和工具</SPAN></A><BR><SPAN class=boldbodycopy><IMG height=5 src="http://oracleimg.com/admin/images/ocom/bullet_5x5.gif" width=5 align=baseline border=0></SPAN> <SPAN class=bodylink>ASMLib 2.0 驱动程序</SPAN> - <A href="http://www.idevelopment.info/data/Oracle/DBA_tips/Oracle10gRAC/Install10gR2RACOnCentOS42/oracleasm-2.6.9-11.0.0.10.3.EL-2.0.0-1.i686.rpm" target=_blank><SPAN class=bodylink>单处理器</SPAN></A> / <A href="http://www.idevelopment.info/data/Oracle/DBA_tips/Oracle10gRAC/Install10gR2RACOnCentOS42/oracleasm-2.6.9-11.0.0.10.3.ELsmp-2.0.0-1.i686.rpm" target=_blank><SPAN class=bodylink>SMP</SPAN></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></P>
<P></P>
<HR>

<P><!-- **************** [ 1 ] ************************************************************ --><A name=1></A><SPAN class=parahead1>1. 简介</SPAN> </P>
<P><SPAN class=bodycopy>熟悉 Oracle 真正应用集群 (RAC) 10<I>g</I> 技术的最有效方法之一是访问一个实际的 Oracle RAC 10<I>g</I> 集群。没有什么方法比直接体验它们能够更好地理解其好处的了 — 包括容错、安全性、负载均衡和可伸缩性。 </SPAN></P>
<P><SPAN class=bodycopy>不幸的是,对于很多商家而言,典型的生产级 RAC 配置所需的硬件投入使它们无法实现这一目标。一个小型两节点集群可能需要 10,000 美元到 20,000 美元以上。该价格还不包括产品级 RAC 环境的核心(通常是一个存储区域网),其起价为 8,000 美元。</SPAN> </P>
<P class=bodycopy>对于那些没有大笔现金而希望熟悉 Oracle RAC 10<I>g</I> 的人而言,本指南提供一种低成本的替代方法来配置一个 Oracle RAC 10<I>g</I> 第 2 版系统,它使用常见的商业组件和可下载的软件,估计成本在 1200 美元到 1800 美元之间。相关系统包括一个运行 Linux(CentOS 4.2 或 Red Hat Enterprise Linux 4)的双节点集群(每个节点使用一个处理器),具有基于 IEEE1394 (<A class=bodylink href="http://www.apple.com/firewire/" target=_blank>FireWire</A>) 驱动器技术的共享磁盘存储器。(当然,您还可以考虑在 VMware 虚拟机上构建一个<A class=bodylink href="http://www.oracle.com/technology/global/cn/tech/linux/vmware/cookbook/index.html" target=_blank>虚拟集群</A>,但是其体验将不尽相同!) </P>
<P><SPAN class=bodycopy>请注意,这不是构建低成本 Oracle RAC 10<EM>g</EM> 系统的唯一方法。我曾见过其他的解决方案,这些解决方案利用了基于 SCSI 的实施而不是基于共享存储器的 FireWire。在大多数情况下,SCSI 的成本会高于我们的 FireWire 解决方案,典型的 SCSI 卡的价格在 70 美元左右,而一个 80GB 的外置 SCSI 驱动器价格为 700 美元到 1000 美元。注意,某些主板可能已包含内置的 SCSI 控制器。 </SPAN></P>
<P><SPAN class=bodycopy>请注意,<B>不要在生产环境中运行</B><STRONG>此配置</STRONG>,<STRONG>并且它不受 Oracle</STRONG> <STRONG>或其他任何厂商的支持,这点很重要。</STRONG>在生产环境中,光纤通道(能够在点对点或交换式拓扑中连接系统与存储设备的高速串行传输接口)是首选技术。FireWire 为测试和开发提供了光纤通道的低成本替代方法,但尚不能用于生产。 </SPAN></P>
<P><SPAN class=bodycopy>Oracle9<EM>i</EM> 和 Oracle 10<EM>g</EM> 第 1 版指南使用原始分区存储共享存储器上的文件,但此处我们将利用 Oracle 集群文件系统第 2 版 (OCFS2) 和 Oracle 自动存储管理 (ASM) 特性。将对两个 Linux 服务器进行如下配置: </SPAN></P>
<P></P>
<P>
<TABLE class=bodycopy height=203 cellSpacing=1 cellPadding=3 width=638 align=center border=1>
<TBODY>
<TR>
<TD noWrap align=middle bgColor=#999999 colSpan=5><B>Oracle 数据库文件</B></TD></TR>
<TR>
<TD noWrap width=165><B>RAC 节点名</B></TD>
<TD noWrap width=142><B>实例名</B></TD>
<TD noWrap width=90><B>数据库名</B></TD>
<TD noWrap width=92><B>$ORACLE_BASE</B></TD>
<TD noWrap width=101><B>用于存储 DB 文件的文件系统/卷管理器</B></TD></TR>
<TR>
<TD noWrap>linux1</TD>
<TD noWrap>orcl1</TD>
<TD noWrap>orcl</TD>
<TD noWrap>/u01/app/oracle</TD>
<TD noWrap>ASM</TD></TR>
<TR></TR>
<TR>
<TD noWrap>linux2</TD>
<TD noWrap>orcl2</TD>
<TD noWrap>orcl</TD>
<TD noWrap>/u01/app/oracle</TD>
<TD noWrap>ASM</TD></TR>
<TR></TR>
<TR>
<TD noWrap align=middle bgColor=#999999 colSpan=5><B>Oracle 集群件共享文件</B></TD></TR>
<TR>
<TD noWrap><B>文件类型</B></TD>
<TD noWrap><B>文件名</B></TD>
<TD noWrap><B>分区</B></TD>
<TD noWrap><B>挂载点</B></TD>
<TD noWrap><B>文件系统</B></TD></TR>
<TR>
<TD noWrap>Oracle Cluster Registry</TD>
<TD noWrap>/u02/oradata/orcl/OCRFile</TD>
<TD noWrap>/dev/sda1</TD>
<TD noWrap>/u02/oradata/orcl</TD>
<TD noWrap>OCFS2</TD></TR>
<TR></TR>
<TR>
<TD noWrap>CRS 表决磁盘</TD>
<TD noWrap>/u02/oradata/orcl/CSSFile</TD>
<TD noWrap>/dev/sda1</TD>
<TD noWrap>/u02/oradata/orcl</TD>
<TD noWrap>OCFS2</TD></TR>
<TR></TR></TBODY></TABLE></P>
<P><SPAN class=bodycopy>注意,在 Oracle 数据库 10<EM>g</EM> 第 2 版 (10.2) 中,集群就绪服务(即 CRS)现在称作 Oracle 集群件。 </SPAN></P>
<P class=bodycopy>Oracle 集群件软件将安装到构成 RAC 集群的每个节点上的 /u01/app/oracle/product/crs 中。但集群件软件需要将其两个文件(Oracle 集群注册表 (OCR) 文件和表决磁盘文件)与集群中的所有节点共享。这两个文件将安装到使用 OCFS2 的共享存储器中。可以(但 Oracle 不建议)使用 RAW 设备存储这些文件,但不能使用 ASM 存储这两个集群件文件。 </P>
<P class=bodycopy>Oracle 数据库 10<I>g</I> 第 2 版软件将安装到构成 RAC 集群每个节点的 Oracle Home(即 /u01/app/oracle/product/10.2.0/db_1)中。所有 Oracle 物理数据库文件(数据、联机重做日志、控制文件、归档重做日志)将安装到由 ASM 管理的共享驱动器的不同分区上。(可以将 Oracle 数据库文件十分轻松地存储在 OCFS2 上。但是,使用 ASM 可以使本文更有趣!) </P>
<P class=bodycopy>注意:本文仅作为绝对不可替代的文档。如果要寻找一个利用 RHEL 3 上的 Oracle RAC 10<EM>g</EM> 第 1 版的示例,请<A class=bodylink href="http://www.oracle.com/technology/pub/articles/hunter_rac10gr1.html">单击此处</A>。要获得以前发布的本指南的 Oracle9<EM>i</EM> RAC 版本,<A class=bodylink href="http://www.oracle.com/technology/pub/articles/hunter_9irac.html">请单击此处</A>。 </P>
<HR>

<P><!-- **************** [ 2 ] ************************************************************ --><A name=2></A><SPAN class=parahead1>2. Oracle RAC 10<EM>g</EM> 概述</SPAN> </P>
<P><SPAN class=bodycopy>随 Oracle9<EM>i</EM> 一同推出的 Oracle RAC 是 Oracle 并行服务器 (OPS) 的后续版本。RAC 允许多个实例同时访问同一数据库(存储器)。它通过允许系统进行扩展,提供了容错、负载均衡和性能效益,同时由于所有节点访问同一数据库,因此一个实例的故障不会导致无法访问数据库。 </SPAN></P>
<P class=bodycopy>Oracle RAC 的核心是共享磁盘子系统。集群中的所有节点必须能够访问集群中所有节点的所有数据、重做日志文件、控制文件和参数文件。数据磁盘必须在全局范围内可用,以便允许所有节点访问数据库。每个节点拥有自己的重做日志和控制文件,但是其他节点必须能够访问这些文件,以便在系统故障时恢复该节点。 </P>
<P class=bodycopy>Oracle RAC 与 OPS 之间的一个较大区别是,它采用了高速缓存合并技术。在 OPS 中,节点间的数据请求需要先将数据写入磁盘,然后发出请求的节点才可以读取该数据。使用高速缓存合并时,一起传递数据与使用复杂锁定算法的高速互联。 </P>
<P class=bodycopy>不是所有的集群解决方案都使用共享存储器。有些厂商使用一种称为<I>联合集群</I> 的方法,在这种方法中,数据分布在多台计算机中,而不是由所有计算机共享。但是,在使用 Oracle RAC 10<EM>g</EM> 时,多个节点使用相同的磁盘集来存储数据。利用 Oracle RAC,数据文件、重做日志文件、控制文件和归档日志文件保存在原始磁盘设备的共享存储器、NAS、SAN、ASM 或集群文件系统中。Oracle 的集群方法利用了集群中所有节点的集体处理能力,同时提供了故障切换安全性。 </P>
<P class=bodycopy>有关 Oracle RAC 的更多背景知识,请访问 OTN 上的 <A class=bodylink href="http://otn.oracle.com/products/database/clustering/" target=_blank>Oracle RAC 产品中心</A>。 </P>
<HR>

<P><!-- **************** [ 3 ] ************************************************************ --><A name=3></A><SPAN class=parahead1>3. 共享存储器概述</SPAN> </P>
<P><SPAN class=bodycopy>光纤通道是最流行的共享存储器解决方案之一。前面曾提到,光纤通道是一种高速串行传输接口,用于在点对点或交换式拓扑结构中连接系统与存储设备。光纤通道支持的协议包括 SCSI 和 IP。 </SPAN></P>
<P class=bodycopy>光纤通道配置可以支持多达 127 个节点,其每秒的吞吐量高达 2.12 GB。但是,光纤通道非常昂贵;仅交换机的起价就为 1000 美元,而高端驱动器价格可能达到 300 美元。总体而言,典型的光纤通道设置(包括服务器的插卡)价格约为 8000 美元。 </P>
<P class=bodycopy>光纤通道的一种较为便宜的替代方法是 SCSI。SCSI 技术为共享存储器提供了可接受的性能,但是对于那些习惯了基于 GPL 的 Linux 价格的管理员和开发人员来说,即使是 SCSI(一个双节点集群的价格在 2,000 美元到 5,000 美元左右)也可能超出预算。 </P>
<P class=bodycopy>另一种流行的解决方案是建立在 NAS 基础上的 Sun NFS(网络文件系统)。只有在您使用网络设备或类似的设备时,它才可以用于共享存储器。具体来说就是,您需要拥有能够保证在 NFS 上进行直接 I/O、将 TCP 作为传输协议并且读/写块大小为 32K 的服务器。 </P>
<HR>

<P><!-- **************** [ 4 ] ************************************************************ --><A name=4></A><SPAN class=parahead1>4. FireWire 技术</SPAN> </P>
<P><SPAN class=bodycopy>FireWire 是由 Apple Computer 和 Texas Instruments 开发的,它是一种高速串行数据总线的跨平台实施方案。利用其高带宽、长距离(长度多达 100 米)和高能量的总线,FireWire 现在用于数字视频 (DV)、专业音响、硬盘驱动器、高端数字照相机和家庭娱乐设备等应用中。现在,FireWire 以高达每秒 800 兆位的传输速率工作,而下一代的 FireWire 要求理论上的位速率达到 1600 Mbps,然后达到令人吃惊的 3200 Mbps。那是每秒 3.2 GB。这种速度将使 FireWire 成为传输大量数据文件甚至要求最苛刻的视频应用(如处理未压缩的高清晰 (HD) 视频或者多个标准清晰度 (SD) 的视频流)所必不可少的技术。 </SPAN></P>
<P><SPAN class=bodycopy>以下图表显示了多种类型磁盘接口的速度对比。对于每种接口,我提供了每秒千位 (kb)、千字节 (KB)、兆位 (Mb)、兆字节 (MB) 以及千兆位 (Gb) 的最大传输速率。可以看到,IEEE1394 的功能显然超过其他可用的磁盘接口技术。</SPAN> </P>
<P>
<TABLE class=bodycopy cellSpacing=1 cellPadding=2 width=550 align=center border=1>
<TBODY>
<TR bgColor=#999999>
<TD rowSpan=2>磁盘接口</TD>
<TD align=middle colSpan=5>速度</TD></TR>
<TR bgColor=#999999>
<TD class=boldbodycopy>Kb</TD>
<TD class=boldbodycopy>KB</TD>
<TD class=boldbodycopy>Mb</TD>
<TD class=boldbodycopy>MB</TD>
<TD class=boldbodycopy>Gb</TD></TR>
<TR>
<TD>串行</TD>
<TD>115</TD>
<TD>14.375</TD>
<TD>0.115</TD>
<TD>0.014</TD>
<TD></TD></TR>
<TR>
<TD>并行(标准)</TD>
<TD>920</TD>
<TD>115</TD>
<TD>0.92</TD>
<TD>0.115</TD>
<TD></TD></TR>
<TR>
<TD>USB 1.1</TD>
<TD></TD>
<TD></TD>
<TD>12</TD>
<TD>1.5</TD>
<TD></TD></TR>
<TR>
<TD>并行 (ECP/EPP)</TD>
<TD></TD>
<TD></TD>
<TD>24</TD>
<TD>3</TD>
<TD></TD></TR>
<TR>
<TD>SCSI-1</TD>
<TD></TD>
<TD></TD>
<TD>40</TD>
<TD>5</TD>
<TD></TD></TR>
<TR>
<TD>SCSI-2(快速 SCSI/快速窄带 SCSI)</TD>
<TD></TD>
<TD></TD>
<TD>80</TD>
<TD>10</TD>
<TD></TD></TR>
<TR>
<TD>ATA/100(并行)</TD>
<TD></TD>
<TD></TD>
<TD>100</TD>
<TD>12.5</TD>
<TD></TD></TR>
<TR>
<TD>IDE</TD>
<TD></TD>
<TD></TD>
<TD>133.6</TD>
<TD>16.7</TD>
<TD></TD></TR>
<TR>
<TD>快速宽带 SCSI(宽带 SCSI)</TD>
<TD></TD>
<TD></TD>
<TD>160</TD>
<TD>20</TD>
<TD></TD></TR>
<TR>
<TD>Ultra SCSI(SCSI-3 / Fast-20 / Ultra 窄带)</TD>
<TD></TD>
<TD></TD>
<TD>160</TD>
<TD>20</TD>
<TD></TD></TR>
<TR>
<TD>Ultra IDE</TD>
<TD></TD>
<TD></TD>
<TD>264</TD>
<TD>33</TD>
<TD></TD></TR>
<TR>
<TD>宽带 Ultra SCSI(快速宽带 20)</TD>
<TD></TD>
<TD></TD>
<TD>320</TD>
<TD>40</TD>
<TD></TD></TR>
<TR>
<TD>Ultra2 SCSI</TD>
<TD></TD>
<TD></TD>
<TD>320</TD>
<TD>40</TD>
<TD></TD></TR>
<TR bgColor=#e0e0e0>
<TD>FireWire 400 - IEEE1394(a)</TD>
<TD></TD>
<TD></TD>
<TD>400</TD>
<TD>50</TD>
<TD></TD></TR>
<TR>
<TD>USB 2.0</TD>
<TD></TD>
<TD></TD>
<TD>480</TD>
<TD>60</TD>
<TD></TD></TR>
<TR>
<TD>宽带 Ultra2 SCSI</TD>
<TD></TD>
<TD></TD>
<TD>640</TD>
<TD>80</TD>
<TD></TD></TR>
<TR>
<TD>Ultra3 SCSI</TD>
<TD></TD>
<TD></TD>
<TD>640</TD>
<TD>80</TD>
<TD></TD></TR>
<TR bgColor=#e0e0e0>
<TD>FireWire 800 - IEEE1394(b)</TD>
<TD></TD>
<TD></TD>
<TD>800</TD>
<TD>100</TD>
<TD></TD></TR>
<TR>
<TD>串行 ATA - (SATA)</TD>
<TD></TD>
<TD></TD>
<TD>1200</TD>
<TD>150</TD>
<TD>1.2</TD></TR>
<TR>
<TD>宽带 Ultra3 SCSI</TD>
<TD></TD>
<TD></TD>
<TD>1280</TD>
<TD>160</TD>
<TD>1.28</TD></TR>
<TR>
<TD>Ultra160 SCSI</TD>
<TD></TD>
<TD></TD>
<TD>1280</TD>
<TD>160</TD>
<TD>1.28</TD></TR>
<TR>
<TD>Ultra 串行 ATA 1500</TD>
<TD></TD>
<TD></TD>
<TD>1500</TD>
<TD>187.5</TD>
<TD>1.5</TD></TR>
<TR>
<TD>Ultra320 SCSI</TD>
<TD></TD>
<TD></TD>
<TD>2560</TD>
<TD>320</TD>
<TD>2.56</TD></TR>
<TR>
<TD>FC-AL 光纤通道</TD>
<TD></TD>
<TD></TD>
<TD>3200</TD>
<TD>400</TD>
<TD>3.2</TD></TR></TBODY></TABLE><BR><BR></P>
<HR>

<P><!-- **************** [ 5 ] ************************************************************ --><A name=5></A><SPAN class=parahead1>5. 硬件及成本</SPAN> </P>
<P class=bodycopy>我们用于构建示例 Oracle RAC 10<EM>g</EM> 环境的硬件包括两个 Linux 服务器以及您可以在本地任何计算机商店中或通过互联网购买的组件。 </P>
<P>
<TABLE class=bodycopy height=1866 cellSpacing=1 cellPadding=6 width=611 align=center border=1>
<TBODY>
<TR>
<TD align=middle bgColor=#999999 colSpan=2><B>服务器 1 — (linux1)</B></TD></TR>
<TR>
<TD width=493><B>Dimension 2400 系列</B><BR>
<LI class=bodycopy>Intel Pentium 4 处理器 (2.80GHz)<BR>
<LI class=bodycopy>1GB DDR SDRAM (333MHz)<BR>
<LI class=bodycopy>40GB 7200 RPM 内置硬盘驱动器<BR>
<LI class=bodycopy>集成的 Intel 3D AGP 图形卡<BR>
<LI class=bodycopy>集成的 10/100 以太网卡<BR>
<LI class=bodycopy>CDROM(48X 倍速)<BR>
<LI class=bodycopy>3.5" 软盘驱动器<BR>
<LI class=bodycopy>无监视器(已经有一台)<BR>
<LI class=bodycopy>USB 鼠标和键盘 </LI></TD>
<TD vAlign=bottom align=right>620 美元</TD></TR>
<TR>
<TD><B>1 - 以太网 LAN 卡</B><BR>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16833124107" target=_blank>Linksys 10/100 Mpbs</A> -(用于与 linux2 互联) </LI></UL>
<P></P>
<TABLE class=bodycopy cellSpacing=1 cellPadding=1 border=0>
<TBODY>
<TR>
<TD vAlign=top> </TD>
<TD class=bodycopy>每个 Linux 服务器应该包含两个 NIC 适配器。Dell Dimension 包含一个集成的 10/100 以太网适配器,它将用于连接公共网络。第二个 NIC 适配器将用于专用互联。 </TD></TR></TBODY></TABLE></TD>
<TD vAlign=bottom align=right>20 美元</TD></TR>
<TR>
<TD><B>1 - FireWire 卡</B><BR>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16815150021" target=_blank>SIIG, Inc. 3 端口 1394 I/O 卡</A> </LI></UL>
<P></P>
<TABLE class=bodycopy cellSpacing=1 cellPadding=1 border=0>
<TBODY>
<TR>
<TD vAlign=top></TD>
<TD class=bodycopy>已知那些使用 VIA 或 TI 制造的芯片集的接口卡可以正常工作。除了 SIIG, Inc. 3 端口 1394 I/O 卡之外,我还成功使用了 <A class=bodylink href="http://catalog.belkin.com/IWCatProductPage.process?Merchant_Id=&Section_Id=1969&pcount=&Product_Id=149022" target=_blank>Belkin FireWire 3 端口 1394 PCI 卡</A>和 <A class=bodylink href="http://www.startech.com/ststore/itemdetail.cfm?ProductID=PCI1394_4&topbar=topbaruf.htm" target=_blank>StarTech 4 端口 IEEE-1394 PCI Firewire 卡</A> 等 I/O 卡。 </TD></TR></TBODY></TABLE></TD>
<TD vAlign=bottom noWrap align=right>30 美元</TD></TR>
<TR>
<TD align=middle bgColor=#999999 colSpan=2><B>服务器 2 — (linux2)</B></TD></TR>
<TR>
<TD><B>Dimension 2400 系列</B><BR>
<LI class=bodycopy>Intel Pentium 4 处理器 (2.80GHz)
<LI class=bodycopy>1GB DDR SDRAM (333MHz)
<LI class=bodycopy>40GB 7200 RPM 内置硬盘驱动器
<LI class=bodycopy>集成的 Intel 3D AGP 图形卡
<LI class=bodycopy>集成的 10/100 以太网卡
<LI class=bodycopy>CDROM(48X 倍速)
<LI class=bodycopy>3.5" 软盘驱动器
<LI class=bodycopy>无监视器(已经有一台)
<LI class=bodycopy>USB 鼠标和键盘 </LI></TD>
<TD vAlign=bottom noWrap align=right>620 美元</TD></TR>
<TR>
<TD><B>1 - 以太网 LAN 卡</B><BR>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16833124107" target=_blank>Linksys 10/100 Mpbs</A> -(用于与 linux1 互联) </LI></UL>
<P></P>
<TABLE class=bodycopy cellSpacing=1 cellPadding=1 border=0>
<TBODY>
<TR>
<TD vAlign=top> </TD>
<TD class=bodycopy>每个 Linux 服务器应该包含两个 NIC 适配器。Dell Dimension 包含一个集成的 10/100 以太网适配器,它将用于连接公共网络。第二个 NIC 适配器将用于专用互联。 </TD></TR></TBODY></TABLE></TD>
<TD vAlign=bottom align=right>20 美元</TD></TR>
<TR>
<TD><B>1 - FireWire 卡</B><BR>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16815150021" target=_blank>SIIG, Inc. 3 端口 1394 I/O 卡</A> </LI></UL>
<P></P>
<TABLE class=bodycopy cellSpacing=1 cellPadding=1 border=0>
<TBODY>
<TR>
<TD vAlign=top></TD>
<TD class=bodycopy>已知那些使用 VIA 或 TI 制造的芯片集的接口卡可以正常工作。除了 SIIG, Inc. 3 端口 1394 I/O 卡之外,我还成功使用了 <A class=bodylink href="http://catalog.belkin.com/IWCatProductPage.process?Merchant_Id=&Section_Id=1969&pcount=&Product_Id=149022" target=_blank>Belkin FireWire 3 端口 1394 PCI 卡</A>和 <A class=bodylink href="http://www.startech.com/ststore/itemdetail.cfm?ProductID=PCI1394_4&topbar=topbaruf.htm" target=_blank>StarTech 4 端口 IEEE-1394 PCI Firewire 卡</A> 等 I/O 卡。 </TD></TR></TBODY></TABLE></TD>
<TD vAlign=bottom noWrap align=right>30 美元</TD></TR>
<TR>
<TD align=middle bgColor=#999999 colSpan=2><B>其他组件</B></TD></TR>
<TR>
<TD><B>FireWire 硬盘驱动器</B><BR>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.maxstore.com/product.asp?sku=2562934" target=_blank>Maxtor OneTouch II 300GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01G300)</A> </LI></UL>
<TABLE class=bodycopy cellSpacing=1 cellPadding=1 border=0>
<TBODY>
<TR>
<TD vAlign=top> </TD>
<TD class=bodycopy>确保您所购买的 FireWire 驱动器支持多个登录。如果驱动器的芯片集不允许对超过一个服务器进行并发访问,则每次只有一台服务器能够看到该磁盘及其分区。已知使用 Oxford 911 芯片集的磁盘可以正常工作。以下是我为本测试所购买的磁盘的详细信息:<BR>厂商:Maxtor<BR>型号:OneTouch II<BR>Mfg.部件号或 KIT 号:<A class=bodylink href="http://www.maxstore.com/product.asp?sku=2562934" target=_blank>E01G300</A><BR>容量:300 GB<BR>高速缓存缓冲区:16 MB<BR>转速:7200 RPM<BR>接口传输速率:400 Mbits/s<BR>“组合”接口:IEEE 1394 / 兼容 USB 2.0 和 USB 1.1
<P>以下是包含相应芯片组的 FireWire 驱动器(以及其中包含的附件)列表,这些驱动器支持多个登录,应适用于本文(但不予保证):</P>
<P></P>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.maxstore.com/product.asp?sku=2562934" target=_blank>Maxtor OneTouch II 300GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01G300)</A>
<LI class=bodycopy><A class=bodylink href="http://www.maxstore.com/product.asp?sku=2562933" target=_blank>Maxtor OneTouch II 250GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01G250)</A>
<LI class=bodycopy><A class=bodylink href="http://www.maxstore.com/product.asp?sku=2603453" target=_blank>Maxtor OneTouch II 200GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01A200)</A><BR></LI></UL>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.lacie.com/products/product.htm?pid=10384" target=_blank>由 F.A. Porsche 设计的 250GB LaCie 硬盘驱动器(采用 FireWire 400 接口)- (300703U)</A>
<LI class=bodycopy><A class=bodylink href="http://www.lacie.com/products/product.htm?pid=10383" target=_blank>由 F.A. Porsche 设计的 160GB LaCie 硬盘驱动器(采用 FireWire 400 接口)- (300702U)</A>
<LI class=bodycopy><A class=bodylink href="http://www.lacie.com/products/product.htm?pid=10382" target=_blank>由 F.A. Porsche 设计的 80GB LaCie 硬盘驱动器(采用 FireWire 400 接口)- (300699U)</A> </LI></UL>
<P></P>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.adstech.com/products/DLX185/intro/DLX185intro.asp?pid=DLX185" target=_blank>ADS Technologies 推出的 Dual Link 驱动器套件(内含 FireWire) - (DLX185)</A>
<LI class=bodycopy><A class=bodylink href="http://www.pcconnection.com/ProductDetail?sku=418942&SourceID=k15506" target=_blank>Maxtor Ultra 200GB ATA-133(内置)硬盘驱动器</A> </LI></UL>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.computergiants.com/items/one_item.asp?part=72300&aff=11" target=_blank>Maxtor OneTouch 250GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (A01A250)</A>
<LI class=bodycopy><A class=bodylink href="http://www.computergiants.com/items/one_item.asp?part=72299&aff=11" target=_blank>Maxtor OneTouch 200GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (A01A200)</A> </LI></UL></TD></TR></TBODY></TABLE><BR></TD>
<TD vAlign=bottom noWrap align=right>280 美元</TD></TR>
<TR>
<TD><B>1 - 额外的 FireWire 电缆</B><BR>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16812107206" target=_blank>Belkin 6 针对 6 针 1394 电缆</A> </LI></UL></TD>
<TD vAlign=bottom align=right>20 美元</TD></TR>
<TR>
<TD><B>1 - 以太网集线器或交换机</B><BR>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16833124005" target=_blank>Linksys EtherFast 10/100 5 端口以太网交换机</A> </LI></UL><BR>(用于与 int-linux1 / int-linux2 互联) </TD>
<TD vAlign=bottom align=right>25 美元</TD></TR>
<TR>
<TD><B>4 - 网络电缆</B>
<UL>
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16812106315" target=_blank>5e 类接线电缆</A> -(将 linux1 连接到公共网络)
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16812106315" target=_blank>5e 类接线电缆</A> -(将 linux2 连接到公共网络)
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16812106315" target=_blank>5e 类接线电缆</A> -(将 linux1 与以太网交换机互联)
<LI class=bodycopy><A class=bodylink href="http://www.newegg.com/Product/Product.asp?Item=N82E16812106315" target=_blank>5e 类接线电缆</A> -(将 linux2 与以太网交换机互联)</LI></UL></TD>
<TD vAlign=bottom noWrap align=right>5 美元<BR>5 美元<BR>5 美元<BR>5 美元</TD></TR>
<TR>
<TD align=right><B>总计 </B></TD>
<TD noWrap align=right><B>1,685 美元</B></TD></TR></TBODY></TABLE><BR><SPAN class=bodycopy>请注意,Maxtor OneTouch 外置硬盘驱动器<STRONG>确实</STRONG>有两个 IEEE1394 (FireWire) 端口,尽管乍看上去可能不是这样。上面列出的其他外置硬盘驱动器也是如此。还要注意,虽然您可能总想将以太网交换机(用于互联 int-linux1/int-linux2)替换为一根交叉的 CAT5 线,但我不推荐使用这种方法。我发现在使用交叉的 CAT5 线进行互联时,只要我关闭一台 PC,另一台 PC 就会检测到一个“cable unplugged”错误,因而高速缓存合并网络将会变为不可用。 </SPAN></P>
<P class=bodycopy>既然我们知道了将在本示例中使用的硬件,就让我们对环境概况进行概念性的了解: </P>
<P></P>
<DIV align=center>
<P><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f1.gif"> <SPAN class=bodycopy><BR><BR><STRONG>图 1</STRONG> 体系结构</SPAN> </P></DIV>
<P></P>
<P>在我们开始详细讨论安装过程时,始终切记大多数任务需要在两台服务器上执行。 </P>
<HR>

<P><!-- **************** [ 6 ] ************************************************************ --><A name=6></A><SPAN class=parahead1>6. 安装 Linux 操作系统</SPAN> </P>
<P><SPAN class=bodycopy>本节总结了用于安装 Linux 操作系统的各个屏幕。本指南原定使用 Red Hat Enterprise Linux 4 AS/ES (RHEL4) 操作环境。作为替代方法,我在本文中使用了 CentOS 4.2:RHEL4 操作环境的一个免费且稳定的版本。 </SPAN></P>
<P class=bodycopy>有关更多详细的安装说明,可以使用由 Red Hat Linux 提供的<A class=bodylink href="http://www.redhat.com/docs/manuals/" target=_blank>手册</A>。但是,我建议对本配置使用我在下面提供的说明。 </P>
<P class=bodycopy>在两个节点上安装 Linux 操作系统之前,您应该先安装 FireWire 和两个 NIC 接口(卡)。 </P>
<P class=bodycopy>此外,在开始安装前,确保 FireWire 驱动器(我们的共享存储驱动器)<B>没有</B>连接到两个服务器中的任何一个上。您也可以选择将这两个服务器同时连接到 FireWire 驱动器,并只需关掉驱动器的电源。 </P>
<P class=bodycopy>下载 CentOS 4.2 的以下 ISO 镜像: </P>
<UL>
<LI><SPAN class=bodycopy><A class=bodylink href="http://www.gtlib.gatech.edu/pub/centos/4.2/isos/i386/CentOS-4.2-i386-bin1of4.iso">CentOS-4.2-i386-bin1of4.iso</A> (618 MB)</SPAN>
<LI><SPAN class=bodycopy><A class=bodylink href="http://www.gtlib.gatech.edu/pub/centos/4.2/isos/i386/CentOS-4.2-i386-bin2of4.iso">CentOS-4.2-i386-bin2of4.iso</A> (635 MB)</SPAN>
<LI><SPAN class=bodycopy><A class=bodylink href="http://www.gtlib.gatech.edu/pub/centos/4.2/isos/i386/CentOS-4.2-i386-bin3of4.iso">CentOS-4.2-i386-bin3of4.iso</A> (639 MB)</SPAN>
<LI><SPAN class=bodycopy><A class=bodylink href="http://www.gtlib.gatech.edu/pub/centos/4.2/isos/i386/CentOS-4.2-i386-bin4of4.iso">CentOS-4.2-i386-bin4of4.iso</A> (217 MB)<BR></SPAN></LI></UL>
<P class=bodycopy>在<A class=bodylink href="http://www.centos.org/modules/tinycontent/index.php?id=13" target=_blank>下载</A>并将 CentOS 镜像(ISO 文件)刻录到 CD 之后,将 CentOS 1 号盘插入到第一个服务器(在本示例中是 <TT><FONT face=新宋体>linux1</FONT></TT>),启动其电源,并按照以下说明来回应安装屏幕的提示。在第一个节点上安装完 Linux 后,在第二个节点上执行相同的 Linux 安装,但将节点名 <TT><FONT face=新宋体>linux1</FONT></TT> 替换为 <TT><FONT face=新宋体>linux2</FONT></TT> 并设定适当的不同 IP 地址。 </P>
<P><SPAN class=bodycopy><B>Boot Screen</B> <BR>第一个屏幕是 CentOS Enterprise Linux 引导屏幕。在 boot:提示符处按 [Enter] 键启动安装过程。 </SPAN></P>
<P><SPAN class=bodycopy><B>Media Test</B> <BR>当要求测试 CD 介质时,用 Tab 键切换到 [Skip] 并按 [Enter] 键。如果有错误,则介质刻录软件会向我们发出警告。在几秒钟后,安装程序将会检测视频卡、监视器和鼠标。然后安装程序进入 GUI 模式。 </SPAN></P>
<P><SPAN class=bodycopy><B>Welcome to CentOS Enterprise Linux</B> <BR>在欢迎屏幕上,单击 [Next] 继续。 </SPAN></P>
<P><SPAN class=bodycopy><B>Language / Keyboard Selection</B> <BR>接下来的两个屏幕提示您设置语言和键盘设置。为您的配置作出合适的选择。 </SPAN></P>
<P><SPAN class=bodycopy><B>Installation Type</B> <BR>选择 [Custom] 选项并单击 [Next] 继续。 </SPAN></P>
<P><SPAN class=bodycopy><B>Disk Partitioning Setup</B> <BR>选择 [Automatically partition] 并单击 [Next] 继续。</SPAN></P>
<P class=bodycopy>如果以前在本机上安装了 Linux,则下一屏幕将询问您是要“删除”还是“保留”旧分区。选择 [Remove all partitions on this system] 选项。还要确保为本安装选择了 [hda] 驱动器。我还选中了 [Review (and modify if needed) the partitions created] 复选框。单击 [Next] 继续。 </P>
<P class=bodycopy>然后显示一个对话窗口,询问您是否真的要删除所有分区。单击 [Yes] 回复这一警告。 </P>
<P><SPAN class=bodycopy><B>Partitioning</B> <BR>随后安装程序将允许您查看(如果需要还可以更改)它自动选择的磁盘分区。几乎所有情况下,安装程序将为 /boot 分配 100MB,为 swap 分配双倍数量的 RAM,而将剩余空间分配给根 (/) 分区。我倾向于至少为 swap 分配 1 GB 的空间。就本安装而言,我将接受所有自动选用的大小。(包括 2GB 的 swap,因为我安装了 1GB 的 RAM。) </SPAN></P>
<P class=bodycopy>从 RHEL 4 开始,安装程序将创建与刚才提到的相同磁盘配置,但将使用逻辑卷管理器 (LVM) 创建它们。例如,它将把第一个硬盘驱动器(我的配置使用 /dev/hda)划分为两个分区 - 一个分区用于 /boot 分区 (/dev/hda1),而磁盘的剩余部分专用于 LVM 指定的 VolGroup00 (/dev/hda2)。然后,将 LVM 卷分组 (VolGroup00) 划分为两个 LVM 分区 - 一个分区用于根文件系统 (/),另一个用于交换分区。我主要检查它是否创建了至少 1GB 的交换分区。由于我安装了 1GB RAM,因此安装程序创建了 2GB 的交换分区。也就是说,我只要接受默认的磁盘布局就行了。 </P>
<P><SPAN class=bodycopy><B>Boot Loader Configuration</B> <BR>安装程序将默认使用 GRUB 引导加载程序。要使用 GRUB 引导加载程序,接受所有默认值并单击 [Next] 继续。 </SPAN></P>
<P><SPAN class=bodycopy><B>Network Configuration</B> <BR>在启动操作系统安装之前,我已确认在每个 Linux 机器上安装了两个 NIC 接口(卡)。本屏幕应该已经成功地检测到每个网络设备。 </SPAN></P>
<P class=bodycopy>首先,确保将每个网络设备设置为 [Active on boot]。安装程序可能选择不激活 eth1。 </P>
<P class=bodycopy>第二步,按照以下方法对 eth0 和 eth1 进行 [Edit] 操作。您可能要为 eth0 和 eth1 使用不同的 IP 地址,没问题。如果可能,试着将 eth1(互联)置于不同于 eth0(公共网络)的子网中: </P>
<P><SPAN class=bodycopy><B>eth0:</B><BR>— 取消选中 [Configure using DHCP] 复选项<BR>— 选中 [Activate on boot]<BR>— IP 地址:192.168.1.100<BR>— 网络掩码: 255.255.255.0 </SPAN></P>
<P><SPAN class=bodycopy><B>eth1:</B><BR>— 取消选中 [Configure using DHCP] 复选项<BR>— 选中 [Activate on boot]<BR>— IP 地址:192.168.2.100<BR>— 网络掩码:255.255.255.0 </SPAN></P>
<P class=bodycopy>接着,手动设置您的主机名。第一个节点使用“linux1”,第二个节点使用“linux2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。 </P>
<P><SPAN class=bodycopy><B>Firewall</B> <BR>在该屏幕上,确保选中 [No firewall],然后单击 [Next] 继续。系统可能显示一个警告对话框,提示您不要设置防火墙。如果出现此情况,只需单击 [Proceed] 继续。 </SPAN></P>
<P><SPAN class=bodycopy><B>Additional Language Support/Time Zone</B> <BR>接下来的两个屏幕允许您选择其他语言支持以及时区信息。几乎所有情况下,您都可以接受默认值。 </SPAN></P>
<P><SPAN class=bodycopy><B>Set Root Password</B> <BR>选择一个根口令,然后单击 [Next] 继续。 </SPAN></P>
<P><SPAN class=bodycopy><B>Package Group Selection</B> <BR>滚动到本屏幕的底部,在“Miscellaneous”区域的下面选择 [Everything]。单击 [Next] 继续。 </SPAN></P>
<P>请注意,Oracle 的安装并不要求安装所有 Linux 程序包。为简单起见,我决定安装所有程序包。有关成功的 Oracle 安装所需重要程序包的详细说明,请参见<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#15">第 15 节</A>(“检查用于 Oracle 10<I>g</I> 第 2 版的 RPM 程序包”)。 </P>
<P class=bodycopy>请注意,在使用某些 RHEL4 发行版本时,默认情况下将不显示“Package Group Selection”屏幕,而只显示“Install default software packages”或“Customize software packages to be installed”屏幕。选择选项“Customize software packages to be installed”,然后单击 [Next] 继续。随即将显示“Package Group Selection”屏幕。此时,向下滚动到该屏幕底部,然后在“Miscellaneous”部分下选择 [Everything]。单击 [Next] 继续。 </P>
<P><SPAN class=bodycopy><B>About to Install</B> <BR>本屏幕主要是一个确认屏幕。单击 [Next] 开始安装。安装过程中,将请求您将磁盘切换到 2 号盘、3 号盘,然后切换到 4 号盘。单击 [Continue] 启动安装过程。 </SPAN></P>
<P class=bodycopy>请注意,在使用 CentOS 4.2 时,安装程序将请求您切换到 2 号盘、3 号盘、4 号盘、1 号盘,然后返回到 4 号盘。 </P>
<P><SPAN class=bodycopy><B>Graphical Interface (X) Configuration</B> <BR>在使用大多数 RHEL4 发行版本(CentOS 4.2 除外)时,安装结束时,安装程序将尝试检测视频硬件。确保安装程序已经检测并选择了正确的视频硬件(图形卡和监视器),以便正确使用 X Windows 服务器。在接下来的几个屏幕中,您将继续进行 X 配置。 </SPAN></P>
<P><SPAN class=bodycopy><B>Congratulations</B> <BR>大功告成。您已经在第一个节点 (linux1) 上成功安装了 CentOS Enterprise Linux。安装程序将从 CD-ROM 驱动器中弹出 CD。取出 CD,单击 [Exit] 重新引导系统。 </SPAN></P>
<P class=bodycopy>系统第一次引导进入 Linux 中时将为您显示另一个 Welcome 屏幕。接下来的向导将允许您配置日期和时间、添加其他用户、测试声卡并安装任何其他 CD。我唯一关心的屏幕是时间和日期(如果您使用的是 CentOS 4.x,则是监视器/显示设置)。至于其他屏幕,由于没有其他需要安装的东西(至少目前是这样!),因此只需快速通过即可。如果一切都已成功,您现在应该看到登录屏幕了。 </P>
<P><SPAN class=bodycopy><B>在第二个节点上执行相同的安装</B> <BR>在第一个节点上完成 Linux 安装后,在第二个节点 (linux2) 上重复以上步骤。在配置机器名和网络时,确保配置相应值。对于我的安装,以下是我为 linux2 所配置的内容: </SPAN></P>
<P class=bodycopy>首先,确保将每个网络设备设置为 [Active on boot]。安装程序将选择不激活 eth1。 </P>
<P class=bodycopy>第二步,按照以下方法对 eth0 和 eth1 进行 [Edit] 操作: </P>
<P><SPAN class=bodycopy><B>eth0:</B><BR>— 取消选中 [Configure using DHCP] 复选项<BR>— 选中 [Activate on boot]<BR>— IP 地址:192.168.1.101<BR>— 网络掩码: 255.255.255.0 </SPAN></P>
<P><SPAN class=bodycopy><B>eth1:</B><BR>— 取消选中 [Configure using DHCP] 复选项<BR>— 选中 [Activate on boot]<BR>— IP 地址:192.168.2.101<BR>— 网络掩码:255.255.255.0 </SPAN></P>
<P class=bodycopy>接着,手动设置您的主机名。我对第二个节点使用“linux2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。 <BR></P>
<HR>

<P><!-- **************** [ 7 ] ************************************************************ --><A name=7></A><SPAN class=parahead1>7. 配置网络</SPAN><BR><EM><BR><SPAN class=bodycopy>在集群的<STRONG>所有节点</STRONG>上执行以下网络配置!</SPAN></EM> </P>
<P><SPAN class=bodycopy><STRONG>注意:</STRONG>虽然我们在 Linux 安装过程中配置了几个网络设置,但千万<B>不要</B>跳过本节,这是因为它包含 RAC 环境所需的关键步骤。 </SPAN></P>
<P><SPAN class=bodycopy><B>网络设置简介</B></SPAN></P>
<P class=bodycopy>在 Linux O/S 安装过程中,您已经为每个节点配置了 IP 地址和主机名。现在您需要配置 <TT><FONT face=新宋体>/etc/hosts</FONT></TT> 文件,并调整几个用于互联的网络设置。我还提供了启用 Telnet 和 FTP 服务的说明。 </P>
<P class=bodycopy>每个节点均应有一个用于公共网络的静态 IP 地址和一个用于专用集群互联的静态 IP 地址。专用互联只用于由 Oracle 传输与集群管理器和高速缓存合并相关的数据。虽然可以将公共网络用于互联,但由于它可能导致数据库性能降低(减少高速缓存合并和集群管理器流量的带宽),因此不建议使用这种方法。对于生产 RAC 实施,互联应该至少有 GB 或更多,并且只由 Oracle 使用。 </P>
<P class=bodycopy><STRONG>配置公共网络和专用网络</STRONG><BR><BR>在我们的双节点示例中,我们需要在两个节点上配置网络,以访问公共网络及其专用互联。 </P>
<P class=bodycopy>在 RHEL4 中配置网络设置的最简单方法是使用网络配置程序。该应用程序可以以根用户帐户从命令行启动,如下所示: </P><PRE># su -
# /usr/bin/system-config-network &
</PRE>
<P><SPAN class=bodycopy>不要为公共 IP 地址或互联使用 DHCP 命名;您需要静态 IP 地址! </SPAN></P>
<P class=bodycopy>使用网络配置应用程序,您需要配置两个 NIC 设备以及 /etc/hosts 文件。可以使用网络配置 GUI 完成这两个任务。请注意,两个节点的 <TT><FONT face=新宋体>/etc/hosts</FONT></TT> 设置是相同的。 </P>
<P><SPAN class=bodycopy>我们的示例配置将使用以下的设置:</SPAN> </P>
<P>
<TABLE class=bodycopy cellSpacing=1 cellPadding=1 width=599 align=center border=1>
<TBODY>
<TR>
<TD class=boldbodycopy align=middle colSpan=4>服务器 1 (linux1)</TD></TR>
<TR bgColor=#c0c0c0>
<TD width=55><B>设备</B></TD>
<TD width=107><B>IP 地址</B></TD>
<TD width=107><B>子网</B></TD>
<TD width=273><B>目的</B></TD></TR>
<TR>
<TD>eth0</TD>
<TD>192.168.1.100</TD>
<TD>255.255.255.0</TD>
<TD>连接 linux1 与公共网络</TD></TR>
<TR>
<TD>eth1</TD>
<TD>192.168.2.100</TD>
<TD>255.255.255.0</TD>
<TD>连接 linux1(互联)与 linux2 (int-linux2)</TD></TR>
<TR bgColor=#c0c0c0>
<TD colSpan=4><B>/etc/hosts</B></TD></TR>
<TR>
<TD colSpan=4><PRE>127.0.0.1        localhost      loopback

# Public Network - (eth0)
192.168.1.100    linux1
192.168.1.101   linux2

# Private Interconnect - (eth1)
192.168.2.100   int-linux1
192.168.2.101    int-linux2

# Public Virtual IP (VIP) addresses for - (eth0)
192.168.1.200    vip-linux1
192.168.1.201    vip-linux2
</PRE></TD></TR></TBODY></TABLE></P>
<P></P>
<P>
<TABLE class=bodycopy cellSpacing=1 cellPadding=1 width=600 align=center border=1>
<TBODY>
<TR>
<TD class=boldbodycopy align=middle colSpan=4>服务器 2 (linux2)</TD></TR>
<TR bgColor=#c0c0c0>
<TD width=55><B>设备</B></TD>
<TD width=107><B>IP 地址</B></TD>
<TD width=107><B>子网</B></TD>
<TD width=308><B>目的</B></TD></TR>
<TR>
<TD>eth0</TD>
<TD>192.168.1.101</TD>
<TD>255.255.255.0</TD>
<TD>连接 linux2 与公共网络</TD></TR>
<TR>
<TD>eth1</TD>
<TD>192.168.2.101</TD>
<TD>255.255.255.0</TD>
<TD>连接 linux2(互联)与 linux1 (int-linux1)</TD></TR>
<TR bgColor=#c0c0c0>
<TD colSpan=4><B>/etc/hosts</B></TD></TR>
<TR>
<TD colSpan=4><PRE>127.0.0.1        localhost      loopback

# Public Network - (eth0)
192.168.1.100    linux1
192.168.1.101   linux2

# Private Interconnect - (eth1)
192.168.2.100   int-linux1
192.168.2.101    int-linux2

# Public Virtual IP (VIP) addresses for - (eth0)
192.168.1.200    vip-linux1
192.168.1.201    vip-linux2
</PRE></TD></TR></TBODY></TABLE><BR><SPAN class=bodycopy>请注意,只需在两个节点的 /etc/hosts 文件(或您的 DNS)中定义虚拟 IP 地址。当您运行 Oracle Universal Installer 时,该程序启动 Oracle 的虚拟互联网协议配置助手 (VIPCA),也就说 Oracle 将自动配置公共虚拟 IP 地址。当运行 <TT><FONT face=新宋体>srvctl start nodeapps -n <node_name></FONT></TT> 命令时,所有的虚拟 IP 地址将被激活。这就是将要在客户端 tnsnames.ora 文件中进行配置的主机名/IP 地址(后文详述)。 </SPAN></P>
<P class=bodycopy>在以下的屏幕截图中,只显示了节点 1 (linux1)。确保对两个节点进行了所有适当的网络设置。</P>
<P align=center><BR><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f2.gif"> <BR><SPAN class=bodycopy><STRONG>图 2</STRONG> 网络配置屏幕,节点 1 (linux1)</SPAN> </P>
<P align=center><BR><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f3.gif"> <BR><SPAN class=bodycopy><STRONG>图 3</STRONG> 以太网设备屏幕,eth0 (linux1)</SPAN> </P>
<P align=center><BR><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f4.gif"> <BR><SPAN class=bodycopy><STRONG>图 4</STRONG> 以太网设备屏幕,eth1 (linux1)</SPAN> </P>
<P align=center><BR><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f5.gif"> <BR><SPAN class=bodycopy><STRONG>图 5</STRONG>:网络配置屏幕,/etc/hosts (linux1)</SPAN> <BR></P>
<P class=bodycopy>在配置网络后,您可以使用 <TT><FONT face=新宋体>ifconfig</FONT></TT> 命令验证一切是否正常。以下示例来自于 <TT><FONT face=新宋体>linux1</FONT></TT>: </P><PRE>$ /sbin/ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0D:56:FC:39:EC
inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
inet6 addr:fe80::20d:56ff:fefc:39ec/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:835 errors:0 dropped:0 overruns:0 frame:0
TX packets:1983 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:705714 (689.1 KiB)  TX bytes:176892 (172.7 KiB)
Interrupt:3

eth1      Link encap:Ethernet  HWaddr 00:0C:41:E8:05:37
inet addr:192.168.2.100  Bcast:192.168.2.255  Mask:255.255.255.0
inet6 addr:fe80::20c:41ff:fee8:537/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b)  TX bytes:546 (546.0 b)
Interrupt:11 Base address:0xe400

lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr:::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:5110 errors:0 dropped:0 overruns:0 frame:0
TX packets:5110 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8276758 (7.8 MiB)  TX bytes:8276758 (7.8 MiB)

sit0      Link encap:IPv6-in-IPv4
NOARP  MTU:1480  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
</PRE>
<P><SPAN class=bodycopy><B>关于虚拟 IP</B></SPAN></P>
<P class=bodycopy>10<EM>g</EM> 中为什么使用虚拟 IP (VIP)?为什么当它的主节点发生故障时不只是返回一个无效的连接呢? </P>
<P class=bodycopy>这全是出于对应用程序可用性的考虑。当一个节点发生故障时,与其关联的 VIP 将被自动故障切换到另外某个节点上。当出现这种情况时,会发生两件事。 </P>
<OL>
<LI class=bodycopy>新的节点重新进行地址解析,显示该地址的一个新的 MAC 地址。对于直接连接的客户端,这通常使它们在连接旧地址时出现错误。
<LI class=bodycopy>随后发送到 VIP 的数据包前往新的节点,该节点将把错误的 RST 数据包返回客户端。这导致客户端立即收到错误信息。 </LI></OL>
<P class=bodycopy>这意味着,当客户端向现在已经停机的节点发出 SQL 时,或者在连接状态下遍历地址列表时,客户端不会等待很长的 TCP/IP 超时(大约 10 分钟),而是接收到一个 TCP 重置信息。就 SQL 来说,该信息为 <TT><FONT face=新宋体>ORA-3113</FONT></TT>。对于连接,使用 tnsname 中的下一个地址。 </P>
<P>更进一步的操作是使用透明的应用程序故障切换 (TAF)。成功配置 TAF 后,可以完全避免 ORA-3113 错误!<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_3.html#28">第 28 节</A>(“透明的应用程序故障切换 - (TAF)”)将更详细地介绍 TAF。 </P>
<P class=bodycopy>如果不使用 VIP,连接停用节点的客户端经常要等待 10 分钟的 TCP 超时,然后才收到错误信息。因此,不使用 VIP 您就不会真正拥有好的高可用性解决方案(来源 — Metalink 注释 220970.1)。 </P>
<P><SPAN class=bodycopy><B>确保 RAC 节点名没有出现在回送地址中</B></SPAN></P>
<P class=bodycopy>确保在 <TT><FONT face=新宋体>/etc/hosts</FONT></TT> 文件的回送地址中<B>不</B>包含节点名(<TT><FONT face=新宋体>linux1</FONT></TT> 或 <TT><FONT face=新宋体>linux2</FONT></TT>)。如果机器名出现在回送地址条目中,如下所示: </P><PRE>127.0.0.1     linux1 localhost.localdomain localhost
</PRE>
<P><SPAN class=bodycopy>需要按如下所示将其删除: </SPAN></P><PRE>127.0.0.1        localhost.localdomain   localhost
</PRE>
<P class=bodycopy>如果 RAC 节点名出现在回送地址中,您在 RAC 安装期间将接收到以下错误信息:</P><PRE>ORA-00603:ORACLE server session terminated by fatal error
</PRE>
<P><SPAN class=bodycopy>或 </SPAN></P><PRE>ORA-29702:error occurred in Cluster Group Service operation
</PRE>
<P><SPAN class=bodycopy><B>调整网络设置</B></SPAN></P>
<P class=bodycopy>在 Oracle 9.2.0.1 以及更高版本中,Oracle 在 Linux 上使用 UDP 作为默认协议进行过程间通信 (IPC) 的默认协议,如在 RAC 集群中的实例间的高速缓存合并和集群管理器缓冲区传输。 </P>
<P class=bodycopy>Oracle 强烈建议将默认的和最大的发送缓冲区大小(<TT><FONT face=新宋体>SO_SNDBUF</FONT></TT> 套接字选项)调整为 256KB,并将默认的和最大的接收缓冲区大小(SO_RCVBUF 套接字选项)调整为 256KB。 </P>
<P class=bodycopy>接收缓冲区由 TCP 和 UDP 用于保留所接收的数据,直到应用程序读出这些数据为止。由于不允许对等端发送超过缓冲区大小窗口的数据,因此接收缓冲区无法溢出。这意味着,如果数据报不适合套接字接收缓冲区,则将它们舍弃,从而可能导致发送端压垮接收端。 </P>
<P class=bodycopy>无需重新引导即可在 <TT><FONT face=新宋体>/proc</FONT></TT> 文件系统中更改默认的和最大的窗口大小: </P><PRE># su - root

# sysctl -w net.core.rmem_default=262144
net.core.rmem_default = 262144

# sysctl -w net.core.wmem_default=262144
net.core.wmem_default = 262144

# sysctl -w net.core.rmem_max=262144
net.core.rmem_max = 262144

# sysctl -w net.core.wmem_max=262144
net.core.wmem_max = 262144
</PRE>
<P class=bodycopy>以上命令对已经运行的操作系统作出更改。现在您应将以下各行添加到 RAC 集群中每个节点的 /etc/sysctl.conf 文件中,从而使以上更改成为永久性更改(针对每次重新引导而言):</P><PRE># 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
</PRE>
<P><SPAN class=bodycopy><B>启用 Telnet 和 FTP 服务</B></SPAN></P>
<P class=bodycopy>虽然将 Linux 配置为运行 Telnet 和 FTP 服务器,但在默认情况下禁用了这些服务。要启用 telnet 的这些服务,以根用户帐户登录到服务器并运行以下命令: </P><PRE># chkconfig telnet on
# service xinetd reload
Reloading configuration:[  OK  ]
</PRE>
<P class=bodycopy>从 Red Hat Enterprise Linux 3.0 版(以及 CentOS 中)起,FTP 服务器 (wu-ftpd) 不再随 <TT><FONT face=新宋体>xinetd</FONT></TT> 一起提供。它已经为 <TT><FONT face=新宋体>vsftp</FONT></TT> 所取代,并且可以从 /etc/init.d/vsftpd 启动,如下所示: </P><PRE># /etc/init.d/vsftpd start
Starting vsftpd for vsftpd:[  OK  ]
</PRE>
<P><SPAN class=bodycopy>如果您希望在重新启动(重新引导)计算机时启动和停止 <TT><FONT face=新宋体>vsftpd</FONT></TT> 服务,可以创建以下符号链接: </SPAN></P><PRE># ln -s /etc/init.d/vsftpd /etc/rc3.d/S56vsftpd
# ln -s /etc/init.d/vsftpd /etc/rc4.d/S56vsftpd
# ln -s /etc/init.d/vsftpd /etc/rc5.d/S56vsftpd
</PRE>
<P></P>
<HR>

<P><!-- **************** [ 8 ] ************************************************************ --><A name=8></A><SPAN class=parahead1>8. 获取并安装新的 Linux 内核/FireWire 模块</SPAN> </P>
<P class=bodycopy><EM>在集群中的<STRONG>所有节点</STRONG>上执行以下内核升级和 FireWire 模块安装!</EM> </P>
<P class=bodycopy>接下来的步骤是获取并安装一个新的 Linux 内核以及支持具有多个登录的 IEEE1394 设备的 FireWire 模块。这将需要两个单独的下载和安装:一个用于新的 RHEL4 内核,另一个包含支持的 FireWire 模块。 </P>
<P class=bodycopy>在本指南的先前版本中,我提供了下载 Linux 内核的一个修补版本(源代码)及编译它的步骤。 由于 <A class=bodylink href="http://oss.oracle.com/" target=_blank>Oracle 的 Linux 项目开发小组</A>的工作,已经不再需要这些步骤了。Oracle 现在提供了一个 RHEL4 的预编译内核(它也可用于 CentOS!),很容易下载和安装。本节介绍了如何下载并安装此内核以及支持的 FireWire 模块。在开始详细说明如何执行这些操作之前,我们先花一些时间来介绍一下新内核需要进行的更改。 </P>
<P class=bodycopy>尽管已经有了针对 Linux 的 FireWire 驱动程序,但它们常常不支持<B>共享</B>存储器。通常,当您登录到操作系统时,操作系统将驱动程序与该机器上一个具体的驱动器相连。这种实施方法不适用于我们的 RAC 配置。共享存储器(我们的 FireWire 硬盘驱动器)需要被多个节点所访问。您需要使 FireWire 驱动程序能够提供对驱动器的非独占访问,以便多个服务器(即组成集群的节点)能够访问同一个存储器。通过在源代码中删除在登录期间标识机器的位掩码,导致对 FireWire 硬盘驱动器进行非独占访问,从而实现这一目的。集群中的所有其他节点在其登录会话期间,使用相同的经过修改的驱动程序登录到同一个驱动器,因此它们也具有对于该驱动器的非独占访问权。 </P>
<P class=bodycopy>您的实施描述了一个双节点的集群(每个节点具有单处理器)— 每个服务器均运行 CentOS Enterprise Linux。请牢记,需要在两个 Linux 节点上执行打补丁的 Linux 内核的安装过程。CentOS Enterprise Linux 4.2 包含内核 2.6.9-22.EL #1。 我们将需要从以下两个 URL 中下载 OTN 提供的 2.6.9-11.0.0.10.3.EL #1 Linux 内核和支持的 FireWire 模块: </P>
<UL>
<LI><SPAN class=bodycopy><A class=bodylink href="http://oss.oracle.com/projects/rhel4kernels/files/2.6.9-11.0.0.10.3.EL/" target=_blank>RHEL4 内核</A></SPAN>
<LI><SPAN class=bodycopy><A class=bodylink href="http://oss.oracle.com/projects/firewire/files/RedHat/RHEL4/" target=_blank>FireWire 模块</A></SPAN></LI></UL>
<P><SPAN class=bodycopy><STRONG>下载新 RHEL 4 内核的以下文件之一:</STRONG> </SPAN></P>
<P><SPAN class=bodycopy><A class=bodylink href="http://oss.oracle.com/projects/rhel4kernels/dist/files/2.6.9-11.0.0.10.3.EL/i686/kernel-2.6.9-11.0.0.10.3.EL.i686.rpm">kernel-2.6.9-11.0.0.10.3.EL.i686.rpm</A> -<I>(用于单处理器)</I><BR><BR>或</SPAN></P>
<P><SPAN class=bodycopy><A class=bodylink href="http://oss.oracle.com/projects/rhel4kernels/dist/files/2.6.9-11.0.0.10.3.EL/i686/kernel-smp-2.6.9-11.0.0.10.3.EL.i686.rpm">kernel-smp-2.6.9-11.0.0.10.3.EL.i686.rpm</A> -<I>(用于多处理器)</I></SPAN></P>
<P><SPAN class=bodycopy><STRONG>下载支持的 FireWire 模块的以下文件之一:</STRONG> </SPAN></P>
<P><SPAN class=bodycopy><A class=bodylink href="http://oss.oracle.com/projects/firewire/dist/files/RedHat/RHEL4/i386/oracle-firewire-modules-2.6.9-11.0.0.10.3.EL-1286-1.i686.rpm">oracle-firewire-modules-2.6.9-11.0.0.10.3.EL-1286-1.i686.rpm</A> -<I>(用于单处理器)</I><BR><BR>或</SPAN></P>
<P><SPAN class=bodycopy><A class=bodylink href="http://oss.oracle.com/projects/firewire/dist/files/RedHat/RHEL4/i386/oracle-firewire-modules-2.6.9-11.0.0.10.3.ELsmp-1286-1.i686.rpm">oracle-firewire-modules-2.6.9-11.0.0.10.3.ELsmp-1286-1.i686.rpm</A> -<I>(用于多处理器)</I></SPAN></P>
<P><SPAN class=bodycopy><B>以 root 用户安装新的 RHEL 4 内核:</B></SPAN> </P><PRE># rpm -ivh --force kernel-2.6.9-11.0.0.10.3.EL.i686.rpm - <I>(for single processor)</I>
</PRE>
<P><SPAN class=bodycopy>或 </SPAN></P><PRE># rpm -ivh --force kernel-smp-2.6.9-11.0.0.10.3.EL.i686.rpm - <I>(for multiple processors)</I>
</PRE>
<P><SPAN class=bodycopy>使用 RPM 安装新内核还将用适当的节 (stanza) 和默认的引导选项来更新您的 GRUB(或 lilo)配置。安装新内核后不必修改引导加载程序配置。 </SPAN></P>
<P><SPAN class=bodycopy><B>注意:</B>安装新内核后,不必在此时继续安装支持的 FireWire 模块。要安装 FireWire 模块,必须先重新引导至新内核中。 </SPAN></P>
<P><SPAN class=bodycopy><B>重新引导至新的 Linux 服务器中:</B> </SPAN></P>
<P class=bodycopy>此刻,新 RHEL4 内核已经安装完毕。您现在需要重新引导至新的 Linux 内核中: </P><PRE># init 6
</PRE>
<P><SPAN class=bodycopy><B>以 root 身份安装支持的 FireWire 模块:</B> </SPAN></P>
<P class=bodycopy>引导至新的 RHEL 4 内核后,需要通过运行以下任意命令安装支持的 FireWire 模块程序包: </P><PRE># rpm -ivh oracle-firewire-modules-2.6.9-11.0.0.10.3.EL-1286-1.i686.rpm — <I>(用于单处理器)</I>
— 或 —
# rpm -ivh oracle-firewire-modules-2.6.9-11.0.0.10.3.ELsmp-1286-1.i686.rpm — <I>(用于多处理器)</I>
</PRE>
<P><SPAN class=bodycopy><B>添加模块选项:</B> </SPAN></P>
<P class=bodycopy>将以下行添加到 <TT><FONT face=新宋体>/etc/modprobe.conf</FONT></TT>: </P><PRE>options sbp2 exclusive_login=0
</PRE>
<P><SPAN class=bodycopy>将串行总线协议模块 (<TT><FONT face=新宋体>sbp2</FONT></TT>) 的参数 <TT><FONT face=新宋体>sbp2 exclusive_login</FONT></TT> 设置为零是非常重要的,以便允许多个主机并发地登录和访问 FireWire 磁盘。 </SPAN></P>
<P><SPAN class=bodycopy><B>在第二个 Linux 服务器上执行以上任务:</B> </SPAN></P>
<P class=bodycopy>在第一个 Linux 服务器上安装新的 RHEL4 内核和支持的 FireWire 模块后,转移到第二个 Linux 服务器并在其中重复本节中的相同任务。 </P>
<P><SPAN class=bodycopy><B>将 FireWire 驱动器连接到每台机器并引导进入新的内核中:</B> </SPAN></P>
<P class=bodycopy>在集群中的两个节点上都执行了以上任务之后,关闭两台 Linux 机器的电源: </P><PRE>===============================

# hostname
linux1

# init 0

===============================

# hostname
linux2

# init 0

===============================
</PRE>
<P><SPAN class=bodycopy>在关闭了两台计算机的电源后,将它们连接到 FireWire 驱动器的后部。打开 FireWire 驱动器的电源。最后,打开每台 Linux 服务器的电源并确保将每台机器引导进入新的内核中。 </SPAN></P>
<P><SPAN class=bodycopy><B>注意:</B>在两个节点上执行引导的过程中,“查找新硬件”部分将提示 RHEL4 用户提供 FireWire 硬盘驱动器。只需选择选项“配置”来配置该设备并继续执行引导过程。如果“查找新硬件”部分中未提示您提供新的 FireWire 驱动器,您将需要运行以下命令并重新引导计算机: </SPAN></P><PRE># modprobe -r sbp2
# modprobe -r sd_mod
# modprobe -r ohci1394
# modprobe ohci1394
# modprobe sd_mod
# modprobe sbp2
# init 6
</PRE>
<P><SPAN class=bodycopy><B>加载 FireWire 堆栈:</B> </SPAN></P>
<P class=bodycopy>在大多数情况下,在 <TT><FONT face=新宋体>/etc/rc.sysinit</FONT></TT> 文件中已经对 FireWire 堆栈加载进行了配置。该文件中所包含的用于加载 FireWire 堆栈的命令是: </P><PRE># modprobe sbp2
# modprobe ohci1394
</PRE>
<P><SPAN class=bodycopy>在 Red Hat 的旧版本中,情况有所不同,必须手动运行这些命令或者将其包含在启动文件中。在 Red Hat Enterprise Linux 3 及更高版本中,这些命令已经包含在 <TT><FONT face=新宋体>/etc/rc.sysinit</FONT></TT> 文件中并在每次引导时运行。 </SPAN></P>
<P><SPAN class=bodycopy><B>检查 SCSI 设备:</B> </SPAN></P>
<P class=bodycopy>重新引导每台机器后,内核应该自动把该磁盘检测为 SCSI 设备 (<TT><FONT face=新宋体>/dev/sdXX</FONT></TT>)。本节将提供几个应该在集群的所有节点上运行的命令,以验证是否成功地检测到 FireWire 驱动器并由集群中所有节点所共享。 </P>
<P class=bodycopy>对于本配置而言,我同时在两个节点上执行上述过程。在过程完成后,我关闭两台机器,首先启动 <TT><FONT face=新宋体>linux1</FONT></TT>,然后启动 <TT><FONT face=新宋体>linux2</FONT></TT>。以下的命令和结果来自于我的 <TT><FONT face=新宋体>linux2</FONT></TT> 机器。同样,请确认您在两个节点上都运行了以下的命令,以确保两台机器都能登录到共享驱动器。 </P>
<P class=bodycopy>首先查看该 FireWire 适配器是否已被成功地检测到: </P><PRE><SPAN class=bodycopy><FONT size=-1># lspci
00:00.0 Host bridge:Intel Corporation 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface (rev 01)
00:02.0 VGA compatible controller:Intel Corporation 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device (rev 01)
00:1d.0 USB Controller:Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller:Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller:Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)
00:1d.7 USB Controller:Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge:Intel Corporation 82801 PCI Bridge (rev 81)
00:1f.0 ISA bridge:Intel Corporation 82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface:Intel Corporation 82801DB (ICH4) IDE Controller (rev 01)
00:1f.3 SMBus:Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 01)
00:1f.5 Multimedia audio controller:Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 01)
01:04:00.0 Ethernet controller:Linksys NC100 Network Everywhere Fast Ethernet 10/100 (rev 11)
<FONT color=#666666>01:06:00.0 FireWire (IEEE 1394):Texas Instruments TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)</FONT>
01:09.0 Ethernet controller:Broadcom Corporation BCM4401 100Base-T (rev 01)</FONT>
</SPAN></PRE>
<P><SPAN class=bodycopy>然后,查看是否已加载这些模块: </SPAN></P><PRE># lsmod |egrep "ohci1394|sbp2|ieee1394|sd_mod|scsi_mod"
sd_mod                 17217   0
sbp2                   23948   0
scsi_mod              121293  2 sd_mod,sbp2
ohci1394               35784  0
ieee1394              298228  2 sbp2,ohci1394
</PRE>
<P><SPAN class=bodycopy>第三步,确认已检测到磁盘并由内核创建了一个条目: </SPAN></P><PRE># cat /proc/scsi/scsi
Attached devices:
Host:scsi0 Channel:00 Id:01 Lun: 00
Vendor:Maxtor   Model:OneTouch II      Rev:023g
Type:Direct-Access                    ANSI SCSI revision: 06
</PRE>
<P><SPAN class=bodycopy>现在,我们将确认 FireWire 驱动器可以被多个登录所访问,并显示有效登录: </SPAN></P><PRE># dmesg | grep sbp2
sbp2:$Rev:1265 $ Ben Collins <bcollins@debian.org>
ieee1394:sbp2:Maximum concurrent logins supported: 2
ieee1394:sbp2:Number of active logins: 0
ieee1394:sbp2:Logged into SBP-2 device
</PRE>
<P><SPAN class=bodycopy>从以上输出中,可以看到我的 FireWire 驱动器能够支持多达 2 个服务器的并发登录。您的驱动器的芯片组应该支持 RAC 集群中所有节点的并发访问,这很重要。 </SPAN></P>
<P class=bodycopy>我喜欢执行的另一项测试是从集群中的每个节点上运行快速的 <TT><FONT face=新宋体>fdisk -l</FONT></TT>,以验证它确实被操作系统所接受。您的驱动器可能会显示该设备不包含有效的分区表,但就 RAC 配置的这一阶段而言,这样是完全可以的。</P><PRE># fdisk -l
Disk /dev/hda:40.0 GB, 40000000000 bytes
255 heads, 63 sectors/track, 4863 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *         1        13    104391   83  Linux
/dev/hda2              14        4863    38957625   8e  Linux LVM

Disk /dev/sda:300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sda1               1       36483   293049666    c  W95 FAT32 (LBA)
</PRE>
<P><SPAN class=bodycopy><B>不再需要重新扫描 SCSI 总线:</B> </SPAN></P>
<P class=bodycopy>在内核的旧版本中,我需要运行 rescan-scsi-bus.sh 脚本来检测 FireWire 驱动器。此脚本的目的是通过使用以下命令为节点创建 SCSI 项: </P><PRE>echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi
</PRE>
<P><SPAN class=bodycopy>在 RHEL3 和 RHEL4 中,不再需要该步骤,会自动检测到磁盘。 </SPAN></P>
<P><SPAN class=bodycopy><B>SCSI 设备检测方面的故障诊断:</B> </SPAN></P>
<P class=bodycopy>如果您在检测 SCSI 设备的任何步骤(如上所述)中遇到问题,可以尝试以下操作: </P><PRE># modprobe -r sbp2
# modprobe -r sd_mod
# modprobe -r ohci1394
# modprobe ohci1394
# modprobe sd_mod
# modprobe sbp2
</PRE>
<P><SPAN class=bodycopy>您可能还要拔下任何连接到服务器的 USB 设备。如果连接了 USB 设备,系统可能无法识别您的 FireWire 驱动器!</SPAN> </P>
<HR>

<P><!-- **************** [ 9 ] ************************************************************ --><A name=9></A><SPAN class=parahead1>9. 创建“oracle”用户和目录(在两个节点上)</SPAN> </P>
<P class=bodycopy><EM>在集群中的所有节点上执行以下任务!</EM> </P>
<P class=bodycopy>您将使用 OCFS2 存储 Oracle 集群件软件需要共享的文件。使用 OCFS2 时,集群中所有计算机上的 UNIX 用户 <TT><FONT face=新宋体>oracle</FONT></TT> 的 UID 以及 UNIX 组 <TT><FONT face=新宋体>dba</FONT></TT> 的 GID 都必须相同。如果 UID 或 GID 不同,则 OCFS 文件系统中的文件将显示为“unowned”,甚至可能被其他用户所拥有。对于本文而言,<TT><FONT face=新宋体>oracle</FONT></TT> UID 使用 175,<TT><FONT face=新宋体>dba</FONT></TT> GID 使用 115。 </P>
<P><SPAN class=bodycopy><B>创建 Oracle 的组和用户</B></SPAN></P>
<P class=bodycopy>让我们继续此示例,创建 Unix <TT><FONT face=新宋体>dba</FONT></TT> 组和 <TT><FONT face=新宋体>oracle</FONT></TT> 用户帐户以及所有相关目录。 </P><PRE># mkdir -p /u01/app
# groupadd -g 115 dba
# 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
</PRE>
<P class=bodycopy>注意:当您为每个 RAC 节点设置 Oracle 环境变量时,请确保为每个 RAC 节点分配唯一的 Oracle SID! 对于此示例,我使用: </P>
<UL>
<LI><SPAN class=bodycopy><TT><FONT face=新宋体>linux1</FONT></TT> :<TT><FONT face=新宋体>ORACLE_SID=orcl1</FONT></TT> </SPAN>
<LI><SPAN class=bodycopy><TT><FONT face=新宋体>linux2</FONT></TT> :<TT><FONT face=新宋体>ORACLE_SID=orcl2</FONT></TT></SPAN></LI></UL>
<P><SPAN class=bodycopy>在两个节点上都创建了“<TT><FONT face=新宋体>oracle</FONT></TT>”UNIX 用户 id 后,通过使用以下 <TT><FONT face=新宋体>.bash_profile</FONT></TT> 确保正确设置了环境:</SPAN> </P><PRE><SPAN class=bodycopy>
....................................

# .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

# Each RAC node must have a unique ORACLE_SID.(i.e. orcl1, orcl2,...)
export ORACLE_SID=orcl1

export PATH=.:${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</SPAN>

....................................
</PRE>
<P><A name="Create Mount Point for OCFS2 / Clusterware"></A><B class=boldbodycopy>为 OCFS2/集群件创建挂载点</B> </P>
<P><SPAN class=bodycopy>最后,为将用于存储两个 Oracle 集群件共享文件的 OCFS2 文件系统创建挂载点。需要以“root”用户帐户运行这些命令:</SPAN></P><PRE>$ su -
# mkdir -p /u02/oradata/orcl
# chown -R oracle:dba /u02
</PRE>
<P><SPAN class=bodycopy><B>确保为 OUI 提供足够的临时空间</B></SPAN></P>
<P><SPAN class=bodycopy><STRONG>注意:</STRONG>Oracle Universal Installer (OUI) 最多需要 /tmp 目录具有 400MB 可用空间。 </SPAN></P>
<P class=bodycopy>您可以运行以下命令查看 <TT><FONT face=新宋体>/tmp</FONT></TT> 中的可用空间: </P><PRE># cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/mapper/VolGroup00-LogVol01         partition       2031608 0       -1
</PRE>
<P class=bodycopy>— 或 —</P><PRE># cat /proc/meminfo | grep SwapTotal
SwapTotal:2031608 kB
</PRE>
<P class=bodycopy>如果由于某种原因,您在 <TT><FONT face=新宋体>/tmp</FONT></TT> 中没有足够的空间,您可以在其他文件系统中临时创建空间,并在安装期间将您的 <TT><FONT face=新宋体>TEMP</FONT></TT> 和 <TT><FONT face=新宋体>TMPDIR</FONT></TT> 指向该空间。以下是完成此操作的步骤:</P><PRE># su -
# mkdir /<AnotherFilesystem>/tmp
# chown root.root /<AnotherFilesystem>/tmp
# chmod 1777 /<AnotherFilesystem>/tmp
# export TEMP=/<AnotherFilesystem>/tmp     # used by Oracle
# export TMPDIR=/<AnotherFilesystem>/tmp   # used by Linux programs
#   like the linker "ld"
</PRE>
<P><SPAN class=bodycopy>当 Oracle 的安装完成时,您可以使用以下命令删除该临时目录: </SPAN></P><PRE># su -
# rmdir /<AnotherFilesystem>/tmp
# unset TEMP
# unset TMPDIR
</PRE>
<HR>

<P><!-- **************** [ 10 ] ************************************************************ --><A name=10></A><SPAN class=parahead1>10. 在共享的 FireWire 存储设备上创建分区</SPAN> </P>
<P><SPAN class=bodycopy><EM>仅在集群中的<STRONG>一个节点</STRONG>上创建以下分区!</EM> </SPAN></P>
<P class=bodycopy>接下来的步骤是在 FireWire(共享)驱动器上创建所需的分区。正如我在前面指出的,您将使用 OCFS2 来存储 Oracle 的集群件软件要共享的两个文件。然后,您将创建三个 ASM 卷;两个 ASM 卷用于所有物理数据库文件(数据/索引文件、联机重做日志文件、控制文件、SPFILE 和归档重做日志文件),另一个用于闪回恢复区。 </P>
<P class=bodycopy>下表列出了将要在 FireWire(共享)驱动器上创建的各个分区以及它们将包含的文件。 </P>
<P>
<TABLE class=bodycopy cellSpacing=1 cellPadding=3 align=center border=1>
<TBODY>
<TR>
<TD align=middle colSpan=6><B>Oracle 共享驱动器配置</B></TD></TR>
<TR>
<TD noWrap><B>文件系统类型</B></TD>
<TD noWrap><B>分区</B></TD>
<TD noWrap align=right><B>大小</B></TD>
<TD noWrap><B>挂载点</B></TD>
<TD noWrap><B>ASM 磁盘组名称</B></TD>
<TD noWrap><B>文件类型</B></TD></TR>
<TR>
<TD noWrap>OCFS2</TD>
<TD noWrap>/dev/sda1</TD>
<TD noWrap align=right>1GB</TD>
<TD noWrap>/u02/oradata/orcl</TD>
<TD noWrap></TD>
<TD noWrap>Oracle 集群注册表文件 — (~100MB)<BR>CRS 表决磁盘 — (~20MB)</TD></TR>
<TR>
<TD noWrap>ASM</TD>
<TD noWrap>/dev/sda2</TD>
<TD noWrap align=right>50GB</TD>
<TD noWrap>ORCL:VOL1</TD>
<TD noWrap>+ORCL_DATA1</TD>
<TD noWrap>Oracle 数据库文件</TD></TR>
<TR>
<TD noWrap>ASM</TD>
<TD noWrap>/dev/sda3</TD>
<TD noWrap align=right>50GB</TD>
<TD noWrap>ORCL:VOL2</TD>
<TD noWrap>+ORCL_DATA1</TD>
<TD noWrap>Oracle 数据库文件</TD></TR>
<TR>
<TD noWrap>ASM</TD>
<TD noWrap>/dev/sda4</TD>
<TD noWrap align=right>100GB</TD>
<TD noWrap>ORCL:VOL3</TD>
<TD noWrap>+FLASH_RECOVERY_AREA</TD>
<TD noWrap>Oracle 闪回恢复区</TD></TR>
<TR>
<TD noWrap><B>总计</B></TD>
<TD noWrap></TD>
<TD noWrap align=right><B>201GB</B></TD>
<TD noWrap></TD>
<TD noWrap></TD>
<TD noWrap></TD></TR></TBODY></TABLE></P>
<P class=boldbodycopy><STRONG>在 FireWire 共享存储器上创建所有分区</STRONG></P>
<P class=bodycopy>如上表中所示,我的 FireWire 驱动器显示为 SCSI 设备 /dev/sda。<TT><FONT face=新宋体>fdisk</FONT></TT> 命令用于创建(和删除)分区。对于此配置而言,我们将创建四个分区:一个分区用于 Oracle 的集群件共享文件,余下的三个分区用于 ASM(存储所有 Oracle 数据库文件和闪回恢复区)。在创建新分区之前,删除 FireWire 驱动器上的现有分区(如果有)是很重要的:</P><PRE># fdisk /dev/sda
Command (m for help):<B>p</B>

Disk /dev/sda:300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sda1               1       36483   293049666    c  W95 FAT32 (LBA)


Command (m for help):<B>d</B>
Selected partition 1

Command (m for help):<B>p</B>

Disk /dev/sda:300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System


Command (m for help):<B>n</B>
Command action
e   extended
p   primary partition (1-4)
<B>p</B>
Partition number (1-4): <B>1</B>
First cylinder (1-36483, default 1): <B>1</B>
Last cylinder or +size or +sizeM or +sizeK (1-36483, default 36483):<B>+1G</B>


Command (m for help):<B>n</B>
Command action
e   extended
p   primary partition (1-4)
<B>p</B>
Partition number (1-4): <B>2</B>
First cylinder (124-36483, default 124): <B>124</B>
Last cylinder or +size or +sizeM or +sizeK (124-36483, default 36483):<B>+50G</B>

Command (m for help):<B>n</B>
Command action
e   extended
p   primary partition (1-4)
<B>p</B>
Partition number (1-4): <B>3</B>
First cylinder (6204-36483, default 6204): <B>6204</B>
Last cylinder or +size or +sizeM or +sizeK (6204-36483, default 36483):<B>+50G</B>

Command (m for help):<B>n</B>
Command action
e   extended
p   primary partition (1-4)
<B>p</B>
Selected partition 4
First cylinder (12284-36483, default 12284): <B>12284</B>
Last cylinder or +size or +sizeM or +sizeK (12284-36483, default 36483):<B>+100G</B>

Command (m for help):<B>p</B>

Disk /dev/sda:300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sda1             1        123    987966   83  Linux
/dev/sda2            124      6203  48837600   83  Linux
/dev/sda3          6204     12283  48837600   83  Linux
/dev/sda4           12284       24442    97667167+  83  Linux

Command (m for help):<B>w</B>
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
</PRE>
<P class=bodycopy>在创建了所有必要分区后,现在应以 <TT><FONT face=新宋体>root</FONT></TT> 用户帐户使用以下语法将分区的更改情况通知给内核:</P><PRE># partprobe

# fdisk -l /dev/sda
Disk /dev/sda:300.0 GB, 300090728448 bytes
255 heads, 63 sectors/track, 36483 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sda1             1        123    987966   83  Linux
/dev/sda2            124      6203  48837600   83  Linux
/dev/sda3          6204     12283  48837600   83  Linux
/dev/sda4           12284       24442    97667167+  83  Linux
</PRE>
<P><SPAN class=bodycopy>(注意:FireWire 驱动器和所创建的分区将显示为 SCSI 设备。)</SPAN></P>

pub!1c 2006-2-17 12:47

<P><SPAN class=parahead1>11. 为 Oracle 配置 Linux 服务器</SPAN> </P>
<P><EM>在集群中的<STRONG>所有节点</STRONG>上执行下列配置过程!</EM> </P>
<P>每次启动计算机时,都需要在集群中的每个节点上执行本节中的一些命令。本节详细介绍了如何设置共享内存、信号和文件句柄限制。<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_2.html#14">第 14 节</A>(“用于每个 RAC 节点的所有启动命令”)中包含有关如何将这些命令置于启动脚本 (/etc/sysctl.conf) 中的说明。 </P>
<P><B>概述</B> </P>
<P>本节主要介绍了如何配置两个 Linux 服务器:使每个服务器为 Oracle RAC 10<I>g</I> 安装做好准备。这包括验证足够的交换空间、设置共享内存和信号,以及最后如何设置操作系统的最大文件句柄数。 </P>
<P>在本节中,您将注意到可以使用多种方法来配置(设置)这些参数。就本文而言,我将通过把所有命令置于 /etc/sysctl.conf 文件中使所有更改永久有效(通过重新引导)。 </P>
<P><B>对交换空间的考虑因素</B> </P>
<UL class=bodycopy>
<LI>安装 Oracle10<I>g</I> 第 2 版至少需要 512MB 内存。(注:安装期间交换容量不足会导致 Oracle Universal Installer“挂起”或“死机”)
<LI>要检查您已经分配的内存/交换容量,键入: <PRE># cat /proc/meminfo | grep MemTotal
MemTotal:1034352 kB
</PRE>
<LI>如果您的内存少于 512MB(介于 RAM 与 SWAP 之间),您可以通过创建临时交换文件添加临时交换空间。这样,您就不必使用原始设备甚至更彻底地重建系统了。
<P>以 root 身份创建一个用作额外交换空间的文件,假设大小为 300MB:<BR><BR><TT><FONT face=新宋体># dd if=/dev/zero of=tempswap bs=1k count=300000</FONT></TT> </P>
<P>现在我们应该更改文件的权限:<BR><BR><TT><FONT face=新宋体># chmod 600 tempswap</FONT></TT> </P>
<P>最后我们将该“分区”格式化为交换分区,并将其添加到交换空间:<BR><BR><TT><FONT face=新宋体># mke2fs tempswap<BR># mkswap tempswap<BR># swapon tempswap<BR></FONT></TT></P></LI></UL>
<P><B>设置共享内存</B> </P>
<P>共享内存通过将通用的结构和数据放在共享内存段中,使得进程可以对它们进行访问。这是现有最快的进程间通信 (IPC) 方式,主要是因为数据在进程之间传递时没有涉及内核操作。不需要在进程间复制数据。 </P>
<P>Oracle 将共享内存用于它的共享全局区 (SGA),这是一个由所有的 Oracle 备份进程及前台进程共享的内存区域。为 SGA 分配足够的容量对于 Oracle 的性能非常重要,这是因为它负责保存数据库缓冲区高速缓存、共享 SQL、访问路径,等等。 </P>
<P>要确定所有共享内存的限制,使用以下命令: </P><PRE># 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
</PRE>
<BLOCKQUOTE><B>设置 SHMMAX</B>
<P><TT><FONT face=新宋体>SHMMAX</FONT></TT> 参数定义共享内存段的最大大小(以字节为单位)。Oracle SGA 由共享内存组成,且错误设置 <TT><FONT face=新宋体>SHMMAX</FONT></TT> 可能会限制 SGA 的大小。在设置 <TT><FONT face=新宋体>SHMMAX</FONT></TT> 时,切记 SGA 的大小应该适合于一个共享内存段。<TT><FONT face=新宋体>SHMMAX</FONT></TT> 设置不足可能会导致以下问题:</P><PRE>ORA-27123:unable to attach to shared memory segment
</PRE>您可以通过执行以下命令确定 <TT><FONT face=新宋体>SHMMAX</FONT></TT> 的值: <PRE># cat /proc/sys/kernel/shmmax
33554432
</PRE><TT><FONT face=新宋体>SHMMAX</FONT></TT> 的默认值为 32MB。通常,这个值对于配置 Oracle SGA 而言太小了。我通常使用以下方法将 <TT><FONT face=新宋体>SHMMAX</FONT></TT> 参数设置为 2GB:
<UL class=bodycopy>
<LI>可以通过使用以下命令直接更改 <TT><FONT face=新宋体>/proc</FONT></TT> 文件系统 (<TT><FONT face=新宋体>/proc/sys/kernel/shmmax</FONT></TT>) 来更改 <TT><FONT face=新宋体>SHMMAX</FONT></TT> 的默认设置,而不必重新引导计算机: <PRE># sysctl -w kernel.shmmax=2147483648
</PRE>
<P></P>
<LI>然后,通过将该内核参数插入到 <TT><FONT face=新宋体>/etc/sysctl.conf</FONT></TT> 启动文件中,您可以使该更改永久有效: <PRE># echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf
</PRE></LI></UL>
<P><B>设置 SHMMNI</B> </P>
<P>我们现在看一下 <TT><B><FONT face=新宋体>SHMMNI</FONT></B></TT> 参数。这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 <TT><FONT face=新宋体>4096</FONT></TT>。 </P>
<P>可以通过执行以下命令确定 <TT><FONT face=新宋体>SHMMNI</FONT></TT> 的值: </P><PRE># cat /proc/sys/kernel/shmmni
4096
</PRE><TT><FONT face=新宋体>SHMMNI</FONT></TT> 的默认设置应足以满足 Oracle RAC 10<I>g</I> 第 2 版安装的需要。
<P><STRONG>设置 SHMALL</STRONG> </P>
<P>最后,我们来看 <TT><FONT face=新宋体>SHMALL</FONT></TT> 共享内存内核参数。该参数控制系统一次可以使用的共享内存总量(以页为单位)。简言之,该参数的值始终应至少为: </P><PRE>ceil(SHMMAX/PAGE_SIZE)
</PRE><TT><FONT face=新宋体>SHMALL</FONT></TT> 的默认大小为 2097152,并可以使用以下命令进行查询: <PRE># cat /proc/sys/kernel/shmall
2097152
</PRE><TT><FONT face=新宋体>SHMALL</FONT></TT> 的默认设置应足以满足 Oracle RAC 10<I>g</I> 第 2 版安装的需要。
<P>(注:i386 平台上的 Red Hat Linux 中的页面大小为 4,096 字节。但您可以使用 <TT><FONT face=新宋体>bigpages</FONT></TT>,它支持更大内存页面的配置。) </P></BLOCKQUOTE>
<P><B>设置信号</B> </P>
<P>至此,您已经配置了共享内存设置,接下来将配置信号。对“信号”的最佳描述是,它是用于在共享资源(如共享内存)的进程(或进程中的线程)之间提供同步的计数器。UNIX System V 支持信号集,其中的每个信号都是一个计数信号。当应用程序请求信号时,它使用“集合”来完成此工作。 </P>
<P>要确定所有信号限制,使用以下命令:</P><PRE># 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
</PRE>
<P>您还可以使用以下命令: </P><PRE># cat /proc/sys/kernel/sem
250     32000   32      128
</PRE>
<BLOCKQUOTE><B>设置 SEMMSL</B>
<P><TT><FONT face=新宋体>SEMMSL</FONT></TT> 内核参数用于控制每个信号集合的最大信号数。 </P>
<P>Oracle 建议将 <TT><FONT face=新宋体>SEMMSL</FONT></TT> 设置为 <TT><FONT face=新宋体>init.ora</FONT></TT> 文件(适用于 Linux 系统上所有数据库)中的最大 PROCESS 实例参数设置再加上 10。此外,Oracle 建议将 <TT><FONT face=新宋体>SEMMSL</FONT></TT> 设置为不小于 100。 </P>
<P><B>设置 SEMMNI</B> </P>
<P><TT><FONT face=新宋体>SEMMNI</FONT></TT> 内核参数用于控制整个 Linux 系统中信号集的最大数量。Oracle 建议将 <TT><FONT face=新宋体>SEMMNI</FONT></TT> 设置为不小于 100。 </P>
<P><B>设置 SEMMNS</B> </P>
<P><TT><FONT face=新宋体>SEMMNS</FONT></TT> 内核参数用于控制整个 Linux 系统中的信号(而非信号集)的最大数量。 </P>
<P>Oracle 建议将 <TT><FONT face=新宋体>SEMMNS</FONT></TT> 设置为系统上每个数据库的 <TT><FONT face=新宋体>PROCESSES</FONT></TT> 实例参数设置之和,加上最大的 <TT><FONT face=新宋体>PROCESSES</FONT></TT> 的两倍,最后为系统上的每个 Oracle 数据库加上 10。 </P>
<P>使用以下计算式确定可以在 Linux 系统上分配的信号的最大数量。它将是以下两者中较小的一个值: </P><PRE>SEMMNS  — 或 — (SEMMSL * SEMMNI) 。
</PRE>
<P><B>设置 SEMOPM</B> </P>
<P><TT><FONT face=新宋体>SEMOPM</FONT></TT> 内核参数用于控制每个 <TT><FONT face=新宋体>semop</FONT></TT> 系统调用可以执行的信号操作数。 </P>
<P><TT><FONT face=新宋体>semop</FONT></TT> 系统调用(函数)能够使用一个 <TT><FONT face=新宋体>semop</FONT></TT> 系统调用完成多个信号的操作。一个信号集可以拥有每个信号集中最大数量的 <TT><FONT face=新宋体>SEMMSL</FONT></TT>,因此建议将 <TT><FONT face=新宋体>SEMOPM</FONT></TT> 设置为等于 <TT><FONT face=新宋体>SEMMSL</FONT></TT>。 </P>
<P>Oracle 建议将 <TT><FONT face=新宋体>SEMOPM</FONT></TT> 设置为不小于 100。 </P>
<P><B>设置信号内核参数</B> </P>
<P>最后,我们来看如何使用一些方法来设置所有信号参数。在下文中,我想更改(增加)的唯一参数是 <TT><FONT face=新宋体>SEMOPM</FONT></TT>。所有其他的默认设置可以完全满足我们的示例安装。 </P>
<UL class=bodycopy>
<LI>可以通过使用以下命令直接更改 <TT><FONT face=新宋体>/proc</FONT></TT> 文件系统 (<TT><FONT face=新宋体>/proc/sys/kernel/sem</FONT></TT>) 来更改所有信号设置的默认设置,而不必重新引导计算机: <PRE># sysctl -w kernel.sem="250 32000 100 128"</PRE>
<LI>然后,通过将该内核参数插入到 <TT><FONT face=新宋体>/etc/sysctl.conf</FONT></TT> 启动文件中,您可以使这种更改永久有效: <PRE># echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
</PRE></LI></UL></BLOCKQUOTE>
<P><B>设置文件句柄</B> </P>
<BLOCKQUOTE>
<P>在配置我们的 Red Hat Linux 服务器时,确保文件句柄的最大数量足够大是非常关键的。文件句柄的设置表示您在 Linux 系统上可以打开的文件数。 </P>
<P>使用以下命令来确定整个系统中文件句柄的最大数量: </P><PRE># cat /proc/sys/fs/file-max
102563
</PRE>Oracle 建议将整个系统的文件句柄值至少设置为 <TT><FONT face=新宋体>65536</FONT></TT>。
<UL class=bodycopy>
<LI>可以通过使用以下命令直接更改 <TT><FONT face=新宋体>/proc</FONT></TT> 文件系统 (<TT><FONT face=新宋体>/proc/sys/fs/file-max</FONT></TT>) 更改文件句柄最大数量的默认设置,不必重新引导计算机: <PRE># sysctl -w fs.file-max=65536
</PRE>
<P></P>
<LI>然后,通过将该内核参数插入到 <TT><FONT face=新宋体>/etc/sysctl.conf</FONT></TT> 启动文件中,您可以使这种更改永久有效: <PRE># echo "fs.file-max=65536" >> /etc/sysctl.conf
</PRE></LI></UL>可以通过使用以下命令查询文件句柄的当前使用情况: <PRE># cat /proc/sys/fs/file-nr
825     0       65536
</PRE>file-nr 文件显示了三个参数:分配的文件句柄总数、当前使用的文件句柄数以及可以分配的最大文件句柄数。
<P>(注:如果需要增大 /proc/sys/fs/file-max 中的值,请确保正确设置 ulimit。对于 2.4.20,通常将其设置为 unlimited。使用 ulimit 命令验证 <TT><FONT face=新宋体>ulimit</FONT></TT> 设置:</P><PRE># ulimit
unlimited
</PRE></BLOCKQUOTE>
<HR>

<P><!-- **************** [ 12 ] ************************************************************ --><A name=12></A><SPAN class=parahead1>12. 配置 hangcheck-timer 内核模块</SPAN> </P>
<P><EM>在集群中的<STRONG>所有节点</STRONG>上执行下列配置过程!</EM> </P>
<P>Oracle9<EM>i</EM> 第 1 版 (9.0.1) 和 Oracle9<EM>i</EM> 第 2 版 ( 9.2.0.1) 使用一个称为 <TT><FONT face=新宋体>watchdogd</FONT></TT> 的用户空间<I>监视后台程序</I> 监视集群的运行状况,并在出现故障时重新启动 RAC 节点。从 Oracle9<EM>i</EM> 第 2 版 (9.2.0.2) 开始(在 Oracle 10<I>g</I> 第 2 版中仍然存在),一个称为 <TT><FONT face=新宋体>hangcheck-timer</FONT></TT> 的 Linux 内核模块取代了监视后台程序,该模块更好地解决了可用性和可靠性问题。它将 <TT><FONT face=新宋体>hang-check</FONT></TT> 计时器加载到 Linux 内核中并检查系统是否挂起。它将设置一个计时器,并在特定的时间量之后检查该计时器。有一个用于<TT><FONT face=新宋体>检查挂起</FONT></TT>情况的可配置阈值,如果超过该阈值,计算机将重新启动。尽管 Oracle 集群件(<I>集群管理器</I>)操作不需要 <TT><FONT face=新宋体>hangcheck-timer</FONT></TT> 模块,但 Oracle 强烈建议使用它。 </P>
<P><STRONG>hangcheck-timer.ko 模块</STRONG> </P>
<P>hangcheck-timer 模块使用了一个基于内核的计时器,该计时器周期性地检查系统任务调度程序来捕获延迟,从而确定系统的运行状况。如果系统挂起或暂停,则计时器重置该节点。hangcheck-timer 模块使用时间戳计数器 (TSC) CPU 寄存器,该寄存器每接收到一个时钟信号就将计数加一。由于此寄存器由硬件自动更新,因此 TCS 提供了更精确的时间度量。 </P>
<P>关于 hangcheck-timer 项目的更多信息可在<A class=bodylink href="http://oss.oracle.com/projects/hangcheck-timer/" target=_blank>此处</A>找到。 </P>
<P><STRONG>安装 hangcheck-timer.ko 模块</STRONG> </P>
<P>hangcheck-timer 最初只由 Oracle 提供;但是,从内核版本 2.4.9-e.12 和更高版本开始,此模块现在包含在 Red Hat Linux 中。如果您按照<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#8">第 8 节</A>(“获取并安装新的 Linux 内核/FireWire 模块”)中的步骤执行操作,则已经包含了 hangcheck-timer。使用以下命令确认: </P><PRE># find /lib/modules -name "hangcheck-timer.ko"
/lib/modules/2.6.9-11.0.0.10.3.EL/kernel/drivers/char/hangcheck-timer.ko
/lib/modules/2.6.9-22.EL/kernel/drivers/char/hangcheck-timer.ko
</PRE>
<P>在以上输出中,我们关注的是 <TT><FONT face=新宋体>/lib/modules/2.6.9-11.0.0.10.3.EL/kernel/drivers/char</FONT></TT> 目录中的 hangcheck 计时器对象 (<TT><FONT face=新宋体>hangcheck-timer.ko</FONT></TT>)。 </P>
<P><STRONG>配置并加载 <TT><FONT face=新宋体>hangcheck-timer</FONT></TT> 模块</STRONG> </P>
<P><TT><FONT face=新宋体>hangcheck-timer</FONT></TT> 模块有两个关键的参数: </P>
<UL class=bodycopy>
<LI><TT><B><FONT face=新宋体>hangcheck-tick</FONT></B></TT>:此参数定义了系统运行状况检查的间隔时间。默认值为 60 秒;Oracle 建议将它设置为 30 秒。
<LI><TT><B><FONT face=新宋体>hangcheck-margin</FONT></B></TT>:此参数定义了 hangcheck-timer 在重置 RAC 节点前所容许的最大挂起延迟。它定义了以秒为单位的误差幅度。默认值为 180 秒;Oracle 建议将它设置为 180 秒。 </LI></UL>
<P><STRONG>注意:</STRONG>这两个 <TT><FONT face=新宋体>hangcheck-timer</FONT></TT> 模块参数表示在该模块重置系统前 RAC 节点必须挂起的时长。当以下条件为真时将会重置节点: </P><PRE>系统挂起时间 > (hangcheck_tick + hangcheck_margin)
</PRE>
<P><STRONG>配置 Hangcheck 内核模块参数</STRONG> </P>
<P>每次加载 hangcheck-timer 内核模块(手动加载或由 Oracle 加载)时,它都需要知道对我们刚刚讨论的两个参数(<I>hangcheck-tick</I> 和 <I>hangcheck-margin</I>) 所使用的值。这些值需要在每次重新启动 Linux 服务器后可用。为此,在 <TT><FONT face=新宋体>/etc/modprobe.conf</FONT></TT> 文件中创建一个具有正确值的条目,如下所示:</P><PRE># su -
# echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modprobe.conf
</PRE>
<P>每次加载 hangcheck-timer 内核模块时,它将使用由我在 <TT><FONT face=新宋体>/etc/modprobe.conf</FONT></TT> 文件中创建的条目定义的值。 </P>
<P><STRONG>手动加载 Hangcheck 内核模块以进行测试</STRONG> </P>
<P>Oracle 负责在需要时加载 hangcheck-timer 内核模块。因此,不必在任何启动文件(如 <TT><FONT face=新宋体>/etc/rc.local</FONT></TT>)中执行 hangcheck-timer 内核模块的 <TT><FONT face=新宋体>modprobe</FONT></TT> 或 <TT><FONT face=新宋体>insmod</FONT></TT>。 </P>
<P>我继续在 <TT><FONT face=新宋体>/etc/rc.local</FONT></TT> 文件中包含 hangcheck-timer 内核模块的 <TT><FONT face=新宋体>modprobe</FONT></TT> 完全只是出于个人习惯。有朝一日我将戒掉这个习惯,但请注意,启动过程中包含 hangcheck-timer 内核模块的 <TT><FONT face=新宋体>modprobe</FONT></TT> 并无害处。 </P>
<P>为了使自己保持清醒并能够在夜晚安睡,我始终按如下所示在每次启动时配置 hangcheck-timer 内核的加载: </P><PRE># echo "/sbin/modprobe hangcheck-timer" >> /etc/rc.local
</PRE>
<P>(注:您不必在每次重新启动后使用 <TT><FONT face=新宋体>modprobe</FONT></TT> 或 <TT><FONT face=新宋体>insmod</FONT></TT> 手动加载 hangcheck-timer 内核模块。Oracle 将在需要时自动加载 <TT><FONT face=新宋体>hangcheck-timer</FONT></TT> 模块。) </P>
<P>现在,为了测试 hangcheck-timer 内核模块以验证它是否选取我们在 <TT><FONT face=新宋体>/etc/modprobe.conf</FONT></TT> 文件中定义的正确参数,使用 <TT><FONT face=新宋体>modprobe</FONT></TT> 命令。尽管可以通过向其传递相应的参数(如 <TT><FONT face=新宋体>insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180</FONT></TT>)加载 <TT><FONT face=新宋体>hangcheck-timer</FONT></TT> 内核模块,但我们需要验证它是否选取了我们在 <TT><FONT face=新宋体>/etc/modprobe.conf</FONT></TT> 文件中设置的选项。 </P>
<P>要手动加载 hangcheck-timer 内核模块并验证它是否使用在 <TT><FONT face=新宋体>/etc/modprobe.conf</FONT></TT> 文件中定义的正确值,运行以下命令: </P><PRE><FONT size=-1># su -
# modprobe hangcheck-timer
# grep Hangcheck /var/log/messages | tail -2
Sep 27 23:11:51 linux2 kernel:Hangcheck:starting hangcheck timer 0.5.0 (tick is 30 seconds, margin is 180 seconds)</FONT>
</PRE>
<P></P>
<HR>

<P><!-- **************** [ 13 ] ************************************************************ --><A name=13></A><A name="Configuring RAC Nodes for Remote Access"></A><SPAN class=parahead1>13. 配置 RAC 节点以进行远程访问</SPAN> </P>
<P><EM>在集群中的<STRONG>所有节点</STRONG>上执行下列配置过程!</EM> </P>
<P>在 RAC 节点上运行 Oracle Universal Installer 时,它将使用 <TT><FONT face=新宋体>rsh</FONT></TT>(或 <TT><FONT face=新宋体>ssh</FONT></TT>)命令将 Oracle 软件复制到 RAC 集群中的所有其他节点上。运行 Oracle Installer (<TT><FONT face=新宋体>runInstaller</FONT></TT>) 的节点上的 <TT><FONT face=新宋体>oracle</FONT></TT> UNIX 帐户必须为 RAC 集群中的所有其他节点所信任。因此,您应该能够在将要从中运行 Oracle Installer 的 Linux 服务器上,不使用口令对集群中的所有其他 Linux 服务器运行 <I>r*</I> 命令(如 <TT><FONT face=新宋体>rsh</FONT></TT>、<TT><FONT face=新宋体>rcp</FONT></TT> 和 <TT><FONT face=新宋体>rlogin</FONT></TT>)。rsh 后台程序使用位于用户(oracle 的)主目录中的 <TT><FONT face=新宋体>/etc/hosts.equiv</FONT></TT> 文件或 <TT><FONT face=新宋体>.rhosts</FONT></TT> 文件验证用户。(正常的 RAC 操作不需要使用 <TT><FONT face=新宋体>rcp</FONT></TT> 和 <TT><FONT face=新宋体>rsh</FONT></TT>。但应为 RAC 和补丁集安装启用 <TT><FONT face=新宋体>rcp</FONT></TT> 和 <TT><FONT face=新宋体>rsh</FONT></TT>。) </P>
<P>Oracle 在 Oracle RAC 10<I>g</I> 第 1 版中增加了一项支持,即可以将安全 Shell (SSH) 工具套件用于设置用户等效项。但本文使用较旧的方法 <TT><FONT face=新宋体>rcp</FONT></TT> 将 Oracle 软件复制到集群中的其他节点上。使用 SSH 工具套件时,可以使用 <TT><FONT face=新宋体>scp</FONT></TT>(与 <TT><FONT face=新宋体>rcp</FONT></TT> 相反)命令以非常安全的方式复制软件。 </P>
<P>首先,确保在 RAC 集群中的每个节点上都安装了 <TT><FONT face=新宋体>rsh</FONT></TT> RPM:</P><PRE># rpm -q rsh rsh-server
rsh-0.17-25.3
rsh-server-0.17-25.3
</PRE>
<P>根据以上信息,我们可以确认已经安装了 <TT><FONT face=新宋体>rsh</FONT></TT> 和 <TT><FONT face=新宋体>rsh-server</FONT></TT>。如果未安装 <TT><FONT face=新宋体>rsh</FONT></TT>,则可以从 RPM 所在的 CD 中运行以下命令: </P><PRE># su -
# rpm -ivh rsh-0.17-25.3.i386.rpm rsh-server-0.17-25.3.i386.rpm
</PRE>
<P>要启用“rsh”和“rlogin”服务,必须将 <TT><FONT face=新宋体>/etc/xinetd.d/rsh</FONT></TT> 文件中的“disable”属性设置为“<TT><FONT face=新宋体>no</FONT></TT>”并且必须重新加载 <TT><B><FONT face=新宋体>xinetd</FONT></B></TT>。为此,在集群中的<STRONG>所有节点</STRONG>上运行以下命令: </P><PRE># su -
# chkconfig rsh on
# chkconfig rlogin on
# service xinetd reload
Reloading configuration:[  OK  ]
</PRE>
<P>要使“oracle”UNIX 用户帐户在 RAC 节点中获得信任,在集群中的<STRONG>所有节点</STRONG>上创建 <TT><FONT face=新宋体>/etc/hosts.equiv</FONT></TT> 文件: </P><PRE># su -
# touch /etc/hosts.equiv
# chmod 600 /etc/hosts.equiv
# chown root.root /etc/hosts.equiv
</PRE>
<P>现在,将所有 RAC 节点添加到集群中类似于以下示例的<STRONG>所有节点</STRONG>的 <TT><FONT face=新宋体>/etc/hosts.equiv</FONT></TT> 文件中: </P><PRE># cat /etc/hosts.equiv
+linux1 oracle
+linux2 oracle
+int-linux1 oracle
+int-linux2 oracle
</PRE>
<P>注意:在以上示例中,第二个字段只允许 <TT><FONT face=新宋体>oracle</FONT></TT> 用户帐户在指定节点上运行 <TT><FONT face=新宋体>rsh</FONT></TT> 命令。由于安全原因,<TT><FONT face=新宋体>/etc/hosts.equiv</FONT></TT> 文件应该由 <TT><FONT face=新宋体>root</FONT></TT> 所拥有,并应该将权限设置为 <TT><FONT face=新宋体>600</FONT></TT>。实际上,某些系统只有在文件所有者为 <TT><FONT face=新宋体>root</FONT></TT> 且权限设置为 <TT><FONT face=新宋体>600</FONT></TT> 时,才接受此文件的内容。 </P>
<P>尝试测试 <TT><FONT face=新宋体>rsh</FONT></TT> 命令前,确保使用的是正确版本的 <TT><FONT face=新宋体>rsh</FONT></TT>。在默认情况下,Red Hat Linux 将 <TT><FONT face=新宋体>/usr/kerberos/sbin</FONT></TT> 放在 <TT><FONT face=新宋体>$PATH</FONT></TT> 变量的前面。这会导致执行 <TT><FONT face=新宋体>rsh</FONT></TT> 的 Kerberos 版本。 </P>
<P>我通常会重命名 <TT><FONT face=新宋体>rsh</FONT></TT> 的 Kerberos 版本,以便使用正常的 <TT><FONT face=新宋体>rsh</FONT></TT> 命令。使用以下命令: </P><PRE># 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
</PRE>
<P>现在,应从将要执行 Oracle 集群件和 10g RAC 安装的节点测试连接并运行 <TT><FONT face=新宋体>rsh</FONT></TT> 命令。我将使用节点 <TT><FONT face=新宋体>linux1</FONT></TT> 执行所有安装,因此我将从该节点运行以下命令: </P><PRE># su - oracle

$ rsh linux1 ls -l /etc/hosts.equiv
-rw-------  1 root  root  68 Sep 27 23:37 /etc/hosts.equiv

$ rsh int-linux1 ls -l /etc/hosts.equiv
-rw-------  1 root  root  68 Sep 27 23:37 /etc/hosts.equiv

$ rsh linux2 ls -l /etc/hosts.equiv
-rw-------  1 root  root  68 Sep 27 23:37 /etc/hosts.equiv

$ rsh int-linux2 ls -l /etc/hosts.equiv
-rw-------  1 root  root  68 Sep 27 23:37 /etc/hosts.equiv
</PRE>
<P></P>
<HR>

<P><!-- **************** [ 14 ] ************************************************************ --><A name=14></A><SPAN class=parahead1>14. 适用于每个 RAC 节点的所有启动命令</SPAN> </P>
<P><EM>验证以下启动命令是否包含在集群中的<STRONG>所有节点</STRONG>上!</EM> </P>
<P>至此,您已经详细了解了需要在 Oracle10<I>g</I> RAC 配置的所有节点上配置的参数和资源。在本部分中,我们将稍事调整,简要复述这些参数、命令和条目(在本文前面的章节中已提到过),当引导计算机时需要在每个节点上执行它们。 </P>
<P>对于以下的每个启动文件,都应将<FONT color=#666666>灰色</FONT>的条目包含在每个启动文件中。 </P>
<P><B>/etc/modprobe.conf</B> </P>
<P><I>(所有要由内核模块使用的参数和值。)</I> </P><PRE>alias eth0 b44
alias eth1 tulip
alias snd-card-0 snd-intel8x0
options snd-card-0 index=0
alias usb-controller ehci-hcd
alias usb-controller1 uhci-hcd
<FONT color=#666666>options sbp2 exclusive_login=0
alias scsi_hostadapter sbp2
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180</FONT>
</PRE>
<P><STRONG>/etc/sysctl.conf</STRONG> </P>
<P><I>(我们需要调整互联的默认和最大发送缓冲区大小以及默认和最大的接收缓冲区大小。)该文件还包含那些负责配置由 Oracle 实例使用的共享内存、信号和文件句柄的参数。)</I> </P><PRE># 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

<FONT color=#666666># 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</FONT>

<FONT color=#666666># +---------------------------------------------------------+
# | 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</FONT>
</PRE>
<P><STRONG>/etc/hosts</STRONG> </P>
<P><I>(RAC 集群中的节点的所有计算机/IP 条目。)</I> </P><PRE># Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1        localhost.localdomain   localhost
<FONT color=#666666># Public Network - (eth0)
192.168.1.100    linux1
192.168.1.101   linux2
# Private Interconnect - (eth1)
192.168.2.100   int-linux1
192.168.2.101    int-linux2
# Public Virtual IP (VIP) addresses for - (eth0)
192.168.1.200    vip-linux1
192.168.1.201    vip-linux2</FONT>
192.168.1.106    melody
192.168.1.102    alex
192.168.1.105    bartman
</PRE>
<P><STRONG>/etc/hosts.equiv</STRONG> </P>
<P><I>(允许以 <TT><FONT face=新宋体>oracle</FONT></TT> 用户帐户登录每个节点而不需要口令。)</I> </P><PRE><FONT color=#666666>+linux1 oracle
+linux2 oracle
+int-linux1 oracle
+int-linux2 oracle</FONT>
</PRE>
<P><STRONG>/etc/rc.local</STRONG> </P>
<P><I>(加载 hangcheck-timer 内核模块。)</I> </P><PRE>#!/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

<FONT color=#666666># +---------------------------------------------------------+
# | HANGCHECK TIMER                                         |
# | (I do not believe this is required, but doesn't hurt)   |
# ----------------------------------------------------------+

/sbin/modprobe hangcheck-timer</FONT>
</PRE>
<P></P>
<HR>

<P><!-- **************** [ 15 ] ************************************************************ --><A name=15></A><SPAN class=parahead1>15. 检查 Oracle 10<I>g</I> 第 2 版的 RPM 程序包</SPAN> </P>
<P><EM>在集群中的<STRONG>所有节点</STRONG>上执行以下检查!</EM> </P>
<P>安装 Linux O/S(CentOS Enterprise Linux 或 RHEL4)时,应确保安装了所有必需的 RPM。如果您遵循我所提供的 Linux 安装指导,则已经安装了<I>所有内容</I>,这时您将拥有所有必需的 RPM 程序包。但如果您执行了其他安装类型(例如,高级服务器),则可能缺少某些程序包并需要安装它们。所有必需的 RPM 都位于 Linux CD/ISO 上。 </P>
<P><STRONG>检查必需的 RPM</STRONG> </P>
<P>必须安装以下程序包(或更高版本): </P><PRE>make-3.80-5
glibc-2.3.4-2.9
glibc-devel-2.3.4-2.9
glibc-headers-2.3.4-2.9
glibc-kernheaders-2.4-9.1.87
cpp-3.4.3-22.1
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-libstdc++-296-2.96-132.7.2
openmotif-2.2.3-9.RHEL4.1
setarch-1.6-1
</PRE>
<P>要查询程序包信息(例如,gcc 和 glibc-devel),使用“<TT><FONT face=新宋体>rpm -q <程序包名> [, <程序包名>]</FONT></TT>”命令,如下所示:</P><PRE># rpm -q gcc glibc-devel
gcc-3.4.3-22.1
glibc-devel-2.3.4-2.9
</PRE>
<P>如果需要安装以上任意程序包,使用“<TT><FONT face=新宋体>rpm -Uvh <程序包名.rpm></FONT></TT>”。例如,要安装 GCC 3.2.3-24 程序包,使用: </P><PRE># rpm -Uvh gcc-3.4.3-22.1.i386.rpm
</PRE>
<P><STRONG>重新启动系统</STRONG> </P>
<P>如果对 O/S 进行了任何更改,则在尝试安装任何 Oracle 组件之前应重新引导集群中的所有节点。!!!</P><PRE># init 6
</PRE>
<P></P>
<HR>

<P><!-- **************** [ 16 ] ************************************************************ --><A name=16></A><SPAN class=parahead1>16. 安装和配置 OCFS2</SPAN> </P>
<P><EM>应在集群中的<STRONG>所有节点</STRONG>上执行本节中的<STRONG>大多数</STRONG>配置过程!但创建 OCFS2 文件系统应只在集群中的<STRONG>一个节点</STRONG>上执行。</EM> </P>
<P>现在将安装 OCFS2。OCFS2 是一个集群文件系统,它允许集群中的所有节点通过标准文件系统接口并发访问设备。这样便可以对需要在集群中运行的应用程序进行轻松地管理。 </P>
<P>OCFS 第 1 版于 2002 年发布,使 Oracle RAC 用户可以运行集群化数据库而不必处理 RAW 设备。文件系统是为存储数据库相关文件如数据文件、控制文件、重做日志、归档日志等设计的。而 OCFS2 则是作为一个通用集群文件系统而设计的。使用它,用户不但可以在共享磁盘上存储与数据库相关的文件,而且还可以存储 Oracle 二进制文件和配置文件(共享的 Oracle Home),从而使 RAC 的管理变得更简单。 </P>
<P>在本指南中,您将使用 OCFS2 存储需要由 Oracle 集群件软件共享的两个文件。<I>(除了这两个文件以外,您还将使用此空间存储所有 Oracle RAC 实例的共享 SPFILE。)</I> </P>
<P>有关适用于 Linux 的 OCFS2 的更多信息(包括安装说明),请参见<A class=bodylink href="http://oss.oracle.com/projects/ocfs2/documentation/" target=_blank>本页面</A>。 </P>
<P><B>下载 OCFS</B> </P>
<P>首先,下载 OCFS2 发布版本。OCFS2 发布版本包含两组 RPM,即内核模块和工具。内核模块可以从 <A class=bodylink href="http://oss.oracle.com/projects/ocfs2/files/" target=_blank>[url]http://oss.oracle.com/projects/ocfs2/files/[/url]</A> 下载,而工具可以从 <A class=bodylink href="http://oss.oracle.com/projects/ocfs2-tools/files/" target=_blank>[url]http://oss.oracle.com/projects/ocfs2-tools/files/[/url]</A> 下载。 </P>
<P>从关键的 OCFS2 内核模块(驱动程序)开始,下载相应的 RPM。从三个可用的内核模块(如下所示)中,下载与发布版本、平台、内核版本以及内核风格(smp、hugemem、psmp 等)匹配的内核模块。 </P>
<P><A class=bodylink href="http://oss.oracle.com/projects/ocfs2/dist/files/RedHat/RHEL4/i386/1.0.4-1/ocfs2-2.6.9-11.0.0.10.3.EL-1.0.4-1.i686.rpm">ocfs2-2.6.9-11.0.0.10.3.EL-1.0.4-1.i686.rpm -<I>(适用于单处理器)</I></A> </P>
<P>或</P>
<P><A class=bodylink href="http://oss.oracle.com/projects/ocfs2/dist/files/RedHat/RHEL4/i386/1.0.4-1/ocfs2-2.6.9-11.0.0.10.3.ELsmp-1.0.4-1.i686.rpm">ocfs2-2.6.9-11.0.0.10.3.ELsmp-1.0.4-1.i686.rpm -<I>(适用于多处理器)</I></A> </P>
<P>或</P>
<P><A class=bodylink href="http://oss.oracle.com/projects/ocfs2/dist/files/RedHat/RHEL4/i386/1.0.4-1/ocfs2-2.6.9-11.0.0.10.3.ELhugemem-1.0.4-1.i686.rpm">ocfs2-2.6.9-11.0.0.10.3.ELhugemem-1.0.4-1.i686.rpm -<I>(适用于 hugemem)</I></A> </P>
<P>而工具只需匹配平台和发布版本。您应下载 OCFS2 工具和 OCFS2 控制台应用程序。 </P>
<P><A class=bodylink href="http://oss.oracle.com/projects/ocfs2-tools/dist/files/RedHat/RHEL4/i386/1.0.2-1/ocfs2-tools-1.0.2-1.i386.rpm">ocfs2-tools-1.0.2-1.i386.rpm</A> -<I>(OCFS2 工具)</I> <BR><A class=bodylink href="http://oss.oracle.com/projects/ocfs2-tools/dist/files/RedHat/RHEL4/i386/1.0.2-1/ocfs2console-1.0.2-1.i386.rpm">ocfs2console-1.0.2-1.i386.rpm</A> -<I>(OCFS2 控制台)</I> </P>
<P>尽管 OCFS2 控制台是可选的,但强烈建议使用它。<TT><FONT face=新宋体>ocfs2console</FONT></TT> 应用程序需要 e2fsprogs、glib2 2.2.3 或更高版本、vte 0.11.10 或更高版本、pygtk2 (EL4) 或 python-gtk (SLES9) 1.99.16 或更高版本、python 2.3 或更高版本以及 ocfs2-tools。 </P>
<P>如果您不确定所需的 OCFS2 驱动程序版本,则使用与您的内核版本匹配的 OCFS2 版本。要确定您的内核版本,执行以下命令: </P><PRE>$ uname -a
Linux linux1 <B>2.6.9-11.0.0.10.3</B>.EL #1 Tue Jul 5 12:20:09 PDT 2005 <B>i686</B> i686 i386 GNU/Linux
</PRE>
<P><B>安装 OCFS2</B> </P>
<P>我将把 OCFS2 文件安装到两台单处理器计算机中。安装过程只需要您以 root 用户帐户在集群中的<STRONG>所有节点</STRONG>上运行以下命令即可:</P><PRE>$ su -
# rpm -Uvh ocfs2-2.6.9-11.0.0.10.3.EL-1.0.4-1.i686.rpm \
ocfs2console-1.0.2-1.i386.rpm \
ocfs2-tools-1.0.2-1.i386.rpm
Preparing...                ########################################### [100%]
1:ocfs2-tools            ########################################### [ 33%]
2:ocfs2-2.6.9-11.0.0.10.3########################################### [ 67%]
3:ocfs2console           ########################################### [100%]
</PRE>
<P><B>禁用 SELinux(只适用于 RHEL4 U2)</B> </P>
<P>向 RHEL4 U2 用户(CentOS 4.2 基于 RHEL4 U2)提供一个建议,即 OCFS2 当前无法在启用 SELinux 的情况下运行。如果您使用的是 RHEL4 U2(其中包括您,因为您在此处使用 CentOS 4.2),则您需要禁用 SELinux(使用工具 <TT><FONT face=新宋体>system-config-securitylevel</FONT></TT>)才能执行 O2CB 服务。 </P>
<P>要禁用 SELinux,运行“Security Level Configuration”GUI 实用程序:</P><PRE># <B>/usr/bin/system-config-securitylevel &</B></PRE>
<P><BR>这将显示以下屏幕: </P>
<P>
<CENTER><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f6.gif" border=no><BR><B>图 6</B> Security Level Configuration 打开屏幕 </CENTER>
<P></P>
<P><BR>现在,单击 <TT><FONT face=新宋体>SELinux</FONT></TT> 选项卡并取消选中“Enabled”复选框。单击 [OK] 后,将显示一个警告对话框。只需单击“Yes”确认该警告。禁用 SELinux 选项后,屏幕现在应如下所示: </P>
<P>
<CENTER><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f7.gif" border=no><BR><B>图 7:</B> 禁用了 SELinux</CENTER>
<P></P>
<P><BR>在<U>集群中的两个节点上</U>进行此更改后,将需要重新引导每个节点以实施更改: </P><PRE># <B>init 6</B></PRE>
<P><B>配置 OCFS2</B> </P>
<P>下一步是在集群中的每个节点上生成和配置 <TT><FONT face=新宋体>/etc/ocfs2/cluster.conf</FONT></TT> 文件。完成此操作最简单的方法是运行 GUI 工具 <TT><FONT face=新宋体>ocfs2console</FONT></TT>。在本节中,我们不但使用 <TT><FONT face=新宋体>ocfs2console</FONT></TT> 创建和配置 <TT><FONT face=新宋体>/etc/ocfs2/cluster.conf</FONT></TT> 文件,而且还创建和启动集群堆栈 O2CB。如果 <TT><FONT face=新宋体>/etc/ocfs2/cluster.conf</FONT></TT> 文件不存在(本示例中便是这种情况),<TT><FONT face=新宋体>ocfs2console</FONT></TT> 工具将创建该文件以及一个默认集群名为 <TT><FONT face=新宋体>ocfs2</FONT></TT> 的新集群堆栈服务 (O2CB)。您将需要以 root 用户帐户<U>在集群的所有节点上</U>执行该操作: </P><PRE>$ su -
# ocfs2console &

</PRE>
<P>这将显示如下所示的 GUI: </P>
<P>
<CENTER><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f8.gif"><BR><STRONG>图 8</STRONG> ocfs2console GUI </CENTER>
<P></P>
<P>使用 <TT><FONT face=新宋体>ocfs2console</FONT></TT> GUI 工具执行以下步骤: </P>
<P></P>
<OL>
<LI>选择 <TT><FONT face=新宋体>[Cluster] -> [Configure Nodes...]</FONT></TT>。这将启动 OCFS 集群堆栈(<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_2.html#Figure 9">图 9</A>)并显示“Node Configuration”对话框。
<LI>在“Node Configuration”对话框上,单击 [Add] 按钮。
<UL>
<LI>这将显示“Add Node”对话框。
<LI>在“Add Node”对话框中,输入集群中第一个节点的 <I>Host name</I> 和 <I>IP address</I>。将 <I>IP Port</I> 设置为默认值 7777。在我的示例中,我添加了两个节点,即使用 <TT><FONT face=新宋体>linux1</FONT></TT> / <TT><FONT face=新宋体>192.168.1.100</FONT></TT> 表示第一个节点,并使用 <TT><FONT face=新宋体>linux2</FONT></TT> / <TT><FONT face=新宋体>192.168.1.101</FONT></TT> 表示第二个节点。
<LI>单击“Node Configuration”对话框上的 [Apply] — 所有节点现在将处于“Active”状态,如<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_2.html#Figure 10">图 10</A> 所示。
<LI>单击“Node Configuration”对话框上的 [Close]。 </LI></UL>
<LI>确认所有值均正确后,使用 <TT><FONT face=新宋体>[File] -> [Quit]</FONT></TT> 退出应用程序。需要在集群的所有节点上执行该操作。 </LI></OL>
<P><A name="Figure 9"></A>
<CENTER><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f9.gif"><BR><STRONG>图 9</STRONG>。启动 OCFS2 集群堆栈 </CENTER>
<P></P>
<P>以下对话框显示了节点 <TT><FONT face=新宋体>linux1</FONT></TT> 和 <TT><FONT face=新宋体>linux2</FONT></TT> 的 OCFS2 设置: </P>
<P align=center><A name="Figure 10"></A>
<CENTER><IMG src="http://www.oracle.com/technology/pub/images/hunter_rac10gr2_f10.gif"><BR><STRONG>图 10</STRONG> 为 OCFS2 配置节点 </CENTER>
<P></P>
<P>退出 <TT><FONT face=新宋体>ocfs2console</FONT></TT> 后,将获得一个类似如下所示的 <TT><FONT face=新宋体>/etc/ocfs2/cluster.conf</FONT></TT>。需要在集群中的所有节点上完成该过程,并且所有节点的 OCFS2 配置文件必须完全相同: </P><PRE>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
</PRE>
<P><B>O2CB 集群服务</B> </P>
<P>在使用 OCFS2 执行任何操作(如格式化或挂载文件系统)之前,我们需要先运行 OCFS2 的集群堆栈 O2CB<I>(它将是以上执行的配置过程的结果)</I>。此堆栈包含以下服务: </P>
<P></P>
<UL>
<LI><B>NM:</B>用于跟踪 cluster.conf 中的所有节点的节点管理器
<LI><B>HB:</B>当节点加入或离开集群时向上/向下发出通知的心跳服务
<LI><B>TCP:</B>处理节点之间的通信
<LI><B>DLM:</B>用于跟踪所有锁、这些锁的所有者和状态的分布式锁管理器
<LI><B>CONFIGFS:</B>在 /config 中挂载的用户空间驱动的配置文件系统
<LI><B>DLMFS:</B>用户空间与内核空间 DLM 的接口 </LI></UL>
<P>已将以上所有集群服务打包到 <I>o2cb</I> 系统服务 (<TT><FONT face=新宋体>/etc/init.d/o2cb</FONT></TT>) 中。以下是 <I>o2cb</I> 系统服务的某些更有用的命令和选项的简要列表。 </P>
<P></P>
<UL>
<LI><TT><B><FONT face=新宋体>/etc/init.d/o2cb status</FONT></B></TT> <PRE>Module "configfs":Not loaded
Filesystem "configfs":Not mounted
Module "ocfs2_nodemanager":Not loaded
Module "ocfs2_dlm":Not loaded
Module "ocfs2_dlmfs":Not loaded
Filesystem "ocfs2_dlmfs":Not mounted</PRE><I>注意,本示例未加载所有服务。我在执行“status”选项之前执行了“unload”。如果要在使用 ocfs2console 实用程序配置 OCFS 后立即检查 o2cb 服务的状态,则将加载所有这些服务。</I>
<P></P>
<LI><TT><B><FONT face=新宋体>/etc/init.d/o2cb load</FONT></B></TT> <PRE>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</PRE><I>加载所有 OCFS 模块。</I>
<P></P>
<LI><TT><B><FONT face=新宋体>/etc/init.d/o2cb online ocfs2</FONT></B></TT> <PRE>Starting cluster ocfs2:OK</PRE><I>以上命令将使我们创建的集群 ocfs2 处于联机状态。</I>
<P></P>
<LI><TT><B><FONT face=新宋体>/etc/init.d/o2cb offline ocfs2</FONT></B></TT> <PRE>Unmounting ocfs2_dlmfs filesystem:OK
Unloading module "ocfs2_dlmfs":OK
Unmounting configfs filesystem:OK
Unloading module "configfs":OK</PRE><I>以上命令将使我们创建的集群 ocfs2 处于脱机状态。</I>
<P></P>
<LI><TT><B><FONT face=新宋体>/etc/init.d/o2cb unload</FONT></B></TT> <PRE>Cleaning heartbeat on ocfs2:OK
Stopping cluster ocfs2:OK</PRE><I>以上命令将卸载所有 OCFS 模块。</I> </LI></UL>
<P><B>将 O2CB 配置为在引导时启动</B> </P>
<P>您现在需要配置 OC2B 驱动程序的引导属性,以便在每次引导时将启动集群堆栈服务。需要在<U>集群的两个节点上</U>执行本节中的所有任务。 </P>
<P></P>
<P><STRONG>注意:</STRONG>在撰写本指南时,OCFS2 包含一个错误,即不会在每次引导时加载驱动程序,即使将引导属性配置为执行此操作后也是如此。在尝试根据正式的 OCFS2 文档将引导属性配置为在每次引导时启动后,您在每次引导时将仍收到以下错误: </P><PRE>...
Mounting other filesystems:
mount.ocfs2:Unable to access cluster service

Cannot initialize cluster mount.ocfs2:
Unable to access cluster service Cannot initialize cluster <FONT color=red>[FAILED]</FONT>
...</PRE>
<P>Red Hat 更改了在 chkconfig-1.3.11.2-1 与 chkconfig-1.3.13.2-1 之间注册服务的方式。O2CB 脚本习惯使用前者。 </P>
<P>在尝试配置引导属性之前: </P>
<UL>
<LI>删除 <TT><FONT face=新宋体>/etc/init.d/o2cb</FONT></TT> 中的以下几行 <PRE>### BEGIN INIT INFO
# Provides:o2cb
# Required-Start:
# Should-Start:
# Required-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Description:Load O2CB cluster services at system boot.
### END INIT INFO
            </PRE>
<LI>重新注册 o2cb 服务。 <PRE># <B>chkconfig --del o2cb</B>
# <B>chkconfig --add o2cb</B>
# <B>chkconfig --list o2cb</B>
o2cb            0:off   1:off   2:on    3:on    4:on    5:on    6:off

# <B>ll /etc/rc3.d/*o2cb*</B>
lrwxrwxrwx  1 root root 14 Sep 29 11:56 /etc/rc3.d/S24o2cb -> ../init.d/o2cb</PRE>该服务应为默认运行级别中的 <TT><FONT face=新宋体>S24o2cb</FONT></TT>。 </LI></UL>
<P>解决此错误后,您可以继续设置引导属性,如下所示:</P><PRE># <B>/etc/init.d/o2cb offline ocfs2</B>
# <B>/etc/init.d/o2cb unload</B>
# <B>/etc/init.d/o2cb configure</B>
Configuring the O2CB driver.
</PRE>
<P>这将配置 O2CB 驱动程序的引导属性。以下问题将决定在引导时是否加载驱动程序。当前值将在方括号(“[]”)中显示。按 <ENTER> 而不键入答案将保留该当前值。Ctrl-C 将终止。 </P><PRE>Load O2CB driver on boot (y/n) [n]:<B>y</B>
Cluster to start on boot (Enter "none" to clear) [ocfs2]:<B>ocfs2</B>
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 cluster ocfs2:OK
</PRE>
<P><B>格式化 OCFS2 文件系统</B> </P>
<P>您现在可以使用在<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#10">在共享 FireWire 存储设备上创建分区</A>一节中创建的分区。(至少可以使用第一个分区!) </P>
<P>如果 O2CB 集群处于脱机状态,则启动它。格式化操作要求集群处于联机状态,这是因为它需要确保在集群的某个节点上未挂载该卷。 </P>
<P>在本文档的前面部分中,我们在<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#Create Mount Point for OCFS2 / Clusterware">为 OCFS/集群件创建挂载点</A>一节中创建了目录 <TT><FONT face=新宋体>/u02/oradata/orcl</FONT></TT>。本节包含用于创建和安装<I>集群管理器</I> 使用的文件系统 (<TT><FONT face=新宋体>/u02/oradata/orcl</FONT></TT>) 的命令。 </P>
<P><B>创建 OCFS2 文件系统</B> </P>
<P>与本节中其他任务不同,只能在 <B>RAC 集群中的一个节点上</B>创建 OCFS2 文件系统。您将只从 <TT><FONT face=新宋体>linux1</FONT></TT> 执行本节中的所有命令。 </P>
<P>注意,可以使用 GUI 工具 <TT><FONT face=新宋体>ocfs2console</FONT></TT> 或命令行工具 <TT><FONT face=新宋体>mkfs.ocfs2</FONT></TT> 创建和安装 OCFS2 文件系统。从 <TT><FONT face=新宋体>ocfs2console</FONT></TT> 实用程序中,使用菜单 <TT><FONT face=新宋体>[Tasks] - [Format]</FONT></TT>。 </P>
<P>参见下面有关如何使用命令行工具 <TT><FONT face=新宋体>mkfs.ocfs2</FONT></TT> 创建 OCFS2 文件系统的说明。 </P>
<P>要创建文件系统,使用 Oracle 可执行文件 <TT><FONT face=新宋体>mkfs.ocfs2</FONT></TT>。就本示例而言,我只从 <TT><FONT face=新宋体>linux1</FONT></TT> 以 <TT><FONT face=新宋体>root</FONT></TT> 用户帐户运行以下命令: </P><PRE>$ <B>su -</B>
# <B>mkfs.ocfs2 -b 4K -C 32K -N 4 -L oradatafiles /dev/sda1</B>

mkfs.ocfs2 1.0.2
Filesystem label=oradatafiles
Block size=4096 (bits=12)
Cluster size=32768 (bits=15)
Volume size=1011675136 (30873 clusters) (246984 blocks)
1 cluster groups (tail covers 30873 clusters, rest cover 30873 clusters)
Journal size=16777216
Initial number of node slots: 4
Creating bitmaps:done
Initializing superblock:done
Writing system files:done
Writing superblock:done
Writing lost+found:done
mkfs.ocfs2 successful
</PRE>
<P><B>挂载 OCFS2 文件系统</B></P>
<P>现在已经创建了此文件系统,接下来我们便可以挂载它了。首先,使用命令行进行挂载,然后我将介绍如何将它包含在 <TT><FONT face=新宋体>/etc/fstab</FONT></TT> 中以在每次引导时挂载它。 您将需要以 <TT><FONT face=新宋体>root</FONT></TT> 用户帐户在<B> Oracle RAC 集群中的所有节点上</B>挂载文件系统。</P>
<P>首先,此处介绍了如何从命令行手动挂载 OCFS2 文件。注意,需要以 <TT><FONT face=新宋体>root</FONT></TT> 用户帐户执行该操作:</P><PRE>$ <B>su -</B>
# <B>mount -t ocfs2 -o datavolume /dev/sda1 /u02/oradata/orcl</B></PRE>
<P>如果挂载成功,您将只是获得提示。但您应运行以下检查来确保文件系统挂载正确。 </P>
<P>首先,使用 <TT><FONT face=新宋体>mount</FONT></TT> 命令确保成功挂载了新文件系统。应在 RAC 集群的所有节点上执行该操作: </P><PRE># <B>mount</B>
/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)
<B><FONT color=green>/dev/sda1 on /u02/oradata/orcl type ocfs2 (rw,_netdev,datavolume)</FONT></B></PRE>
<P></P>
<P><STRONG>注意:</STRONG>您将在此处使用 <TT><FONT face=新宋体>datavolume</FONT></TT> 选项挂载新文件系统。Oracle 数据库用户<U>必须</U>使用 <TT><FONT face=新宋体>datavolume</FONT></TT> 挂载选项安装任何将包含表决磁盘文件、集群注册表 (OCR)、数据文件、重做日志、归档日志以及控制文件的卷,以确保 Oracle 进程打开包含 <TT><FONT face=新宋体>o_direct</FONT></TT> 标志的文件。 </P>
<P><B>不</B>应使用该挂载选项挂载任何其他类型的卷,其中包括 Oracle home(本指南未使用它)。 </P>
<P>稍后(通常大约为五秒钟)将挂载该卷。它这样做是为了使心跳线程保持稳定。在未来的版本中,Oracle 计划增加对全局心跳(这将使大多数挂载瞬间完成)的支持。 </P>
<P><A name="Configure OCFS2 to Mount Automatically at Startup"></A><B>将 OCFS 配置为在启动时自动挂载</B></P>
<P>让我们回顾一下到目前为止您已经执行的操作。您下载并安装了 OCFS2,它将用于存储<I>集群管理器</I> 文件所需的文件。安装后,您将 OCFS2 模块加载到内核中,然后对集群文件系统进行了格式化。最后,您挂载了新建的文件系统。本节将逐步完成在每次引导计算机时负责挂载新 OCFS2 文件系统的步骤。 </P>
<P>首先将以下行添加到 <B>RAC 集群所有节点</B>上的 <TT><FONT face=新宋体>/etc/fstab</FONT></TT> 文件中: </P><PRE><B>/dev/sda1     /u02/oradata/orcl    ocfs2   _netdev,datavolume     0 0</B></PRE>
<P></P>
<P>注意用于挂载此文件系统的 <TT><FONT face=新宋体>_netdev</FONT></TT> 选项。<TT><FONT face=新宋体>_netdev</FONT></TT> 挂载选项是 OCFS2 卷所必需的;它指示将在网络启动后挂载该卷以及在关闭网络前卸载该卷。 </P>
<P>现在,让我们确保已经加载了 <TT><FONT face=新宋体>ocfs2.ko</FONT></TT> 内核模块,并确保将在引导过程中安装文件系统。 </P>
<P>如果您遵循了本指南中的示例,则应已经启用了用于加载内核模块并安装 OCFS2 文件系统的操作。但您将仍以 <TT><FONT face=新宋体>root</FONT></TT> 用户帐户在<B> RAC 集群的所有节点上</B>运行以下命令来检查这些选项: </P><PRE>$ <B>su -</B>
# <B>chkconfig --list o2cb</B>
o2cb            0:off   1:off   2:on    3:<B>on</B>    4:<B>on</B>    5:<B>on</B>    6:off</PRE>
<P>应把我以<B>粗体</B>标记的标志设置为“<TT><FONT face=新宋体>on</FONT></TT>”。 </P>
<P><B>检查新 OCFS2 文件系统的权限</B></P>
<P>使用 <TT><FONT face=新宋体>ls</FONT></TT> 命令检查所有权。应把权限设置为 0775,且将所有者设置为“<TT><FONT face=新宋体>oracle</FONT></TT>”、将组设置为“<TT><FONT face=新宋体>dba</FONT></TT>”。如果集群中的某些节点未设置为该值(我就未设置为该值),则很有可能是所有节点之间的“<TT><FONT face=新宋体>oracle</FONT></TT>”UID(在本示例中为 <TT><FONT face=新宋体>175</FONT></TT>)和/或“<TT><FONT face=新宋体>dba</FONT></TT>”GID(在本示例中为 <TT><FONT face=新宋体>115</FONT></TT>)不相同。 </P>
<P>我们来先检查权限: </P><PRE># <B>ls -ld /u02/oradata/orcl</B>
drwxr-xr-x  3 <B><FONT color=#ff0000>root root</FONT></B> 4096 Sep 29 12:11 /u02/oradata/orcl</PRE>
<P>正如在以上列表中所看到的,<TT><FONT face=新宋体>oracle</FONT></TT> 用户帐户(以及 <TT><FONT face=新宋体>dba</FONT></TT> 组)将无法写入此目录。我们来解决此问题: </P><PRE># <B>chown oracle.dba /u02/oradata/orcl</B>
# <B>chmod 775 /u02/oradata/orcl</B></PRE>
<P>我们回过头来再次检查集群中每个节点的权限是否正确: </P><PRE># <B>ls -ld /u02/oradata/orcl</B>
drwxrwxr-x  3 <B><FONT color=green>oracle dba</FONT></B> 4096 Sep 29 12:11 /u02/oradata/orcl</PRE>
<P><B>调整 O2CB 心跳阈值</B></P>
<P>该部分对于在 FireWire 驱动器上配置由 Oracle 集群件使用的两个共享文件非常重要。在测试过程中,我能够安装和配置 OCFS2、格式化新卷并最后安装位于新 OCFS2 卷上的 Oracle 集群件(及其所需的两个共享文件,即表决磁盘和 OCR 文件)。我能够安装 Oracle 集群件并可以看到共享驱动器,但在评估过程中,当集群件软件在两个节点上运行大约 15 分钟后,我收到了许多锁定和挂起。挂起的节点总是变化不定(在我的示例中为 <TT><FONT face=新宋体>linux1</FONT></TT> 或 <TT><FONT face=新宋体>linux2</FONT></TT>)。此外,无论是 I/O 负载较高还是根本没有,对该节点崩溃(挂起)都没有影响。 </P>
<P>注意,您将创建的配置是一个非常低端的设置(配置了与 FireWire 驱动器有关的慢速磁盘访问)。这绝不是一个高端设置并易受虚假超时的影响。 </P>
<P>查看 OCFS2 的跟踪文件后,对表决磁盘的访问显然太慢(超过了 O2CB 心跳阈值)并导致 Oracle 集群件软件(以及节点)崩溃。 </P>
<P>我所使用的解决方案只是将 O2CB 心跳阈值从其默认设置 7 增大为 301(在某些情况下高达 900)。这是一个可配置参数,用于计算节点“隔离”自身所用的时间。 </P>
<P>首先,我们了解一下如何确定 O2CB 心跳阈值的当前设置。为此,可以查询 <TT><FONT face=新宋体>/proc</FONT></TT> 文件系统,如下所示: </P><PRE># <B>cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold</B>
7</PRE>
<P>值为 7,但该值表示什么呢?其实,它用在以下公式中确定隔离时间(秒): </P><PRE>[隔离时间(秒)] = (O2CB_HEARTBEAT_THRESHOLD - 1) * 2</PRE>
<P>因此,如果 O2CB 心跳阈值为 7,则隔离时间将为: </P><PRE>(7 - 1) * 2 = 12 秒</PRE>
<P>如果您的 FireWire 磁盘较慢,则需要一个更大的阈值(准确来说是 600)。对于 600 秒,您将需要一个值为 301 的 O2CB_HEARTBEAT_THRESHOLD,如下所示: </P><PRE>(301 - 1) * 2 = 600 秒</PRE>
<P>现在我们了解一下如何将 O2CB 心跳阈值从 7 增大为 301。这需要在集群的两个节点上执行以下操作。首先需要修改文件 <TT><FONT face=新宋体>/etc/sysconfig/o2cb</FONT></TT> 并将 O2CB_HEARTBEAT_THRESHOLD 设置为 301: </P><PRE># O2CB_ENABELED:'true' means to load the driver on boot.
O2CB_ENABLED=true

# O2CB_BOOTCLUSTER:If not empty, the name of a cluster to start.
O2CB_BOOTCLUSTER=ocfs2

# O2CB_HEARTBEAT_THRESHOLD:Iterations before a node is considered dead.
<B>O2CB_HEARTBEAT_THRESHOLD=301</B></PRE>
<P>修改文件 <TT><FONT face=新宋体>/etc/sysconfig/o2cb</FONT></TT> 后,您需要更改 <TT><FONT face=新宋体>o2cb</FONT></TT> 配置。同样,应在集群的所有节点上执行以下操作。</P><PRE># <B>umount /u02/oradata/orcl/</B>
# <B>/etc/init.d/o2cb unload</B>
# <B>/etc/init.d/o2cb configure</B>

Load O2CB driver on boot (y/n) [y]:<B>y</B>
Cluster to start on boot (Enter "none" to clear) [ocfs2]:<B>ocfs2</B>
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 cluster ocfs2:OK</PRE>
<P>您现在可以再次检查以确保这些设置应用于 o2cb 集群堆栈: </P><PRE># <B>cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold</B>
301</PRE>
<P></P>
<P><STRONG>重要注意事项:</STRONG> 用于 O2CB 心跳阈值的值 301 并不适用于本指南中列出的所有 FireWire 驱动器。使用以下图表确定应使用的 O2CB 心跳阈值。 </P>
<P></P>
<CENTER>
<TABLE class=bodycopy cellSpacing=1 cellPadding=3 width=701 border=1>
<TBODY>
<TR>
<TD noWrap align=middle>
<DIV align=left><B><SMALL>FireWire 驱动器</SMALL></B></DIV></TD>
<TD noWrap align=middle>
<DIV align=center><B><SMALL>O2CB 心跳阈值</SMALL></B></DIV></TD></TR>
<TR bgColor=#ffffff>
<TD noWrap align=left><SMALL>Maxtor OneTouch II 300GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01G300)</SMALL></TD>
<TD noWrap align=right>
<DIV align=center><SMALL>301</SMALL></DIV></TD></TR>
<TR bgColor=#ffffff>
<TD noWrap align=left><SMALL>Maxtor OneTouch II 250GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01G250)</SMALL></TD>
<TD noWrap align=right>
<DIV align=center><SMALL>301</SMALL></DIV></TD></TR>
<TR bgColor=#ffffff>
<TD noWrap align=left><SMALL>Maxtor OneTouch II 200GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01A200)</SMALL></TD>
<TD noWrap align=right>
<DIV align=center><SMALL>301</SMALL></DIV></TD></TR>
<TR bgColor=#ffffff>
<TD noWrap align=left><SMALL>由 F.A. Porsche 设计的 250GB LaCie 硬盘驱动器(采用 FireWire 400 接口)- (300703U)</SMALL></TD>
<TD noWrap align=right>
<DIV align=center><SMALL>600</SMALL></DIV></TD></TR>
<TR bgColor=#ffffff>
<TD noWrap align=left><SMALL>由 F.A. Porsche 设计的 160GB LaCie 硬盘驱动器(采用 FireWire 400 接口)- (300702U)</SMALL></TD>
<TD noWrap align=right>
<DIV align=center><SMALL>600</SMALL></DIV></TD></TR>
<TR bgColor=#ffffff>
<TD noWrap align=left><SMALL>由 F.A. Porsche 设计的 80GB LaCie 硬盘驱动器(采用 FireWire 400 接口)- (300699U)</SMALL></TD>
<TD noWrap align=right>
<DIV align=center><SMALL>600</SMALL></DIV></TD></TR>
<TR bgColor=#ffffff>
<TD noWrap align=left><SMALL>ADS Technologies 推出的 Dual Link 驱动器套件(内含 FireWire) - (DLX185)</SMALL></TD>
<TD noWrap align=right>
<DIV align=center><SMALL>901</SMALL></DIV></TD></TR>
<TR bgColor=#ffffff>
<TD noWrap align=left><SMALL>Maxtor OneTouch 250GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (A01A250)</SMALL></TD>
<TD noWrap align=right>
<DIV align=center><SMALL>600</SMALL></DIV></TD></TR>
<TR bgColor=#ffffff>
<TD noWrap align=left><SMALL>Maxtor OneTouch 200GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (A01A200)</SMALL></TD>
<TD noWrap align=right>
<DIV align=center><SMALL>600</SMALL></DIV></TD></TR></TBODY></TABLE></CENTER>
<P><B>重新引导两个节点</B></P>
<P>开始介绍下一节之前,最好在此时重新引导 RAC 集群的所有节点。当计算机启动时,确保加载了集群堆栈服务并安装了新的 OCFS2 文件系统: </P><PRE># <B>mount</B>
/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)
<B>/dev/sda1 on /u02/oradata/orcl type ocfs2 (rw,_netdev,datavolume)</B></PRE>
<P>还应确认 O2CB 心跳阈值的设置是否正确(设置为我们的新值 301): </P><PRE># <B>cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold</B>
301</PRE>
<P><B>如何确定 OCFS2 版本</B></P>
<P>要确定正在运行的 OCFS2 版本,使用: </P><PRE># <B>cat /proc/fs/ocfs2/version</B>
OCFS2 1.0.4 Fri Aug 26 12:31:58 PDT 2005 (build 0a22e88ab648dc8d2a1f9d7796ad101c)<BR>
  </PRE>
<HR>

<P><!-- **************** [ 17 ] ************************************************************ --><A name=17></A><SPAN class=parahead1>17. 安装和配置自动存储管理 (ASMLib 2.0)</SPAN> </P>
<P><EM>应在<STRONG>所有节点</STRONG>上执行大多数安装和配置过程。但创建 ASM 磁盘将只需在集群中的<STRONG>单个节点</STRONG>上执行。 </EM></P>
<P>在本节中,您将配置 ASM,以将其用作所有 Oracle 物理数据库文件(数据、联机重做日志、控制文件、归档重做日志)以及闪回恢复区的文件系统/卷管理器。 </P>
<P>Oracle 数据库 10<I>g</I> 第 1 版中引入了 ASM 特性,用于使管理员不必再管理单个文件和驱动器。ASM 内置在 Oracle 内核中。通过它,DBA 可以全天候管理 Oracle 集群实例的单个实例以集群实例的数千个磁盘驱动器。将把所有要用于 Oracle 的文件和目录包含在<I>磁盘组</I>中。ASM 跨所有可用磁盘驱动器并行执行负载平衡,以防止热点并最大限度地提高性能(甚至对于快速更改数据使用模式也是如此)。 </P>
<P>在该节中,我首先介绍 ASMLib 2.0 库及其用于 Linux 的关联驱动程序以及其他使用 Linux 配置 ASM 的方法。然后,我将介绍如何下载特定于您的 Linux 内核的 ASM 驱动程序(ASMLib 版本 2.0)。 最后,您将安装和配置 ASMLib 2.0 驱动程序,同时以一个如何创建 ASM 磁盘的演示结束本节。 </P>
<P>如果要了解有关 ASMLib 的详细信息,请访问 <A class=bodylink href="http://www.oracle.com/technology/global/cn/tech/linux/asmlib/install.html" target=_blank>www.oracle.com/technology/global/cn/tech/linux/asmlib/install.html</A>。 </P>
<P><B>使用 Linux 配置 ASM 的方法(仅供参考)</B> </P>
<P>最初开始编写本指南时,我希望集中介绍如何将 ASM 用于所有数据库文件。我很想知道在负载平衡和容错方面,ASM 与此测试 RAC 配置的协同工作性能如何。 </P>
<P>有两个不同方法可在 Linux 上配置 ASM: </P>
<UL class=bodycopy>
<LI><B>使用 ASMLib I/O 的 ASM:</B>此方法使用 ASMLib 调用在由 ASM 管理的原始块设备上创建所有 Oracle 数据库文件。由于 ASMLib 使用块设备,因此该方法不需要原始设备。
<LI><B>使用标准 Linux I/O 的 ASM:</B>此方法使用标准 Linux I/O 系统调用在 ASM 管理的原始字符设备上创建所有 Oracle 数据库文件。您将需要为 ASM 使用的所有磁盘分区创建原始设备。 </LI></UL>
<P>我们将在此处介绍“使用 ASMLib I/O 的 ASM”。 </P>
<P>但在详细介绍 ASMLib 的安装和配置之前,我认为有必要简单介绍一下第二种方法“具有标准 Linux I/O 的 ASM”。如果要使用该方法(它是一个非常有效的解决方案,但并不是我将在此处实施的方法),则应注意在默认情况下 Linux 并不使用原始设备。必须使用原始驱动程序将要使用的每个 Linux 原始设备绑定到相应的块设备。例如,如果要使用我们已经创建的分区(/dev/sda2、/dev/sda3 和 /dev/sda4),则需要执行以下任务: </P>
<P></P>
<OL class=bodycopy>
<LI>编辑文件 <TT><FONT face=新宋体>/etc/sysconfig/rawdevices</FONT></TT>,如下所示: <PRE># raw device bindings
# format:<rawdev> <major> <minor>
#          <rawdev> <blockdev>
# example:/dev/raw/raw1 /dev/sda1
#          /dev/raw/raw2 8 5
/dev/raw/raw2 /dev/sda2
/dev/raw/raw3 /dev/sda3
/dev/raw/raw4 /dev/sda4
</PRE>将在每次重新启动时创建原始设备绑定。
<P></P>
<LI>然后,需要将所有原始设备的所有权更改为“<TT><FONT face=新宋体>oracle</FONT></TT>”用户帐户: <PRE># chown oracle:dba /dev/raw/raw2; chmod 660 /dev/raw/raw2
# chown oracle:dba /dev/raw/raw3; chmod 660 /dev/raw/raw3
# chown oracle:dba /dev/raw/raw4; chmod 660 /dev/raw/raw4
</PRE>
<LI>最后一步是重新启动服务器以绑定设备或只重新启动 <I>rawdevices</I> 服务: <PRE># service rawdevices restart
</PRE></LI></OL>
<P>正如我在上面所提到的,以上示例只是演示有多个方法可以在 Linux 上使用 ASM。现在,我们继续介绍要在本文中使用的方法“使用 ASMLib I/O 的 ASM”。 </P>
<P><B>下载 ASMLib 2.0 程序包</B> </P>
<P>首先下载 ASMLib 2.0 库(从 OTN 中下载)和驱动程序(从我的网站中下载)。与 OCFS 一样,您需要下载用于 Linux 内核的版本以及计算机上的处理器数。假设您在单处理器计算机上使用内核 2.6.9-11.0.0.10.3.EL #1:</P><PRE># uname -a
Linux linux1 2.6.9-11.0.0.10.3.EL #1 Tue Jul 5 12:20:09 PDT 2005 i686 i686 i386 GNU/Linux
</PRE>
<P><A class=boldbodylink href="http://www.oracle.com/technology/software/tech/linux/asmlib/rhel4.html" target=_blank>用于 Red Hat Enterprise Linux 4 AS 的 Oracle ASMLib 下载</A> </P>
<UL class=bodycopy>
<LI><A class=bodylink href="http://www.idevelopment.info/data/Oracle/DBA_tips/Oracle10gRAC/Install10gR2RACOnCentOS42/oracleasm-2.6.9-11.0.0.10.3.EL-2.0.0-1.i686.rpm">oracleasm-2.6.9-11.0.0.10.3.EL-2.0.0-1.i686.rpm</A> -<I>(“up”内核的驱动程序)</I> <BR>- 或 -<BR>
<LI><A class=bodylink href="http://www.idevelopment.info/data/Oracle/DBA_tips/Oracle10gRAC/Install10gR2RACOnCentOS42/oracleasm-2.6.9-11.0.0.10.3.ELsmp-2.0.0-1.i686.rpm">oracleasm-2.6.9-11.0.0.10.3.ELsmp-2.0.0-1.i686.rpm</A> -<I>(“smp”内核的驱动程序)</I>
<LI><A class=bodylink href="http://www.idevelopment.info/data/Oracle/DBA_tips/Oracle10gRAC/Install10gR2RACOnCentOS42/oracleasmlib-2.0.0-1.i386.rpm">oracleasmlib-2.0.0-1.i386.rpm</A> -<I>(用户空间库)</I>
<LI><A class=bodylink href="http://www.idevelopment.info/data/Oracle/DBA_tips/Oracle10gRAC/Install10gR2RACOnCentOS42/oracleasm-support-2.0.0-1.i386.rpm">oracleasm-support-2.0.0-1.i386.rpm</A> -<I>(驱动程序支持文件)</I> </LI></UL>
<P><B>安装 ASMLib 2.0 程序包</B> </P>
<P>需要在<STRONG>所有节点</STRONG>上以 <TT><FONT face=新宋体>root</FONT></TT> 用户帐户执行此安装: </P><PRE>$ su -
# rpm -Uvh oracleasm-2.6.9-11.0.0.10.3.EL-2.0.0-1.i686.rpm \
oracleasmlib-2.0.0-1.i386.rpm \
oracleasm-support-2.0.0-1.i386.rpm
Preparing...                ########################################### [100%]
1:oracleasm-support      ########################################### [ 33%]
2:oracleasm-2.6.9-11.0.0.########################################### [ 67%]
3:oracleasmlib           ########################################### [100%]
</PRE>
<P><B>配置和加载 ASMLib 2.0 程序包</B> </P>
<P>现在,您下载并安装了用于 Linux 的 ASMLib 程序包,接下来您需要配置并加载 ASM 内核模块。需要在<STRONG>所有节点</STRONG>上以 <TT><FONT face=新宋体>root</FONT></TT> 运行此任务: </P><PRE>$ <B>su -</B>
# <B>/etc/init.d/oracleasm configure</B>
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 []:<B>oracle</B>
Default group to own the driver interface []:<B>dba</B>
Start Oracle ASM library driver on boot (y/n) [n]:<B>y</B>
Fix permissions of Oracle ASM disks on boot (y/n) [y]:<B>y</B>
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  ]</PRE>
<P><B>为 Oracle 创建 ASM 磁盘</B> </P>
<P>在<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g.html#10">第 10 节</A>中,您创建了三个用于存储 Oracle 数据库文件(如联机重做日志、数据库文件、控制文件、归档重做日志文件)和闪回恢复区的 Linux 分区。 </P>
<P>以下是为 ASM 创建的分区列表: </P>
<P>
<TABLE class=bodycopy cellSpacing=1 cellPadding=3 align=center border=1>
<TBODY>
<TR>
<TD align=middle colSpan=6><B>创建的 Oracle ASM 分区</B> </TD></TR>
<TR>
<TD noWrap><B>文件系统类型</B></TD>
<TD noWrap><B>分区</B></TD>
<TD noWrap align=right><B>大小</B></TD>
<TD noWrap><B>挂载点</B></TD>
<TD noWrap><B>文件类型</B></TD></TR>
<TR>
<TD noWrap>ASM</TD>
<TD noWrap>/dev/sda2</TD>
<TD noWrap align=right>50GB</TD>
<TD noWrap>ORCL:VOL1</TD>
<TD noWrap>Oracle 数据库文件</TD></TR>
<TR>
<TD noWrap>ASM</TD>
<TD noWrap>/dev/sda3</TD>
<TD noWrap align=right>50GB</TD>
<TD noWrap>ORCL:VOL2</TD>
<TD noWrap>Oracle 数据库文件</TD></TR>
<TR>
<TD noWrap>ASM</TD>
<TD noWrap>/dev/sda4</TD>
<TD noWrap align=right>100GB</TD>
<TD noWrap>ORCL:VOL3</TD>
<TD noWrap>快速恢复区</TD></TR>
<TR>
<TD noWrap><B>总计</B></TD>
<TD noWrap></TD>
<TD noWrap align=right><B>200GB</B></TD>
<TD noWrap></TD>
<TD noWrap></TD></TR></TBODY></TABLE></P>
<P>本节中的最后一个任务是创建 ASM 磁盘。创建 ASM 磁盘只需要在<STRONG>一个节点</STRONG>上以 <TT><FONT face=新宋体>root</FONT></TT> 用户帐户执行。我将在 <TT><FONT face=新宋体>linux1</FONT></TT> 上运行这些命令。在其他节点上,您将需要执行 <I>scandisk</I> 以识别新卷。该操作完成时,应在所有节点上运行 <TT><FONT face=新宋体>oracleasm listdisks</FONT></TT> 命令以验证是否创建了所有 ASM 磁盘以及它们是否可用。</P><PRE>$ su -
# /etc/init.d/oracleasm createdisk VOL1 /dev/sda2
Marking disk "/dev/sda2" as an ASM disk [  OK  ]

# /etc/init.d/oracleasm createdisk VOL2 /dev/sda3
Marking disk "/dev/sda3" as an ASM disk [  OK  ]

# /etc/init.d/oracleasm createdisk VOL3 /dev/sda4
Marking disk "/dev/sda4" as an ASM disk [ OK  ]
</PRE>
<P>注意:如果使用相同硬件(实际上是相同的共享驱动器)重复本指南,则在尝试创建 ASM 磁盘时可能会出现故障。如果确实遇到故障,则尝试使用以下命令列出所有 ASM 磁盘: </P><PRE># /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
</PRE>
<P>您可以看到,结果表明我定义了三个卷。如果上次运行定义了三个卷,则继续执行操作并使用以下命令删除它们,然后使用以上的 (oracleasm createdisk) 命令再次创建它们: </P><PRE># /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  ]
</PRE>
<P>在集群中的<STRONG>所有其他节点</STRONG>上,必须执行磁盘扫描程序以识别新卷: </P><PRE># /etc/init.d/oracleasm scandisks
Scanning system for ASM disks                              [  OK  ]
</PRE>
<P>我们现在可以使用以下命令在<STRONG>所有节点</STRONG>上以 <TT><FONT face=新宋体>root</FONT></TT> 用户帐户测试是否成功创建了 ASM 磁盘:</P><PRE># /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
<BR></PRE>
<HR>

<P><!-- **************** [ 18 ] ************************************************************ --><A name=18></A><SPAN class=parahead1>18. 下载 Oracle 10<I>g</I> RAC 软件</SPAN> </P>
<P><EM>只需要在集群中的<STRONG>一个节点</STRONG>上执行以下下载过程!</EM> </P>
<P>下一个逻辑步骤是安装 Oracle 集群件第 2 版 (10.2.0.1.0)、Oracle 数据库 10<I>g</I> 第 2 版 (10.2.0.1.0) 以及最终用于 Linux x86 软件的 Oracle 数据库 10<I>g</I> 随附 CD 第 2 版 (10.2.0.1.0)。但您必须先从 OTN 下载并提取所需的 Oracle 软件程序包。 </P>
<P>您将从 Oracle 下载所需的软件并将其提取到集群的一个 Linux 节点即 <TT><FONT face=新宋体>linux1</FONT></TT> 上。您将从此计算机执行所有安装。Oracle 安装将把所需的软件程序包复制到我们在<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#13">第 13 节</A>中设置的 RAC 配置中的所有其他节点上。 </P>
<P>以 <TT><FONT face=新宋体>oracle</FONT></TT> 用户帐户登录 Linux RAC 集群的某个节点。在该示例中,您将把所需的 Oracle 软件下载到 <TT><FONT face=新宋体>linux1</FONT></TT> 并将其保存到 <TT><FONT face=新宋体>/u01/app/oracle/orainstall</FONT></TT>。 </P>
<P><B>下载并提取软件</B> </P>
<P>首先,<A class=bodylink href="http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201linuxsoft.html" target=_blank>下载</A> Oracle 集群件第 2 版 (10.2.0.1.0)、Oracle 数据库 10<I>g</I> 第 2 版 (10.2.0.1.0) 以及用于 Linux x86 的 Oracle 数据库 10<I>g</I> 随附 CD 第 2 版 (10.2.0.1.0) 软件。所有下载均在同一页面中提供。 </P>
<P>以 <TT><FONT face=新宋体>oracle</FONT></TT> 用户帐户将下载的三个程序包提取到临时目录。在该示例中,我将使用 <TT><FONT face=新宋体>/u01/app/oracle/orainstall</FONT></TT>。 </P>
<P>按如下所示提取 Oracle 集群件程序包: </P><PRE># su - oracle
$ cd ~oracle/orainstall
$ unzip 10201_clusterware_linux32.zip
</PRE>
<P>然后提取 Oracle 数据库软件: </P><PRE>$ cd ~oracle/orainstall
$ unzip 10201_database_linux32.zip
</PRE>
<P>最后,提取 Oracle 随附 CD 软件: </P><PRE>$ cd ~oracle/orainstall
$ unzip 10201_companion_linux32.zip
</PRE>

pub!1c 2006-2-17 12:47

<SPAN class=parahead1>19. 安装 Oracle 10<I>g</I> 集群件软件</SPAN>
<P><EM>仅在集群的<STRONG>一个节点</STRONG>上执行下列安装过程!Oracle Universal Installer 将把 Oracle 集群件软件安装到集群中的所有其他节点。</EM> </P>
<P>您现在就可以安装该环境的“集群”部分:Oracle 集群件了。在上一节中,您将 Oracle 集群件的安装文件下载并解压缩到 <TT><FONT face=新宋体>linux1</FONT></TT> 的目录 <TT><FONT face=新宋体>/u01/app/oracle/orainstall/clusterware</FONT></TT> 中。这是唯一需要执行安装的节点。 </P>
<P>在 Oracle 集群件的安装过程中,系统将提示您提供相关的并要在 RAC 集群中配置的节点。当实际的安装开始时,它将使用我们在<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10g_2.html#13">第 13 节</A>(“为远程访问配置 RAC 节点”)中配置的远程访问把所需的软件复制到所有节点。 </P>
<P>那 Oracle 集群件究竟是用来干什么的呢? </P>
<P>它包含所有集群和数据库配置元数据以及多个适用于 RAC 的系统管理特性。通过它,DBA 可以将一个 Oracle 实例(或多个实例)注册和调用到集群。在通常的操作中,Oracle 集群件将通过一种特殊的 ping 操作向集群中配置的所有节点发送消息(通常称作“心跳”)。如果对任何节点的心跳检测失败,则它将检查 Oracle 集群件配置文件(位于共享磁盘上)以辨别是节点故障还是网络故障。 </P>
<P>安装 Oracle 集群件后,用于安装 Oracle 10<I>g</I> 数据库软件(下一节)的 Oracle Universal Installer (OUI) 将自动识别这些节点。与您将在本节中执行的 Oracle 集群件安装一样,Oracle 数据库 10<I>g</I> 软件只需要从一个节点中运行。OUI 将把此软件程序包复制到 RAC 集群中配置的所有节点。 </P>
<P><B>Oracle 集群件共享文件</B> </P>
<P>将把由 Oracle 集群件使用的两个共享文件存储到我们在前面创建的 OCFS2 文件系统中。这两个共享 Oracle 集群件文件是: </P>
<UL class=bodycopy>
<LI>Oracle 集群注册表 (OCR)
<UL>
<LI>位置:/u02/oradata/orcl/OCRFile
<LI>大小:~ 100MB </LI></UL>
<LI>CRS 表决磁盘
<UL>
<LI>位置:/u02/oradata/orcl/CSSFile
<LI>大小:~ 20MB </LI></UL></LI></UL>
<P>注意:对于此处的安装而言,无法将 ASM 用于两个 Oracle 集群件文件(OCR 或 CRS 表决磁盘)。问题是只有这两个文件就绪并可以访问后<STRONG>才可以</STRONG>启动 Oracle 实例。要使 ASM 可用,应首先运行 ASM 实例。可以将这两个共享文件存储到 OCFS2、共享的原始设备或其他供应商的集群化文件系统中。 </P>
<P><B>验证环境变量</B> </P>
<P>启动 OUI 之前,应先从控制台以 <TT><FONT face=新宋体>root</FONT></TT> 运行 <TT><FONT face=新宋体>xhost</FONT></TT> 命令以允许建立 X Server 服务器连接。然后,取消 <TT><FONT face=新宋体>ORACLE_HOME</FONT></TT> 变量的设置并确认 RAC 集群的每个节点定义了唯一的 <TT><FONT face=新宋体>ORACLE_SID</FONT></TT>。还应确认我们是以 <TT><FONT face=新宋体>oracle</FONT></TT> 用户帐户登录的: </P>
<P><B>以 oracle 登录</B> </P><PRE># xhost +
access control disabled, clients can connect from any host

# su - oracle
</PRE><B>取消 ORACLE_HOME 的设置</B> <PRE>$ unset ORA_CRS_HOME
$ unset ORACLE_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN
</PRE>
<P><B>验证 <TT><FONT face=新宋体>linux1</FONT></TT> 上的环境变量</B></P><PRE>$ env | grep ORA
ORACLE_SID=orcl<B>1</B>
ORACLE_BASE=/u01/app/oracle
ORACLE_TERM=xterm
</PRE>
<P><B>验证 <TT><FONT face=新宋体>linux2</FONT></TT> 上的环境变量</B></P><PRE>$ env | grep ORA
ORACLE_SID=orcl<B>2</B>
ORACLE_BASE=/u01/app/oracle
ORACLE_TERM=xterm
</PRE>
<P><B>安装集群就绪服务</B> </P><A name="CSS Timeout Computation in 10g RAC 10.1.0.3"></A>
<BLOCKQUOTE><STRONG>注意:</STRONG><B>Oracle RAC 10<EM>g</EM> 10.1.0.3 中的 CSS 超时计算</B> 请注意,安装 Oracle 集群件软件后,您需要修改集群件的 CSS 超时值。这对 10.1.0.3 和更高版本来说更是如此,这是因为其 CSS 超时计算方法不同于 10.1.0.2。从 Linux 平台(包括 IA32、IA64 和 x86-64)上的 Oracle 10.1.0.3 开始,已发现因 CSS 后台程序超时引起的多个问题。这在过去一直是困扰我的一大难题,尤其是在创建数据库 (DBCA) 时。例如,数据库创建过程经常因以下错误而失败:<TT><FONT face=新宋体>ORA-03113:end-of-file on communication channel</FONT></TT>。关键错误在日志文件 <TT><FONT face=新宋体>$ORA_CRS_HOME/css/log/ocssd1.log</FONT></TT> 中记录为: <PRE><B>clssnmDiskPingMonitorThread:voting device access hanging (45010 miliseconds)</B></PRE>实际上,问题源于慢速磁盘以及 CSS misscount 的默认值。CSS misscount 值表示在 CSS 删除节点前未收到的心跳数。CSS 使用该数值计算表决磁盘的 I/O 应被视为<I>超时</I> 的时间,从而将其终止以防止裂脑情况的出现。在 Linux 上,Oracle 10.1.0.2 和更高版本的 CSS misscount 的默认值为 <TT><FONT face=新宋体>60</FONT></TT>。但 10.1.0.2 版与 10.1.0.3 版的超时值(秒)计算公式并不相同。
<P>10.1.0.2 的超时值计算公式如下:</P><PRE>time_in_secs > CSS misscount, then EXIT</PRE>例如,在使用默认值 60 时,超时将为 60 秒。
<P>从 10.1.0.3 开始,该公式更改为:</P><PRE>disktimeout_in_secs = MAX((3 * CSS misscount)/4, CSS misscount - 15)</PRE>如果再次使用 CSS misscount 的默认值 60,则超时将为 45 秒。
<P>之所以进行此更改,主要是为了当节点出现故障时能够更快地重新配置集群。当在 10.1.0.2 中使用 CSS misscount 的默认值 60 时,我们将必须至少等待 60 秒才能超时,但从 10.1.0.3 开始,同一默认值 60 可以减少 15 秒,即 45 秒。 </P>
<P>说来说去为什么总是围绕 CSS misscount 呢?正如我在前面指出的,我所执行的数据库创建过程(或对系统执行的其他高 I/O 负载操作)通常会因为 Oracle 集群件崩溃而出现故障。高 I/O 将导致 CSS 在尝试查询表决磁盘时的超时很长。超过计算的超时时,Oracle 集群件将崩溃。这在本文中是一种常见情况,因为我们使用的 FireWire 驱动器不是最快的。驱动器越慢,这种情况就越经常出现。 </P>
<P>但一个好消息是,您可以修改 CSS misscount 值的默认值 60(对于 Linux) 实现更长的超时。对于在本文中使用的驱动器,可以将 CSS misscount 值设置为 360。尽管我无法对此进行验证,但我相信可以将 CSS Misscount 设置为 600。 </P>
<P>那么,如何修改 CSS misscount 的默认值?方法有很多。最简单的方法是先修改 <A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_3.html#CSS Timeout Computation in 10g RAC 10.1.0.3 - root.sh">Oracle 集群件的 <TT><FONT face=新宋体>root.sh</FONT></TT></A>,然后在集群中的每个节点上运行它。(可以在<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_3.html#CSS Timeout Computation in 10g RAC 10.1.0.3 - root.sh">此处</A>找到有关修改 Oracle 集群件的 <TT><FONT face=新宋体>root.sh</FONT></TT> 脚本的说明。) </P>
<P>如果已经安装了 Oracle 集群件,则仍可以使用 <TT><FONT face=新宋体>$ORA_CRS_HOME/bin/crsctl</FONT></TT> 命令修改 CSS misscount 值。(可以在“<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_3.html#Verify Oracle Clusterware / CSS misscount value">验证 Oracle 集群件/CSS misscount 值</A>”一节中找到有关使用 <TT><FONT face=新宋体>crsctl</FONT></TT> 验证和修改 CSS misscount 的说明。) </P></BLOCKQUOTE>
<P>执行以下任务安装 Oracle 集群件:</P><PRE>$ cd ~oracle
$ /u01/app/oracle/orainstall/clusterware/runInstaller -ignoreSysPrereqs
</PRE>
<P></P>
<TABLE class=bodycopy cellSpacing=0 cellPadding=3 width=700 align=center border=1>
<TBODY>
<TR>
<TD width=235><B>屏幕名称</B></TD>
<TD width=447><B>回应</B></TD></TR>
<TR>
<TD><B>Welcome Screen</B></TD>
<TD>单击 Next </TD></TR>
<TR>
<TD><B>Specify Inventory directory and credentials</B></TD>
<TD>接受默认值:<BR> <B>Inventory directory:</B> /u01/app/oracle/oraInventory<BR> <B>Operating System group name:</B>dba </TD></TR>
<TR>
<TD><B>Specify Home Details</B></TD>
<TD>保留 <I>Source</I> 目录的默认值。设置 ORACLE_HOME 名称(实际上,我将在本文中使用 $ORA_CRS_HOME)和位置的目标,如下所示:<BR> <B>Name:</B> OraCrs10g_home<BR> <B>Location:</B>/u01/app/oracle/product/crs </TD></TR>
<TR>
<TD><B>Product-Specific Prerequisite Checks</B></TD>
<TD>安装程序将执行一系列的检查以确定节点是否满足安装和配置 Oracle 集群件软件的最低要求。如果任何检查失败,您将需要通过单击该复选框手动验证失败的检查。我所执行的安装通过了所有检查,未出现任何问题。
<P>单击 Next 继续。 </P></TD></TR>
<TR>
<TD><B>Specify Cluster Configuration</B></TD>
<TD noWrap><B>Cluster Name:</B> crs<BR>
<TABLE class=bodycopy cellSpacing=1 cellPadding=2 width="100%" border=1>
<TBODY>
<TR bgColor=#e0e0e0>
<TD><B>Public Node Name</B></TD>
<TD><B>Private Node Name</B></TD>
<TD><B>Virtual Node Name</B></TD></TR>
<TR>
<TD>linux1</TD>
<TD>int-linux1</TD>
<TD>vip-linux1</TD></TR>
<TR>
<TD>linux2</TD>
<TD>int-linux2</TD>
<TD>vip-linux2</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD><B>Specify Network Interface Usage</B></TD>
<TD>
<TABLE class=bodycopy cellSpacing=1 cellPadding=2 width="100%" border=1>
<TBODY>
<TR bgColor=#e0e0e0>
<TD><B>Interface Name</B></TD>
<TD><B>Subnet</B></TD>
<TD><B>Interface Type</B></TD></TR>
<TR>
<TD>eth0</TD>
<TD>192.168.1.0</TD>
<TD>公共</TD></TR>
<TR>
<TD>eth1</TD>
<TD>192.168.2.0</TD>
<TD>专用</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD><B>Specify OCR Location</B></TD>
<TD>从带有 RAC 的 Oracle 数据库 10<I>g</I> 第 2 版 (10.2) 开始,Oracle 集群件支持创建镜像的 OCR 文件,从而增强了集群可靠性。就本示例而言,我通过保留默认选项“Normal Redundancy”镜像 OCR 文件:
<P><B>Specify OCR Location:</B> /u02/oradata/orcl/OCRFile<BR><B>Specify OCR Mirror Location:</B>/u02/oradata/orcl/OCRFile_mirror </P></TD></TR>
<TR>
<TD><B>Specify Voting Disk Location</B></TD>
<TD>从带有 RAC 的 Oracle 数据库 10<I>g</I> 第 2 版 (10.2) 开始,已经修改了 CSS,使您可以为 CSS 配置多个表决磁盘。在第 1 版 (10.1) 中,您只能配置一个表决磁盘。通过启用多个表决磁盘配置,您可以使用冗余的表决磁盘在独立的共享物理磁盘上为 RAC 数据库配置多个表决磁盘。该选项简化了 iSCSI 网络协议以及其他存储区域网络 (NAS) 存储解决方案的使用。注意,要利用多个表决磁盘的好处,必须至少配置三个表决磁盘。就本示例而言,我通过保留默认选项“Normal Redundancy”镜像表决磁盘:
<P><B>Voting Disk Location:</B> /u02/oradata/orcl/CSSFile<BR><B>Additional Voting Disk 1 Location:</B>/u02/oradata/orcl/CSSFile_mirror1<BR><B>Additional Voting Disk 2 Location:</B>/u02/oradata/orcl/CSSFile_mirror2 </P></TD></TR>
<TR>
<TD><B>Summary</B></TD>
<TD>由于某种原因,OUI 未能在开始安装前创建目录“$ORA_CRS_HOME/log”。您应在单击“Install”按钮前手动创建此目录。
<P>对于此安装,在集群的<STRONG>所有节点</STRONG>上手动创建文件 /u01/app/oracle/product/crs/log。OUI 将把所有错误记录到此目录中的一个日志文件上(只有它存在时)。 </P>
<P>单击 Install 开始安装! </P></TD></TR>
<TR>
<TD><B>Execute Configuration Scripts</B></TD>
<TD><A name="CSS Timeout Computation in 10g RAC 10.1.0.3 - root.sh"></A>安装完成后,将提示您运行 orainstRoot.sh 和 root.sh 脚本。 以“root”用户帐户在 RAC 集群的每个节点(从执行安装的节点开始)上打开一个新控制台窗口。
<P>导航到 /u01/app/oracle/oraInventory 目录,并在 RAC 集群的<B>所有节点</B>上运行 orainstRoot.sh。</P>
<P>在 RAC 集群中每个节点(从执行安装的节点开始)上的同一个新控制台窗口中,以“root”用户帐户登录。 </P>
<P>正如在前面的“<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_3.html#CSS Timeout Computation in 10g RAC 10.1.0.3">10g RAC 10.1.0.3 中的 CSS 超时计算</A>”一节指出的,您应在文件 $ORA_CRS_HOME/install/rootconfig 中将 CSS misscount 条目从 60 修改为 360(在集群中的每个节点上执行该操作),如下所示。将位于第 356 行上的以下条目: </P>
<P><TT><FONT face=新宋体>CLSCFG_MISCNT="-misscount 60" </FONT></TT></P>
<P>更改为</P>
<P><TT><FONT face=新宋体>CLSCFG_MISCNT="-misscount 360" </FONT></TT></P>
<P>现在,导航到 /u01/app/oracle/product/crs 目录并在集群中的每个节点(从执行安装的节点开始)上找到 root.sh 文件。在 RAC 集群的<B>所有节点上</B>运行 root.sh 文件,<B>一次一个</B>。 </P>
<P>您在所有节点上运行 root.sh 时将收到多个警告。可以忽略这些警告,没什么问题。 </P>
<P>可能需要等一会儿才会运行 root.sh。在最后一个节点上运行 root.sh 时,您将收到一个严重错误,其输出如下所示: </P>
<BLOCKQUOTE><TT><FONT face=新宋体>...<BR>Expecting the CRS daemons to be up within 600 seconds.<BR>CSS is active on these nodes.<BR>linux1<BR>linux2<BR>CSS is active on all nodes.<BR>Waiting for the Oracle CRSD and EVMD to start<BR>Oracle CRS stack installed and running under init(1M)<BR>Running vipca(silent) for configuring nodeapps<BR><FONT color=#ff0000>The given interface(s), "eth0" is not public.Public interfaces should be used to configure virtual IPs. </FONT></FONT></TT></BLOCKQUOTE>
<P>此问题为 Oracle 10.2.0.1(错误 <A href="https://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&p_id=338924.1" target=_blank>4437727</A> 中有说明)所特有,需要在继续操作前将其解决。最简单的变通方法是从出现错误的上一个节点中以 root 用户的身份手动重新运行 vipca (GUI)。请注意,vipca 是一个 GUI,需要根据您的 X 服务器设置 DISPLAY 变量: </P>
<P><TT><FONT face=新宋体># $ORA_CRS_HOME/bin/vipca </FONT></TT></P>
<P>出现“VIP Configuration Assistant”时,我按如下所示回应屏幕提示: </P>
<P> <B>Welcome:</B> 单击 Next<BR> <B>Network interfaces:</B>同时选择两个接口 - eth0 和 eth1<BR><B>Virtual IPs for cluster notes:</B><BR> <B>Node Name:</B>linux1<BR> <B>IP Alias Name:</B>vip-linux1<BR> <B>IP Address:</B>192.168.1.200<BR> <B>Subnet Mask:</B> 255.255.255.0<BR></P>
<P> <B>Node Name:</B> linux2<BR> <B>IP Alias Name:</B>vip-linux2<BR> <B>IP Address:</B>192.168.1.201<BR> <B>Subnet Mask:</B> 255.255.255.0<BR></P>
<P> <B>Summary:</B> 单击 Finish<BR> <B>Configuration Assistant Progress Dialog:</B>配置完成后单击 OK。<BR> <B>Configuration Results:</B> 单击 Exit<BR></P>
<P>返回到 OUI 并确认“Execute Configuration scripts”对话框。 </P></TD></TR>
<TR>
<TD><B>End of installation</B></TD>
<TD>安装结束时,退出 OUI。 </TD></TR></TBODY></TABLE>
<P><A name="Verify Oracle Clusterware / CSS misscount value"></A><B>验证 Oracle 集群件/CSS misscount 值</B> </P>
<P>在“<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_3.html#CSS Timeout Computation in 10g RAC 10.1.0.3">10g RAC 10.1.0.3 中的 CSS 超时计算</A>”一节中,我曾指出需要将 CSS Misscount 值从其默认值 60 修改为 360(或更高)。在该节中,我介绍了完成此修改的方法,即先修改 <A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_3.html#CSS Timeout Computation in 10g RAC 10.1.0.3 - root.sh"><TT><FONT face=新宋体>root.sh</FONT></TT></A> 脚本,然后在集群中的每个节点上运行它。如果无法在 <TT><FONT face=新宋体>root.sh</FONT></TT> 脚本中修改 CSS misscount 值,您仍然可以通过使用 <TT><FONT face=新宋体>$ORA_CRS_HOME/bin/crsctl</FONT></TT> 程序执行此操作。例如,要获取 CSS misscount 的当前值,使用以下命令: </P><PRE>$ORA_CRS_HOME/bin/crsctl get css misscount
360
</PRE>如果收到值 60,则将需要将它修改为 360,如下所示:
<UL>
<LI>只启动集群中的一个节点。就我的示例而言,我将关闭 <TT><FONT face=新宋体>linux2</FONT></TT> 并只启动 <TT><FONT face=新宋体>linux1</FONT></TT>。
<LI>从一个节点 (<TT><FONT face=新宋体>linux1</FONT></TT>) 中,以 <TT><FONT face=新宋体>root</FONT></TT> 用户帐户的身份登录并键入: <PRE>$ORA_CRS_HOME/bin/crsctl set css misscount 360</PRE>
<LI>重新引导此单个节点 (<TT><FONT face=新宋体>linux1</FONT></TT>)。
<LI>启动集群中的所有其他节点。 </LI></UL>
<P><B>验证 Oracle 集群件安装</B> </P>
<P>安装 Oracle 集群件后,可以运行几个测试来验证安装是否成功。在 RAC 集群的所有节点上运行下列命令。 </P>
<P><B>检查集群节点</B> </P><PRE>$ /u01/app/oracle/product/crs/bin/olsnodes -n
linux1 1
linux2 2
</PRE><B>检查 Oracle 集群件自动启动脚本</B> <PRE>$ ls -l /etc/init.d/init.*
-r-xr-xr-x  1 root root  1951 Oct  4 14:21 /etc/init.d/init.crs*
-r-xr-xr-x  1 root root  4714 Oct  4 14:21 /etc/init.d/init.crsd*
-r-xr-xr-x  1 root root 35394 Oct  4 14:21 /etc/init.d/init.cssd*
-r-xr-xr-x  1 root root  3190 Oct  4 14:21 /etc/init.d/init.evmd*
</PRE>
<P></P>
<HR>
<!-- **************** [ 20 ] ************************************************************ --><A name=20></A><SPAN class=parahead1>20. 安装 Oracle 数据库 10<I>g</I> 软件</SPAN>
<P><EM>仅在集群的<STRONG>一个节点</STRONG>上执行下列安装过程!Oracle 数据库软件将由 Oracle Universal Installer 安装到集群的所有其他节点。</EM> </P>
<P>成功安装 Oracle 集群件软件后,下一步是安装具有 RAC 的 Oracle 数据库 10<I>g</I> 第 2 版(10.2.0.1.0)。 </P>
<P>就本示例而言,您在安装该软件时将不使用“Create Database”选项。而是将在安装后使用数据库创建助手 (DBCA) 创建数据库。 </P>
<P><B>验证环境变量</B> </P>
<P>启动 OUI 之前,应先从控制台以 <TT><FONT face=新宋体>root</FONT></TT> 运行 <TT><FONT face=新宋体>xhost</FONT></TT> 命令以允许建立 X Server 连接。然后,取消 <TT><FONT face=新宋体>ORACLE_HOME</FONT></TT> 变量的设置并确认 RAC 集群的每个节点定义了唯一的 <TT><FONT face=新宋体>ORACLE_SID</FONT></TT>。还应确认我们是以 <TT><FONT face=新宋体>oracle</FONT></TT> 用户帐户登录的: </P>
<P><B>以 oracle 登录</B> </P><PRE># xhost +
access control disabled, clients can connect from any host

# su - oracle
</PRE>
<P><B>取消 ORACLE_HOME 的设置</B></P><PRE>$ unset ORA_CRS_HOME
$ unset ORACLE_HOME
$ unset ORA_NLS10
$ unset TNS_ADMIN
</PRE>
<P><B>验证 <TT><FONT face=新宋体>linux1</FONT></TT> 上的环境变量</B></P><PRE>$ env | grep ORA
ORACLE_SID=orcl<B>1</B>
ORACLE_BASE=/u01/app/oracle
ORACLE_TERM=xterm
</PRE>
<P><B>验证 <TT><FONT face=新宋体>linux2</FONT></TT> 上的环境变量</B></P><PRE>$ env | grep ORA
ORACLE_SID=orcl<B>2</B>
ORACLE_BASE=/u01/app/oracle
ORACLE_TERM=xterm
</PRE>
<P><B>安装 Oracle 数据库 10<I>g</I> 第 2 版软件</B> </P>
<P>使用以下命令安装 Oracle 数据库 10<I>g</I> 第 2 版软件:</P><PRE>$ cd ~oracle
$ /u01/app/oracle/orainstall/database/runInstaller -ignoreSysPrereqs
</PRE>
<P></P>
<TABLE class=bodycopy cellSpacing=0 cellPadding=3 width=640 align=center border=1>
<TBODY>
<TR>
<TD width=244><B>屏幕名称</B></TD>
<TD width=553><B>回应</B></TD></TR>
<TR>
<TD><B>Welcome Screen</B></TD>
<TD>单击 Next </TD></TR>
<TR>
<TD><B>Select Installation Type</B></TD>
<TD>我选择了 Enterprise Edition 选项。 </TD></TR>
<TR>
<TD><B>Specify Home Details</B></TD>
<TD>按如下所示设置 ORACLE_HOME 名称和位置的目标:<BR> <B>Name:</B> OraDb10g_home1<BR> <B>Location:</B>/u01/app/oracle/product/10.2.0/db_1 </TD></TR>
<TR>
<TD><B>Specify Hardware Cluster Installation Mode</B></TD>
<TD>选择 Cluster Installation 选项,然后选择所有可用节点。单击 Select All 选择所有服务器:linux1 和 linux2。
<P>如果安装此时停止,且有 RAC 节点的状态显示为“Node not reachable”(无法访问节点),则执行以下检查: </P>
<UL>
<LI>确保 Oracle 集群件正在所讨论的节点上运行。
<LI>确保您能够从执行安装的节点访问所讨论的节点。 </LI></UL></TD></TR>
<TR>
<TD noWrap><B>Product-Specific Prerequisite Checks</B></TD>
<TD>安装程序将执行一系列的检查以确定节点是否满足安装和配置 Oracle 数据库软件的最低要求。如果任何检查失败,您将需要通过单击该复选框手动验证失败的检查。
<P>在我执行的安装过程中,只有一个检查失败:</P>
<P><TT><FONT face=新宋体>Checking for ip_local_port_range=1024 - 65000; found ip_local_port_range=32768 - 61000. Failed </FONT></TT></P>
<P>只需单击“Checking kernel parameters”的复选框,然后单击 Next 继续。 </P></TD></TR>
<TR>
<TD><B>Select Database Configuration</B></TD>
<TD>选择选项“Install database software only”。
<P>记住,我们将在单独的步骤中使用 DBCA 创建集群化数据库。 </P></TD></TR>
<TR>
<TD><B>Summary</B></TD>
<TD>由于某种原因,OUI 未能在开始安装前为安装目录创建 $ORACLE_HOME/log。您应先手动创建此目录。
<P>对于此安装,在执行安装的节点上手动创建文件 <B>/u01/app/oracle/product/10.2.0/db_1/log</B>。OUI 将把所有错误记录到此目录中的一个日志文件上(只有它存在时)。 </P>
<P>单击 <STRONG>Install</STRONG> 开始安装! </P></TD></TR>
<TR>
<TD><B>Root Script Window - Run root.sh</B></TD>
<TD>安装完成后,将提示您运行 root.sh 脚本。需要记住的是,需要在 RAC 集群的<B>所有节点</B>上<B>一次一个</B>地(从运行数据库安装的节点开始)运行 root.sh 脚本。
<P>首先,以 root 用户帐户在安装 Oracle 10<I>g</I> 数据库软件的节点上打开一个新控制台窗口。我打开的是“linux1”。 </P>
<P>导航到 /u01/app/oracle/product/10.2.0/db_1 目录,运行 root.sh。 </P>
<P>在集群的所有节点上运行 root.sh 脚本后,返回 OUI 并确认“Execute Configuration scripts”对话框。 </P></TD></TR>
<TR>
<TD><B>End of installation</B></TD>
<TD>安装结束时,退出 OUI。 </TD></TR></TBODY></TABLE>
<P><BR></P>
<HR>
<!-- **************** [ 21 ] ************************************************************ --><A name=21></A><SPAN class=parahead1>21. 创建 TNS 监听器进程</SPAN>
<P><EM>仅在集群的<STRONG>一个节点</STRONG>上执行下列配置过程!网络配置助手 (NETCA) 将在集群所有节点上的集群化配置中设置 TNS 监听器。</EM> </P>
<P>DBCA 需要在 RAC 集群的所有节点上配置并运行 Oracle TNS 监听器进程,然后它才能创建集群化数据库。 </P>
<P>只需在集群的一个节点上执行 TNS 监听器创建过程。执行所有更改并将这些更改复制到集群的所有节点上。在一个节点(我将使用 <TT><FONT face=新宋体>linux1</FONT></TT>)上,启动 NETCA 并执行创建新 TNS 监听器进程的过程,同时配置节点的本地访问权限。 </P>
<P>运行 NETCA 前,确保以 <TT><FONT face=新宋体>oracle</FONT></TT> 用户重新登录并确认将 <TT><FONT face=新宋体>$ORACLE_HOME</FONT></TT> 环境变量设置为正确的位置。如果要使用前一节中使用的控制台窗口,则请注意,我们取消了 <TT><FONT face=新宋体>$ORACLE_HOME</FONT></TT> 环境变量的设置。这将导致在尝试运行 <TT><FONT face=新宋体>netca</FONT></TT> 时出现错误。 </P>
<P>要启动 NETCA,以 <TT><FONT face=新宋体>oracle</FONT></TT> 用户帐户运行以下 GUI 实用程序: </P><PRE># su - oracle
$ netca &
</PRE>以下屏幕截图将引导您为我们 RAC 环境创建一个新的 Oracle 监听器。
<TABLE class=bodycopy cellSpacing=0 cellPadding=3 width=640 align=center border=1>
<TBODY>
<TR>
<TD><B>屏幕名称</B></TD>
<TD><B>回应</B></TD></TR>
<TR>
<TD><B>Select the Type of Oracle<BR>Net Services Configuration</B></TD>
<TD>选择 Cluster Configuration </TD></TR>
<TR>
<TD><B>Select the nodes to configure</B></TD>
<TD>选择所有节点:linux1 和 linux2。 </TD></TR>
<TR>
<TD><B>Type of Configuration</B></TD>
<TD>选择 Listener configuration。 </TD></TR>
<TR>
<TD><B>Listener Configuration - Next 6 Screens</B></TD>
<TD>后续屏幕现在与其他常规监听器配置的相似。您只需接受后续 6 个屏幕的默认参数即可:<BR> <B>What do you want to do:</B> Add<BR> <B>Listener name:</B>LISTENER<BR> <B>Selected protocols:</B>TCP<BR> <B>Port number:</B>1521<BR> <B>Configure another listener:</B>No<BR> <B>Listener configuration complete!</B>[ Next ]<BR>您将返回到此 Welcome (Type of Configuration) 屏幕。 </TD></TR>
<TR>
<TD><B>Type of Configuration</B></TD>
<TD>选择 Naming Methods configuration。 </TD></TR>
<TR>
<TD><B>Naming Methods Configuration</B></TD>
<TD>后续屏幕是:<BR> <B>Selected Naming Methods:</B> Local Naming<BR> <B>Naming Methods configuration complete!</B>[ Next ]<BR>您将返回到此 Welcome (Type of Configuration) 屏幕。 </TD></TR>
<TR>
<TD><B>Type of Configuration</B></TD>
<TD>单击 Finish 退出 NETCA。 </TD></TR></TBODY></TABLE>
<P>Oracle TNS 监听器进程现在应在 RAC 集群的所有节点上运行:</P><PRE>$ hostname
linux1

$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_LINUX1

=====================

$ hostname
linux2

$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_LINUX2
</PRE>
<P><BR></P>
<HR>
<!-- **************** [ 22 ] ************************************************************ --><A name=22></A><SPAN class=parahead1>22. 安装 Oracle 数据库 10<I>g</I> 随附 CD 软件</SPAN>
<P><EM>仅在集群的一个节点上执行下列安装过程!Oracle 数据库 10<I>g</I> 随附 CD 软件将由 Oracle Universal Installer 安装到集群的所有其他节点。</EM> </P>
<P>成功安装 Oracle 数据库软件后,下一步是安装 Oracle 数据库 10<I>g</I> 第 2 版随附 CD 软件(10.2.0.1.0)。 </P>
<P>请注意,这是一个可选步骤。就本指南而言,我的测试数据库将通常使用 Java 虚拟机 (Java VM) 和 Oracle <I>inter</I>Media,因此将需要安装 Oracle 数据库 10<I>g</I> 随附 CD。要执行的安装类型将为 <I>Oracle 数据库 10g 产品</I> 安装类型。 </P>
<P>此安装类型包括用于提高 Java 性能的原生编译的 Java 库 (NCOMP) 文件。如果不安装 NCOMP 文件,则在使用 Java VM 的数据库升级为修补版时,将发生 <B>ORA-29558:JAccelerator (NCOMP) not installed</B> 错误。 </P>
<P><B>安装随附 CD 软件</B> </P>
<P>使用以下命令安装随附 CD 软件:</P><PRE>$ cd ~oracle
$ /u01/app/oracle/orainstall/companion/runInstaller -ignoreSysPrereqs
</PRE>
<P></P>
<TABLE class=bodycopy cellSpacing=0 cellPadding=3 width=640 align=center border=1>
<TBODY>
<TR>
<TD width=244><B>屏幕名称</B></TD>
<TD width=553><B>回应</B></TD></TR>
<TR>
<TD><B>Welcome Screen</B></TD>
<TD>单击 Next </TD></TR>
<TR>
<TD><B>Select a Product to Install</B></TD>
<TD>选择“Oracle Database 10g Products 10.2.0.1.0”选项。 </TD></TR>
<TR>
<TD><B>Specify Home Details</B></TD>
<TD>将 ORACLE_HOME 名称和位置的目标设置为前面安装的 Oracle10g 数据库软件的目标,如下所示:<BR> <B>Name:</B> OraDb10g_home1<BR> <B>Location:</B>/u01/app/oracle/product/10.2.0/db_1 </TD></TR>
<TR>
<TD><B>Specify Hardware Cluster Installation Mode</B></TD>
<TD>默认情况下,将选择 Cluster Installation 选项以及集群中的所有可用节点。保留这些默认选项,然后单击 Next 继续。
<P>如果安装此时停止,且有 RAC 节点的状态显示为“Node not reachable”,则执行以下检查: </P>
<UL>
<LI>确保 Oracle 集群件正在所讨论的节点上运行。
<LI>确保您能够从执行安装的节点访问所讨论的节点。 </LI></UL></TD></TR>
<TR>
<TD noWrap><B>Product-Specific Prerequisite Checks</B></TD>
<TD>安装程序将执行一系列的检查以确定节点是否满足安装和配置随附 CD 软件的最低要求。如果任何检查失败,您将需要通过单击该复选框手动验证失败的检查。我所执行的安装通过了所有检查,未出现任何问题。
<P>单击 <STRONG>Next</STRONG> 继续。 </P></TD></TR>
<TR>
<TD><B>Summary</B></TD>
<TD>在 Summary 屏幕上,单击 Install 开始安装! </TD></TR>
<TR>
<TD><B>End of installation</B></TD>
<TD>安装结束时,退出 OUI。 </TD></TR></TBODY></TABLE>
<P><BR></P>
<HR>
<!-- **************** [ 23 ] ************************************************************ --><A name=23></A><SPAN class=parahead1>23. 创建 Oracle 集群数据库</SPAN>
<P><EM>数据库创建过程应只在集群的<STRONG>一个节点</STRONG>上执行!</EM> </P>
<P>我们将使用 DBCA 创建集群化数据库。 </P>
<P>在执行 DBCA 前,确保为 <TT><FONT face=新宋体>$ORACLE_BASE/product/10.2.0/db_1</FONT></TT> 环境正确设置了 <TT><FONT face=新宋体>$ORACLE_HOME</FONT></TT> 和 <TT><FONT face=新宋体>$PATH</FONT></TT>。 </P>
<P>在试图开始创建集群化数据库之前,还应确保已安装的所有服务(Oracle TNS 监听器、Oracle 集群件进程等)正在运行。 </P>
<P><B>创建集群化数据库</B> </P>
<P>要开始数据库创建过程,运行以下命令: </P><PRE># xhost +
access control disabled, clients can connect from any host

# su - oracle
$ dbca &
</PRE>
<TABLE class=bodycopy cellSpacing=0 cellPadding=3 width=640 align=center border=1>
<TBODY>
<TR>
<TD><B>屏幕名称</B></TD>
<TD><B>回应</B></TD></TR>
<TR>
<TD><B>Welcome Screen</B></TD>
<TD>选择“Oracle Real Application Clusters database”。</TD></TR>
<TR>
<TD><B>Operations</B></TD>
<TD>选择 <STRONG>Create a Database</STRONG>。 </TD></TR>
<TR>
<TD><B>Node Selection</B></TD>
<TD>单击 <STRONG>Select All</STRONG> 按钮选择所有服务器:linux1 和 linux2。 </TD></TR>
<TR>
<TD><B>Database Templates</B></TD>
<TD>选择 <STRONG>Custom Database</STRONG>。 </TD></TR>
<TR>
<TD><B>Database Identification</B></TD>
<TD>选择:<BR> <B>Global Database Name:</B> orcl.idevelopment.info<BR> <B>SID Prefix:</B>orcl
<P>我将 idevelopment.info 用于数据库域。您可以使用任何域。请记住,此域不必为有效的 DNS 域。 </P></TD></TR>
<TR>
<TD><B>Management Option</B></TD>
<TD>保留此处的默认选项,即“Configure the Database with Enterprise Manager / Use Database Control for Database Management”。</TD></TR>
<TR>
<TD><B>Database Credentials</B></TD>
<TD>我选择 <STRONG>Use the Same Password for All Accounts</STRONG>。输入口令(两次)并确保此口令不是以数字开头。 </TD></TR>
<TR>
<TD><B>Storage Options</B></TD>
<TD>对于本指南,我们将选择 <STRONG>use ASM</STRONG>。 </TD></TR>
<TR>
<TD><B>Create ASM Instance</B></TD>
<TD>提供要用于新 ASM 实例的 SYS 口令。
<P>此外,从第 2 版开始,ASM 实例服务器参数文件 (SPFILE) 需要位于共享磁盘上。您将需要修改“Create server parameter file (SPFILE)”的默认条目以驻留在 OCFS2 分区上,如下所示:/u02/oradata/orcl/dbs/spfile+ASM.ora。所有其他选项可以保留其默认值。 </P>
<P>然后将有一个对话框询问您是否要创建并启动 ASM 实例。选择 <STRONG>OK</STRONG> 按钮确认此对话框。 </P>
<P>OUI 将立即在 RAC 集群的所有节点上创建并启动 ASM 实例。 </P></TD></TR>
<TR>
<TD><B>ASM Disk Groups</B></TD>
<TD>首先,单击 <STRONG>Create New</STRONG> 按钮。这将弹出“Create Disk Group”窗口,其中显示了我们在前面使用 ASMLib 创建的三个卷。
<P>如果在本文前面部分创建的卷没有显示在“Select Member Disks”窗口中:(ORCL:VOL1、ORCL:VOL2 和 ORCL:VOL3),则单击“Change Disk Discovery Path”按钮并输入“ORCL:VOL*”。 </P>
<P>对于第一个“Disk Group Name”,我使用了字符串“ORCL_DATA1”。在“Select Member Disks”窗口中选择前两个 ASM 卷(ORCL:VOL1 和 ORCL:VOL2)。将“Redundancy”设置为“Normal”。这两列现在的状态应为“PROVISIONED”。 </P>
<P>确认此窗口中的所有值均正确后,单击 <STRONG>[OK]</STRONG> 按钮。这将显示“ASM Disk Group Creation”对话框。完成 ASM 磁盘组创建过程时,您将返回到“ASM Disk Groups”窗口。 </P>
<P>再次单击 <STRONG>Create New</STRONG> 按钮。对于第二个“Disk Group Name”,我使用了字符串 FLASH_RECOVERY_AREA。在“Select Member Disks”窗口中选择最后一个 ASM 卷 (ORCL:VOL3)。将“Redundancy”选项设置为“External”。最后一个卷的状态也将更改为“PROVISIONED”。 </P>
<P>确认此窗口中的所有值均正确后,单击 <STRONG>[OK]</STRONG> 按钮。这将显示“ASM Disk Group Creation”对话框。 </P>
<P>完成 ASM 磁盘组创建过程后,您将返回到“ASM Disk Groups”窗口,其中创建并选择了两个磁盘组。使用新创建的 Disk Group Name ORCL_DATA1 旁边的复选框选择一个磁盘组(确保未选择 FLASH_RECOVERY_AREA 的磁盘组),然后单击 <STRONG>[Next] </STRONG>继续。 </P></TD></TR>
<TR>
<TD><B>Database File Locations</B></TD>
<TD>
<P>我选择使用默认值,即使用 Oracle Managed Files:</P>
<P><B>Database Area:</B> +ORCL_DATA1 </P></TD></TR>
<TR>
<TD><B>Recovery Configuration</B></TD>
<TD>选中“Specify Flash Recovery Area”选项。
<P>对于 Flash Recovery Area,使用磁盘组名称 +FLASH_RECOVERY_AREA。 </P>
<P>我使用的磁盘组的大小约为 100GB。我使用了 90GB 的 Flash Recovery Area Size (91136 MB)。 </P></TD></TR>
<TR>
<TD><B>Database Content</B></TD>
<TD>我将所有数据库组件(和目标表空间)设置为它们的默认值,但选择 Example Schemas 也完全可以。由于我们安装了 Oracle 随附 CD 软件,因此该选项可用。 </TD></TR>
<TR>
<TD><B>Database Services</B></TD>
<TD>对于此测试配置,单击 <STRONG>Add</STRONG>,然后输入 orcltest 作为“Service Name”。将这两个实例设置为 Preferred,并为“TAF Policy”选择 Basic。 </TD></TR>
<TR>
<TD><B>Initialization Parameters</B></TD>
<TD>根据您的环境更改任意参数。我保留了所有这些参数的默认设置。 </TD></TR>
<TR>
<TD><B>Database Storage</B></TD>
<TD>根据您的环境更改任意参数。我保留了所有这些参数的默认设置。 </TD></TR>
<TR>
<TD><B>Creation Options</B></TD>
<TD>选择默认选项 Create Database,并单击 <STRONG>Finish</STRONG> 启动数据库创建过程。
<P>在“Summary”屏幕上单击 <STRONG>OK</STRONG>。 </P></TD></TR>
<TR>
<TD><B>End of Database Creation</B></TD>
<TD>在数据库创建结束时,退出 DBCA。
<P>退出 DBCA 时,将弹出另一对话框,指示它正在启动所有 Oracle 实例以及 HA 服务“orcltest”。这可能需要几分钟的时间才能完成。完成时,所有窗口和对话框将关闭。 </P></TD></TR></TBODY></TABLE>
<P>完成 DBCA 后,您就启动了一个功能完善的 Oracle RAC 集群! </P>
<P><B>创建 <TT><FONT face=新宋体>orcltest</FONT></TT> 服务</B> </P>
<P>在创建 Oracle 集群化数据库的过程中,您添加了一个名为 <TT><FONT face=新宋体>orcltest</FONT></TT> 的服务,我们将用它来连接启用了 TAF 的数据库。在我的多个安装中,均将此服务添加到了 tnsnames.ora 中,但从未将其作为每个 Oracle 实例的服务更新过。 </P>
<P>使用以下命令来验证已成功添加 <TT><FONT face=新宋体>orcltest</FONT></TT> 服务:</P><PRE>SQL> show parameter service

NAME                 TYPE        VALUE
-------------------- ----------- --------------------------------
service_names        string      orcl.idevelopment.info, orcltest
</PRE>如果定义的唯一服务是用于 <TT><FONT face=新宋体>orcl.idevelopment.info</FONT></TT> 的,则您将需要手动将此服务添加到两个实例中: <PRE>SQL> show parameter service

NAME                 TYPE        VALUE
-------------------- ----------- --------------------------
service_names        string      orcl.idevelopment.info

SQL> alter system set service_names =
2  'orcl.idevelopment.info, orcltest.idevelopment.info' scope=both;
  <BR>
  </PRE>
<HR>
<!-- **************** [ 24 ] ************************************************************ --><A name=24></A><SPAN class=parahead1>24. 验证 TNS 联网文件</SPAN>
<P><EM>确保在集群的<STRONG>所有节点</STRONG>上配置 TNS 联网文件!</EM> </P>
<P><B>listener.ora</B> </P>
<P>我们已经在<A class=bodylink href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_3.html#21">第 21 节</A>中介绍了如何为集群化环境创建 TNS 监听器配置文件 (listener.ora)。应正确配置 <TT><FONT face=新宋体>listener.ora</FONT></TT> 文件且无需对它修改。 </P>
<P>为清楚起见,我将节点 <TT><FONT face=新宋体>linux1</FONT></TT> 的 listener.ora 文件副本包含在了本指南的<A class=bodylink href="http://www.oracle.com/technology/pub/files/hunter_rac10gr2_support.zip">支持文件</A>中。我还包含了 tnsnames.ora 文件的副本,该文件由 Oracle 配置并可以用于测试透明应用程序故障切换 (TAF)。此文件应已在 RAC 集群的每个节点上进行了配置。 </P>
<P>您可以将这些条目中的任何条目包含在需要访问集群化数据库的其他客户端计算机上。 </P>
<P><B>从外部客户端连接集群化数据库</B> </P>
<P>这是一个可选步骤,但我要执行它以便确认正确配置了 TNS 文件。使用其他安装了 Oracle(9<I>i</I> 或 10<I>g</I>)的计算机(例如,连接网络的 Windows 计算机)并从集群的任一节点添加为集群化数据库创建的 TNS 条目(位于 tnsnames.ora 中)。 </P>
<P>然后使用在 <TT><FONT face=新宋体>tnsnames.ora</FONT></TT> 文件中定义的所有可用服务名称连接集群化数据库: </P><PRE>C:\> sqlplus system/manager@orcl2
C:\> sqlplus system/manager@orcl1
C:\> sqlplus system/manager@orcltest
C:\> sqlplus system/manager@orcl
</PRE>
<P></P>
<HR>
<!-- **************** [ 25 ] ************************************************************ --><A name=25></A><SPAN class=parahead1>25. 创建/更改表空间</SPAN>
<P>创建集群化数据库时,我们将所有表空间设置为它们的默认大小。如果您将一个大型驱动器用作共享存储,则可能想创建一个大小可以调整的测试数据库。 </P>
<P>以下是几个可为测试数据库修改和创建所有表空间的 SQL 命令。请记住,此示例中使用的数据库文件名称(OMF 文件)可能与 Oracle 为您的环境创建的数据库文件名称不同。可以使用以下查询确定环境的文件名: </P>
<P></P><PRE>SQL> select tablespace_name, file_name
2  from dba_data_files
3  union
4  select tablespace_name, file_name
5  from dba_temp_files;

TABLESPACE_NAME     FILE_NAME
--------------- --------------------------------------------------
EXAMPLE         +ORCL_DATA1/orcl/datafile/example.257.570913311
INDX            +ORCL_DATA1/orcl/datafile/indx.270.570920045
SYSAUX          +ORCL_DATA1/orcl/datafile/sysaux.260.570913287
SYSTEM          +ORCL_DATA1/orcl/datafile/system.262.570913215
TEMP            +ORCL_DATA1/orcl/tempfile/temp.258.570913303
UNDOTBS1        +ORCL_DATA1/orcl/datafile/undotbs1.261.570913263
UNDOTBS2        +ORCL_DATA1/orcl/datafile/undotbs2.265.570913331
USERS           +ORCL_DATA1/orcl/datafile/users.264.570913355</PRE>
<P></P><PRE>$ sqlplus "/ as sysdba"

SQL> create user scott identified by tiger default tablespace users;
SQL> grant dba, resource, connect to scott;

SQL> alter database datafile '+ORCL_DATA1/orcl/datafile/users.264.570913355' resize 1024m;
SQL> alter tablespace users add datafile '+ORCL_DATA1' size 1024m autoextend off;

SQL> create tablespace indx datafile '+ORCL_DATA1' size 1024m
2  autoextend on next 50m maxsize unlimited
3  extent management local autoallocate
4  segment space management auto;

SQL> alter database datafile '+ORCL_DATA1/orcl/datafile/system.262.570913215' resize 800m;

SQL> alter database datafile '+ORCL_DATA1/orcl/datafile/sysaux.260.570913287' resize 500m;

SQL> alter tablespace undotbs1 add datafile '+ORCL_DATA1' size 1024m
2  autoextend on next 50m maxsize 2048m;

SQL> alter tablespace undotbs2 add datafile '+ORCL_DATA1' size 1024m
2  autoextend on next 50m maxsize 2048m;

SQL> alter database tempfile '+ORCL_DATA1/orcl/tempfile/temp.258.570913303' resize 1024m;
</PRE>以下是我为我的测试数据库环境定义的表空间快照: <PRE><FONT size=-1>Status    Tablespace Name TS Type      Ext. Mgt.Seg.Mgt.Tablespace Size  Used (in bytes) Pct.Used
--------- --------------- ------------ ---------- --------- ------------------ ------------------ ---------
ONLINE    UNDOTBS1        UNDO         LOCAL      MANUAL       1,283,457,024      85,065,728        7
ONLINE    SYSAUX          PERMANENT    LOCAL      AUTO           524,288,000      275,906,560        53
ONLINE    USERS           PERMANENT    LOCAL      AUTO         2,147,483,648          131,072         0
ONLINE    SYSTEM          PERMANENT    LOCAL      MANUAL         838,860,800      500,301,824        60
ONLINE    EXAMPLE         PERMANENT    LOCAL      AUTO             157,286,400         83,820,544        53
ONLINE    INDX            PERMANENT    LOCAL      AUTO         1,073,741,824           65,536         0
ONLINE    UNDOTBS2        UNDO         LOCAL      MANUAL       1,283,457,024        3,801,088         0
ONLINE    TEMP            TEMPORARY    LOCAL      MANUAL       1,073,741,824       27,262,976         3
                                                            ------------------ ------------------ ---------
avg                                                                                                  22
sum                                                            8,382,316,544      976,355,328

8 rows selected.
</FONT></PRE>
<P><BR></P>
<HR>
<!-- **************** [ 26 ] ************************************************************ --><A name=26></A><SPAN class=parahead1>26. 验证 RAC 集群和数据库配置</SPAN>
<P><EM>应在集群的<STRONG>所有节点</STRONG>上执行以下 RAC 验证检查!对于本指南,我将只从 <TT><FONT face=新宋体>linux1</FONT></TT> 中执行这些检查。</EM> </P>
<P>本节提供了几个可用于验证 Oracle RAC 10<I>g</I> 配置的 <TT><FONT face=新宋体>srvctl</FONT></TT> 命令和 SQL 查询。 </P>
<P>有五个为 SRVCTL 定义的节点级任务: </P>
<UL class=bodycopy>
<LI>添加和删除节点级应用程序
<LI>设置和取消设置节点级应用程序的环境
<LI>管理节点应用程序
<LI>管理 ASM 实例
<LI>启动和停止一组包含虚拟 IP 地址、监听器、Oracle 通知服务和 Oracle 企业管理器代理的程序(出于维护目的)。 </LI></UL>
<P><B>所有实例和服务的状态</B></P><PRE>$ srvctl status database -d orcl
Instance orcl1 is running on node linux1
Instance orcl2 is running on node linux2
</PRE>
<P><B>单个实例的状态</B></P><PRE>$ srvctl status instance -d orcl -i orcl2
Instance orcl2 is running on node linux2
</PRE>
<P><B>在数据库全局命名服务的状态</B></P><PRE>$ srvctl status service -d orcl -s orcltest
Service orcltest is running on instance(s) orcl2, orcl1
</PRE>
<P><B>特定节点上节点应用程序的状态</B></P><PRE>$ srvctl status nodeapps -n linux1
VIP is running on node:linux1
GSD is running on node:linux1
Listener is running on node:linux1
ONS daemon is running on node:linux1
</PRE>
<P><B>ASM 实例的状态</B></P><PRE>$ srvctl status asm -n linux1
ASM instance +ASM1 is running on node linux1.
</PRE>
<P><B>列出配置的所有数据库</B></P><PRE>$ srvctl config database
orcl
</PRE>
<P><B>显示 RAC 数据库的配置</B></P><PRE>$ srvctl config database -d orcl
linux1 orcl1 /u01/app/oracle/product/10.2.0/db_1
linux2 orcl2 /u01/app/oracle/product/10.2.0/db_1
</PRE>
<P><B>显示指定集群数据库的所有服务</B></P><PRE>$ srvctl config service -d orcl
orcltest PREF:orcl2 orcl1 AVAIL:
</PRE>
<P><B>显示节点应用程序的配置 -(VIP、GSD、ONS、监听器)</B></P><PRE>$ srvctl config nodeapps -n linux1 -a -g -s -l
VIP exists.:/vip-linux1/192.168.1.200/255.255.255.0/eth0:eth1
GSD exists.
ONS daemon exists.
Listener exists.
</PRE>
<P><B>显示 ASM 实例的配置</B></P><PRE>$ srvctl config asm -n linux1
+ASM1 /u01/app/oracle/product/10.2.0/db_1
</PRE>
<P><B>集群中所有正在运行的实例</B></P><PRE>SELECT
inst_id
, instance_number inst_no
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;

INST_ID  INST_NO INST_NAME  PAR STATUS  DB_STATUS    STATE     HOST
-------- -------- ---------- --- ------- ------------ --------- -------
1        1 orcl1      YES OPEN    ACTIVE       NORMAL    linux1
2        2 orcl2      YES OPEN    ACTIVE       NORMAL    linux2
</PRE>
<P><B>位于磁盘组中的所有数据文件</B></P><PRE>select name from v$datafile
union
select member from v$logfile
union
select name from v$controlfile
union
select name from v$tempfile;

NAME
-------------------------------------------
+FLASH_RECOVERY_AREA/orcl/controlfile/current.258.570913191
+FLASH_RECOVERY_AREA/orcl/onlinelog/group_1.257.570913201
+FLASH_RECOVERY_AREA/orcl/onlinelog/group_2.256.570913211
+FLASH_RECOVERY_AREA/orcl/onlinelog/group_3.259.570918285
+FLASH_RECOVERY_AREA/orcl/onlinelog/group_4.260.570918295
+ORCL_DATA1/orcl/controlfile/current.259.570913189
+ORCL_DATA1/orcl/datafile/example.257.570913311
+ORCL_DATA1/orcl/datafile/indx.270.570920045
+ORCL_DATA1/orcl/datafile/sysaux.260.570913287
+ORCL_DATA1/orcl/datafile/system.262.570913215
+ORCL_DATA1/orcl/datafile/undotbs1.261.570913263
+ORCL_DATA1/orcl/datafile/undotbs1.271.570920865
+ORCL_DATA1/orcl/datafile/undotbs2.265.570913331
+ORCL_DATA1/orcl/datafile/undotbs2.272.570921065
+ORCL_DATA1/orcl/datafile/users.264.570913355
+ORCL_DATA1/orcl/datafile/users.269.570919829
+ORCL_DATA1/orcl/onlinelog/group_1.256.570913195
+ORCL_DATA1/orcl/onlinelog/group_2.263.570913205
+ORCL_DATA1/orcl/onlinelog/group_3.266.570918279
+ORCL_DATA1/orcl/onlinelog/group_4.267.570918289
+ORCL_DATA1/orcl/tempfile/temp.258.570913303

21 rows selected.
</PRE>
<P><B>属于“ORCL_DATA1”磁盘组的所有 ASM 磁盘</B></P><PRE>SELECT path
FROM   v$asm_disk
WHERE  group_number IN (select group_number
from v$asm_diskgroup
where name = 'ORCL_DATA1');

PATH
----------------------------------
ORCL:VOL1
ORCL:VOL2
</PRE>
<P><BR></P>
<HR>
<!-- **************** [ 27 ] ************************************************************ --><A name=27></A><SPAN class=parahead1>27. 启动/停止集群</SPAN>
<P>此时,我们已经完全安装并配置了 Oracle RAC 10<I>g</I> 并拥有了一个功能完善的集群化数据库。 </P>
<P>至此完成所有工作后,您可能会问“那我又怎样启动和停止服务呢?”如果您遵循了本指南中的说明,则所有服务(包括 Oracle 集群件、所有 Oracle 实例、企业管理器数据库控制台等)应在 Linux 节点每次重新引导时自动启动。 </P>
<P>但有时您可能想要关闭某个节点,然后手动重新启动它。或者,您可能发现企业管理器没有启动它而需要启动它。本节提供了启动和停止集群环境的命令(使用 <TT><FONT face=新宋体>SRVCTL</FONT></TT>)。 </P>
<P>确保您是以 <TT><FONT face=新宋体>oracle</FONT></TT> UNIX 用户登录的。我们将从 <TT><FONT face=新宋体>linux1</FONT></TT> 运行本节中的所有命令: </P><PRE># su - oracle

$ hostname
linux1
</PRE>
<P><B>停止 Oracle RAC 10<I>g</I> 环境</B> </P>
<P>第一步是停止 Oracle 实例。当此实例(和相关服务)关闭后,关闭 ASM 实例。最后,关闭节点应用程序(虚拟 IP、GSD、TNS 监听器和 ONS)。 </P><PRE>$ export ORACLE_SID=orcl1
$ emctl stop dbconsole
$ srvctl stop instance -d orcl -i orcl1
$ srvctl stop asm -n linux1
$ srvctl stop nodeapps -n linux1
</PRE>
<P><B>启动 Oracle RAC 10<I>g</I> 环境</B> </P>
<P>第一步是启动节点应用程序(虚拟 IP、GSD、TNS 监听器和 ONS)。当成功启动节点应用程序后,启动 ASM 实例。最后,启动 Oracle 实例(和相关服务)以及企业管理器数据库控制台。 </P><PRE>$ export ORACLE_SID=orcl1
$ srvctl start nodeapps -n linux1
$ srvctl start asm -n linux1
$ srvctl start instance -d orcl -i orcl1
$ emctl start dbconsole
</PRE>
<P><B>使用 SRVCTL 启动/停止所有实例</B> </P>
<P>启动/停止所有实例及其启用的服务。我只是觉得有意思就把此步骤作为关闭所有实例的一种方法加进来了! </P><PRE>$ srvctl start database -d orcl

$ srvctl stop database -d orcl
</PRE>
<P><BR></P>
<HR>
<!-- **************** [ 28 ] ************************************************************ --><A name=28></A><SPAN class=parahead1>28. 透明的应用程序故障切换 (TAF)</SPAN>
<P>企业通常需要他们的企业应用程序提供 99.99%(甚至 99.999%)的可用性。想一想,要确保全年停机时间不超过 0.5 小时或者甚至没有停机时间得花费多大代价!为了满足众多这种高可用性要求,企业正投资于可以在一个参与系统出现故障时提供自动故障切换的机制。就 Oracle 数据库的可用性而言,Oracle RAC 10<I>g</I> 通过它的高级故障切换机制提供了一个卓越的解决方案。Oracle RAC 10<I>g</I> 包含了提供持续可用性所需的必要组件,这些组件均在一个集群配置中工作;当集群中的某个参与系统出现故障时,将把用户自动移植到其他可用系统。 </P>
<P>透明的应用程序故障切换 (TAF) 选件是 Oracle RAC 10<I>g</I> 一个负责处理故障切换的主要组件。它将把所有断开的数据库连接(和进程)重新连接到集群的其他节点上。故障切换对用户是完全透明的。 </P>
<P>这最后一节简短介绍了 TAF 在 Oracle RAC 10<I>g</I> 中的工作方式。请注意,对 Oracle RAC 10<I>g</I> 中的故障切换进行全面介绍可能需要单独的一篇文章,我在此处只想提供一个简短概述。 </P>
<P>一个重要的说明是,TAF 自动在 OCI 库中发生。也就是说,您的应用程序(客户端)代码不需要更改便可以利用 TAF。但您需要在 Oracle TNS 文件 tnsnames.ora 中执行某些配置步骤。(请记住,直到编写本文时,由于 Java 瘦客户端从不读取 tnsnames.ora,因此它将无法参与 TAF。) </P>
<P><B>设置 tnsnames.ora 文件</B> </P>
<P>在演示 TAF 之前,我们需要验证在一个非 RAC 客户端计算机(如果您有一台安装了 Windows 计算机)上的 tnsnames.ora 文件中存在一个有效的条目。确保您安装了 Oracle RDBMS 软件。(实际上,您只需要在客户端上安装 Oracle 软件。) </P>
<P>在本指南的创建集群化数据库过程中,我们创建了一个将用于测试 TAF 的名为 ORCLTEST 的新服务。它为负载均衡和故障切换提供了所有必需的配置参数。可以将此条目的内容复制到客户端计算机(本示例中使用了我的 Windows 便携式计算机)上的 %ORACLE_HOME%\network\admin\tnsnames.ora 文件中: </P><PRE>...
ORCLTEST =
(DESCRIPTION=
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-linux1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-linux2)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME = orcltest.idevelopment.info)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
      )
    )
  )
...
</PRE><B>查看会话的故障切换信息的 SQL 查询</B>
<P>以下 SQL 查询可以用来查看一个会话的故障切换类型、故障切换方法和是否发生了故障切换。我们将在这个例子中自始至终使用这个查询。</P><PRE>COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11

SELECT
instance_name
, host_name
, NULL AS failover_type
, NULL AS failover_method
, NULL AS failed_over
FROM v$instance
UNION
SELECT
NULL
, NULL
, failover_type
, failover_method
, failed_over
FROM v$session
WHERE username = 'SYSTEM';
</PRE>
<P><B>TAF 演示</B> </P>
<P>从 Windows 计算机(或其他非 RAC 客户端计算机)中,以 <TT><FONT face=新宋体>SYSTEM</FONT></TT> 用户登录使用 <TT><FONT face=新宋体>orcltest</FONT></TT> 服务的集群化数据库: </P><PRE>C:\> sqlplus system/manager@orcltest

COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11

SELECT
instance_name
, host_name
, NULL AS failover_type
, NULL AS failover_method
, NULL AS failed_over
FROM v$instance
UNION
SELECT
NULL
, NULL
, failover_type
, failover_method
, failed_over
FROM v$session
WHERE username = 'SYSTEM';


INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------- ------------- --------------- -----------
orcl1         linux1
SELECT        BASIC           NO
</PRE>
<P><B>不要注销上面的 SQL*Plus 会话!</B> </P>
<P>我们已经运行了上面的查询,现在我们应该使用 <TT><FONT face=新宋体>abort</FONT></TT> 选项来关闭 <TT><FONT face=新宋体>linux1</FONT></TT> 上的 <TT><FONT face=新宋体>orcl1</FONT></TT> 实例。要执行这一操作,我们可以使用 <TT><FONT face=新宋体>srvctl</FONT></TT> 命令行实用程序,如下所示: </P><PRE># su - oracle
$ srvctl status database -d orcl
Instance orcl1 is running on node linux1
Instance orcl2 is running on node linux2

$ srvctl stop instance -d orcl -i orcl1 -o abort

$ srvctl status database -d orcl
Instance orcl1 is not running on node linux1
Instance orcl2 is running on node linux2
</PRE>现在我们返回到我们的 SQL 会话,然后重新运行缓冲中的 SQL 语句: <PRE>COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11

SELECT
instance_name
, host_name
, NULL AS failover_type
, NULL AS failover_method
, NULL AS failed_over
FROM v$instance
UNION
SELECT
NULL
, NULL
, failover_type
, failover_method
, failed_over
FROM v$session
WHERE username = 'SYSTEM';

INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------- ------------- --------------- -----------
orcl2         linux2
SELECT        BASIC           YES

SQL> exit
</PRE>
<P>从上面的演示中,我们可以看到现在已将上述会话故障切换到了 <TT><FONT face=新宋体>linux2</FONT></TT> 的实例 <TT><FONT face=新宋体>orcl2</FONT></TT> 上。 </P>
<P><BR></P>
<HR>
<!-- **************** [ 29 ] ************************************************************ --><A name=29></A><SPAN class=parahead1>29. 结论</SPAN>
<P>理想情况下,本指南使用 CentOS 4.2 Enterprise Linux(或 RHEL4)和 FireWire 技术提供了一个设置和配置低成本的 Oracle RAC 10<I>g</I> 第 2 版集群的经济实惠的解决方案。本文介绍的 RAC 解决方案总共需要大约 1,700 美元,但可以为 DBA 提供一个功能完善的 Oracle RAC 集群。 </P>
<P>请记住,尽管此解决方案的稳定性足以进行测试和开发,但<STRONG>绝不应</STRONG>考虑将其用于生产环境。 <BR></P>
<HR>
<!-- **************** [ 30 ] ************************************************************ --><A name=30></A><SPAN class=parahead1>30. 鸣谢</SPAN>
<P>像这样篇幅和复杂程度的文章通常并非出自一人之手。尽管本人能够编写并成功演示构成此配置的组件的有效性,但我还是要感谢其他几个帮助我成功编写本文的人。 </P>
<P>首先,我要感谢 Werner Puschitz 在“在 Red Hat Enterprise Linux Advanced Server 3 上安装具有真正应用服务器集群 (RAC) 的 Oracle 数据库 10<EM>g</EM>”一文中所做的杰出贡献。本文以及他撰写的其他几篇文章提供的有关 Oracle RAC10<I>g</I> 的信息在任何其他 Oracle 文档中都是无法找到的。没有他的辛苦工作以及对配置和安装 hangcheck-timer 内核模块、正确配置 Unix 共享内存以及配置 ASMLib 等问题的研究,本指南也许根本无法完成。如果您有兴趣拜读 Werner Puschitz 撰写的有关 Linux 内部结构以及 Oracle 深入配置方面的技术文章,请访问他出色的网站 <A class=bodylink href="http://www.puschitz.com/" target=_blank>www.puschitz.com</A>。 </P>
<P>接下来,我要感谢 Wim Coekaerts、Joel Becker、Manish Singh 以及 Oracle Linux 项目开发组的整个团队。该组中的专家把升级 Linux 内核以支持 IEEE1394 设备的多重登录(和其他几个重要修改)做得天衣无缝。该组在 <A class=bodylink href="http://oss.oracle.com/" target=_blank>oss.oracle.com</A> 上为 Red Hat Enterprise Linux 4.2 提供了一个预编译内核(还可用于 CentOS Linux)以及许多其他有用的工具和文档。 </P>

页: [1]
© 1999-2008 EvilOctal Security Team