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

ring04h 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>

ring04h 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&g