|
DBA/系统管理员:Linux
在 Linux 和 FireWire 上构建您自己的 Oracle RAC 10g 集群 作者 Jeffrey Hunter
了解如何建立和配置一个成本低于 1800 美元的 Oracle RAC 10g 开发集群。
目录
- 简介
- Oracle RAC 10g 概述
- 共享存储器概述
- FireWire 技术
- 硬件及成本
- 安装 Linux 操作系统
- 配置网络
- 获取并安装合适的 Linux 内核
- 创建“oracle”用户和目录
- 在共享的 FireWire 存储设备上创建分区
- 配置 Linux 服务器
- 配置 hangcheck-timer 内核模块
- 为远程访问配置 RAC 节点
- 用于每个 RAC 节点的所有启动命令
- 检查 Oracle 10g 的 RPM 程序包
- 安装和配置 Oracle 集群文件系统
- 安装和配置自动存储管理与磁盘
- 下载 Oracle RAC 10g 软件
- 安装 Oracle 集群就绪服务软件
- 安装 Oracle 数据库 10g 软件
- 创建 TNS 监听器进程
- 创建 Oracle 集群数据库
- 验证 TNS 联网文件
- 创建/更改表空间
- 验证 RAC 集群/数据库配置
- 启动和停止集群
- 透明应用程序故障切换
- 结论
- 致谢
1. 简介
熟悉 Oracle 真正应用集群 (RAC) 10g 技术的最有效方法之一是访问一个实际的 Oracle RAC 10g 集群。没有什么方法比直接体验它们能够更好地理解其好处的了 包括容错、安全性、负载均衡和可伸缩性。
不幸的是,对于很多商家而言,典型的生产级 RAC 配置所需的硬件投入使它们无法实现这一目标。一个小型两节点集群可能需要 10,000 美元到 20,000 美元以上。该价格还不包括产品级 RAC 环境的核心 通常是一个存储区域网 其起价为 8,000 美元。
对于那些没有大笔现金而希望熟悉 Oracle RAC 10g 的人而言,本指南提供一种低成本的替代方法来配置一个 Oracle RAC 10g 系统,它使用常见的商业组件和可下载的软件,估计成本在 1200 美元到 1800 美元之间。相关系统包括一个运行 Linux(White Box Enterprise Linux 3.0 Respin 1 或 Red Hat Enterprise Linux 3)的双节点集群(每个节点使用一个处理器),具有基于 IEEE1394 (FireWire) 驱动器技术的共享磁盘存储器。(当然,您还可以考虑在 VMware 虚拟机上构建一个虚拟集群,但是其体验将不尽相同!)
本指南(迄今为止)不适用于最新的 Red Hat Enterprise Linux 4 版本(Linux 内核 2.6)。虽然 Oracle 的 Linux 开发小组为 FireWire 的使用提供了一个稳定的(已打过补丁)、预编译的、兼容 2.6 版的内核,但是还没有提供 OCFS 第 2 版的稳定版本 这是 2.6 内核所需要的。当该版本推出时,我将更新本指南以支持 RHEL4。
请注意,这不是构建低成本 Oracle RAC 10g 系统的唯一方法。我曾见过其他的解决方案,这些解决方案利用了基于 SCSI 的实施而不是基于共享存储器的 FireWire。在大多数情况下,SCSI 的成本会高于我们的 FireWire 解决方案,典型的 SCSI 卡的价格在 70 美元左右,而一个 80GB 的外置 SCSI 驱动器价格为 700 美元到 1000 美元。记住,某些主板可能已包含内置的 SCSI 控制器。
请注意,不要在产品环境中运行此配置,并且它没有得到 Oracle 或其他任何厂商的支持,这点很重要。在生产环境中,光纤通道 能够在点对点或交换式拓扑中连接系统与存储设备的高速串行传输接口 是最应选择的技术。FireWire 为测试和开发提供了光纤通道的低成本替代方法,但尚不能用于生产。
虽然在过去的体验中我使用了原始分区在共享存储器上存储文件,但在此我们将使用 Oracle 集群文件系统 (OCFS) 和 Oracle 自动存储管理 (ASM)。将对两个 Linux 服务器进行如下配置:
| Oracle 数据库文件 |
| RAC 节点名 |
实例名 |
数据库名 |
$ORACLE_BASE |
文件系统 |
| linux1 |
orcl1 |
orcl |
/u01/app/oracle |
ASM |
| linux2 |
orcl2 |
orcl |
/u01/app/oracle |
ASM |
| Oracle CRS 共享文件 |
| 文件类型 |
文件名 |
分区 |
挂载点 |
文件系统 |
| Oracle 集群注册表 |
/u02/oradata/orcl/OCRFile |
/dev/sda1 |
/u02/oradata/orcl |
OCFS |
| CRS 表决磁盘 |
/u02/oradata/orcl/CSSFile |
/dev/sda1 |
/u02/oradata/orcl |
OCFS |
Oracle 集群就绪服务 (CRS) 软件将被安装到 RAC 集群每个节点上的 /u01/app/oracle/product/10.1.0/crs_1。但是,CRS 软件需要将其两个文件(Oracle 集群注册表 (OCR) 文件和 CRS 表决磁盘文件)与集群中的所有节点共享。这两个文件将安装在使用 OCFS 的共享存储器上。也可以为这些文件使用原始设备,但是 Oracle 不建议这样做。
Oracle 数据库 10g 软件将安装到一个单独的 Oracle 主目录即 /u01/app/oracle/product/10.1.0/db_1 中。所有的 Oracle 物理数据库文件(数据、联机重做日志、控制文件、归档重做日志)将会安装到由 ASM 管理的共享驱动器的不同分区中。(Oracle 数据库文件可以相当容易地存储在 OCFS 上。但是,使用 ASM 可以使本文更有趣!)
注意:要获得以前发布的本指南的 Oracle9i RAC 版本,请单击此处。
2. Oracle RAC 10g 概述
随 Oracle9i 一同推出的 Oracle RAC 是 Oracle 并行服务器 (OPS) 的后续版本。RAC 允许多个实例同时访问同一数据库(存储器)。它通过允许系统进行扩展,提供了容错、负载均衡和性能效益,同时由于所有节点访问同一数据库,因此一个实例的故障不会导致无法访问数据库。
Oracle RAC 的核心是共享磁盘子系统。集群中的所有节点必须能够访问集群中所有节点的所有数据、重做日志文件、控制文件和参数文件。数据磁盘必须在全局范围内可用,以便允许所有节点访问数据库。每个节点拥有自己的重做日志和控制文件,但是其他节点必须能够访问这些文件,以便在系统故障时恢复该节点。
Oracle RAC 与 OPS 之间的一个较大区别是,它采用了高速缓存合并技术。在 OPS 中,节点间的数据请求需要先将数据写入磁盘,然后发出请求的节点才可以读取该数据。在 RAC 中,数据是带锁传递的。
不是所有的集群解决方案都使用共享存储器。有些厂商使用一种称为联合集群的方法,在这种方法中,数据在数台机器中分布,而不是由所有机器共享。但是,在使用 Oracle RAC 10g 时,多个节点使用相同的磁盘集来存储数据。利用 Oracle RAC,数据文件、重做日志文件、控制文件和归档日志文件保存在原始磁盘设备的共享存储器、NAS、SAN、ASM 或集群文件系统中。Oracle 的集群方法利用了集群中所有节点的集体处理能力,同时提供了故障切换安全性。
有关 Oracle RAC 的更多背景知识,请访问 OTN 上的 Oracle RAC 产品中心。
3. 共享存储器概述
光纤通道是最流行的共享存储器解决方案之一。前面曾提到,光纤通道是一种高速串行传输接口,用于在点对点或交换式拓扑结构中连接系统与存储设备。光纤通道支持的协议包括 SCSI 和 IP。
光纤通道配置可以支持多达 127 个节点,其每秒的吞吐量高达 2.12 GB。但是,光纤通道非常昂贵;仅交换机就可能需要 1000 美元之多,而高端驱动器价格可能达到 300 美元。总体而言,典型的光纤通道设置(包括服务器的插卡)价格约为 5000 美元。
光纤通道的一种较为便宜的替代方法是 SCSI。SCSI 技术为共享存储器提供了可接受的性能,但是对于那些习惯了基于 GPL 的 Linux 价格的管理员和开发人员来说,即使是 SCSI(一个双节点集群的价格在 1000 美元到 2000 美元左右)也可能超出预算。
另一种流行的解决方案是建立在 NAS 基础上的 Sun NFS(网络文件系统)。只有在您使用网络设备或类似的设备时,它才可以用于共享存储器。具体来说就是,您需要拥有能够保证在 NFS 上进行直接 I/O、将 TCP 作为传输协议并且读/写块大小为 32K 的服务器。
4. FireWire 技术
FireWire 是由 Apple Computer 和 Texas Instruments 开发的,它是一种高速串行数据总线的跨平台实施方案。利用其高带宽、长距离(长度多达 100 米)和高能量的总线,FireWire 现在用于数字视频 (DV)、专业音响、硬盘驱动器、高端数字照相机和家庭娱乐设备等应用中。现在,FireWire 以高达每秒 800 兆位的传输速率工作,而下一代的 FireWire 要求理论上的位速率达到 1600 Mbps,然后达到令人吃惊的 3200 Mbps。那是每秒 3.2 GB。这种速度将使 FireWire 成为传输大量数据文件甚至要求最苛刻的视频应用所必不可少的技术,如处理未压缩的高清晰 (HD) 视频或者多个标准清晰度 (SD) 的视频流。
以下图表显示了多种类型磁盘接口的速度对比。对于每种接口,我提供了每秒千位 (kb)、千字节 (KB)、兆位 (Mb) 和兆字节 (MB) 的最大传输速率。可以看到,IEEE1394 的功能显然超过其他可用的磁盘接口技术。
| 磁盘接口 |
速度 |
| 串行 |
115 kb/s - (.115 Mb/s) |
| 并行(标准) |
115 KB/s - (.115 MB/s) |
| USB 1.1 |
12 Mb/s - (1.5 MB/s) |
| 并行 (ECP/EPP) |
3.0 MB/s |
| IDE |
3.3 -16.7 MB/s |
| ATA |
3.3 - 66.6 MB/sec |
| SCSI-1 |
5 MB/s |
| SCSI-2(快速 SCSI/快速窄带 SCSI) |
10 MB/s |
| 快速宽带 SCSI(宽带 SCSI) |
20 MB/s |
| Ultra SCSI(SCSI-3 / Fast-20 / Ultra 窄带) |
20 MB/s |
| Ultra IDE |
33 MB/s |
| 宽带 Ultra SCSI(快速宽带 20) |
40 MB/s |
| Ultra2 SCSI |
40 MB/s |
| IEEE1394(b) |
100 - 400Mb/s - (12.5 - 50 MB/s) |
| USB 2.x |
480 Mb/s - (60 MB/s) |
| 宽带 Ultra2 SCSI |
80 MB/s |
| Ultra3 SCSI |
80 MB/s |
| 宽带 Ultra3 SCSI |
160 MB/s |
| FC-AL 光纤通道 |
100 - 400 MB/s |
5. 硬件及成本
我们用于构建示例 Oracle RAC 10g 环境的硬件包括两个 Linux 服务器以及您可以在本地任何计算机商店中或通过互联网购买的组件。
| 服务器 1 — (linux1) |
Dimension 2400 系列 — Intel Pentium 4 处理器 (2.80GHz) — 1GB DDR SDRAM (333MHz) — 40GB 7200 RPM 内置硬盘驱动器 — 集成 Intel 3D AGP 图形卡 — 集成 10/100 以太网卡 — CDROM(48X 倍速) — 3.5" 软盘驱动器 — 无监视器(已经有一台) — USB 鼠标和键盘
|
620 美元 |
1 - 以太网 LAN 卡 — Linksys 10/100 Mpbs — (用于与 linux2 互联)
| |
每个 Linux 服务器应该包含两个 NIC 适配器。Dell Dimension 包含一个集成的 10/100 以太网适配器,它将用于连接公共网络。第二个 NIC 适配器将用于专用互联。
|
|
20 美元 |
1 - FireWire 卡 — SIIG, Inc. 3 端口 1394 I/O 卡
|
已知那些使用 VIA 或 TI 制造的芯片集的接口卡可以正常工作。除了 SIIG, Inc. 3 端口 1394 I/O 卡之外,我还成功使用了 Belkin FireWire 3 端口 1394 PCI 卡和 StarTech 4 端口 IEEE-1394 PCI Firewire 卡 等 I/O 卡。
|
|
30 美元 |
| 服务器 2 — (linux2) |
Dimension 2400 系列 — Intel Pentium 4 处理器 (2.80GHz) — 1GB DDR SDRAM (333MHz) — 40GB 7200 RPM 内置硬盘驱动器 — 集成 Intel 3D AGP 图形卡 — 集成 10/100 以太网卡 — CDROM(48X 倍速) — 3.5" 软盘驱动器 — 无监视器(已经有一台) — USB 鼠标和键盘
|
620 美元 |
1 — 以太网 LAN 卡 — Linksys 10/100 Mpbs — (用于与 linux1 互联)
| |
每个 Linux 服务器应该包含两个 NIC 适配器。Dell Dimension 包含一个集成的 10/100 以太网适配器,它将用于连接公共网络。第二个 NIC 适配器将用于专用互联。
|
|
20 美元 |
1 - FireWire 卡 — SIIG, Inc. 3 端口 1394 I/O 卡
|
已知那些使用 VIA 或 TI 制造的芯片集的接口卡可以正常工作。除了 SIIG, Inc. 3 端口 1394 I/O 卡之外,我还成功使用了 Belkin FireWire 3 端口 1394 PCI 卡和 StarTech 4 端口 IEEE-1394 PCI Firewire 卡 等 I/O 卡。
|
|
30 美元 |
| 其他组件 |
FireWire 硬盘驱动器 — Maxtor One Touch 250GB USB 2.0 / Firewire 外置硬盘驱动器
| |
确保您所购买的 FireWire 驱动器支持多个登录。如果驱动器的芯片集不允许对超过一个服务器进行并发访问,则每次只有一台服务器能够看到该磁盘及其分区。已知使用 Oxford 911 芯片集的磁盘可以正常工作。以下是我为本测试所购买的磁盘的详细信息: 厂商:Maxtor 型号:OneTouch Mfg.部件号或 KIT 号:A01A200 或 A01A250 容量:200 GB 或 250 GB 高速缓存缓冲区:8 MB 转速:7200 RPM “组合”接口:符合 IEEE 1394 和 SPB-2 标准(100 到 400 Mbits/sec)并兼容 USB 2.0 和 USB 1.1
|
|
260 美元 |
1 — 额外的 FireWire 电缆 — Belkin 6 针对 6 针 1394 电缆
|
15 美元 |
1 — 以太网集线器或交换机 — Linksys EtherFast 10/100 5 端口以太网交换机 (用于互联 int-linux1 / int-linux2)
|
30 美元 |
4 — 网线 — 5e 类接线 — (将 linux1 连接到公共网络) — 5e 类接线 — (将 linux2 连接到公共网络) — 5e 类接线 — (将 linux1 与以太网交换机互联) — 5e 类接线 — (将 linux2 与以太网交换机互联)
|
5 美元 5 美元 5 美元 5 美元 |
| 总计 |
1665 美元 |
请注意,Maxtor OneTouch 外置硬盘驱动器确实有两个 IEEE1394 (FireWire) 端口,尽管乍看上去可能不是这样。还要注意,虽然您可能总想将以太网交换机(用于互联 int-linux1/int-linux2)替换为一根交叉的 CAT5 线,但我不推荐使用这种方法。我发现在使用交叉的 CAT5 线进行互联时,只要我关闭一台 PC,另一台 PC 就会检测到一个“cable unplugged”错误,因而高速缓存合并网络将会变为不可用。
既然我们知道了将在本示例中使用的硬件,就让我们对环境概况进行概念性的了解:
图 1:体系结构
在我们开始详细讨论安装过程时,始终切记大多数任务需要在两台服务器上执行。
6. 安装 Linux 操作系统
本节总结了用于安装 Linux 操作系统的各个屏幕。本文依设计本来使用 Red Hat Enterprise Linux 3 (AS/ES) 操作环境。作为一种替代方法,我在本文中使用的是 White Box Enterprise Linux (WBEL):RHEL3 操作环境的一个免费且稳定的版本。
有关更多详细的安装说明,可以使用由 Red Hat Linux 提供的手册。但是,我建议对本配置使用我在下面提供的说明。
在两个节点上安装 Linux 操作系统之前,您应该先安装 FireWire 和两个 NIC 接口(卡)。
此外,在开始安装前,确保 FireWire 驱动器(我们的共享存储驱动器)没有连接到两个服务器中的任何一个上。
下载以下 WBEL 的 ISO 映像:
在下载并将 WBEL 映像(ISO 文件)刻录到 CD 之后,将 WBEL 1 号盘插入到第一个服务器(在本示例中是 linux1),启动其电源,并按照以下说明来回应安装屏幕的提示。在第一个节点上安装完 Linux 后,在第二个节点上执行相同的 Linux 安装,但将节点名 linux1 替换为 linux2 并设定适当的不同 IP 地址。
引导屏幕 第一个屏幕是 WBEL 引导屏幕。在 boot:提示符处按 [Enter] 键启动安装过程。
介质测试 当要求测试 CD 介质时,用 Tab 键切换到 [Skip] 并按 [Enter] 键。如果有错误,则介质刻录软件会向我们发出警告。在几秒钟后,安装程序将会检测视频卡、监视器和鼠标。然后安装程序进入 GUI 模式。
欢迎使用 White Box Enterprise Linux 在欢迎屏幕上,单击 [Next] 继续。
语言/键盘/鼠标选项 接下来的三个屏幕提示您设置语言、键盘和鼠标。为您的配置作出合适的选择。
安装类型 选择 [Custom] 选项并单击 [Next] 继续。
磁盘分区设置 选择 [Automatically partition] 并单击 [Next] 继续。
如果以前在本机上安装了 Linux,则下一屏幕将询问您是要“删除”还是“保留”旧分区。选择 [Remove all partitions on this system] 选项。还要确保为本安装选择了 [hda] 驱动器。我还选中了 [Review (and modify if needed) the partitions created] 复选框。单击 [Next] 继续。
然后显示一个对话窗口,询问您是否真的要删除所有分区。单击 [Yes] 回复这一警告。
分区 随后安装程序将允许您查看(如果需要还可以更改)它自动选择的磁盘分区。几乎所有情况下,安装程序将为 /boot 分配 100MB,为 swap 分配双倍数量的 RAM,而将剩余空间分配给根 (/) 分区。我倾向于至少为 swap 分配 1 GB 的空间。就本安装而言,我将接受所有自动选用的大小。(包括 2GB 的 swap,因为我安装了 1GB 的 RAM。)
引导加载程序配置 安装程序将默认使用 GRUB 引导加载程序。要使用 GRUB 引导加载程序,接受所有默认值并单击 [Next] 继续。
网络配置 在启动操作系统安装之前,我已确认在每个 Linux 机器上安装了两个 NIC 接口(卡)。本屏幕应该已经成功地检测到每个网络设备。
首先,确保将每个网络设备设置为 [Active on boot]。安装程序可能选择不激活 eth1。
第二步,按照以下方法对 eth0 和 eth1 进行 [Edit] 操作。您可能要为 eth0 和 eth1 使用不同的 IP 地址,没问题。如果可能,试着将 eth1(互联)置于与 eth0(公共网络)不同的子网中:
eth0: — 取消选中 [Configure using DHCP] 复选项 — 选中 [Activate on boot] — IP 地址:192.168.1.100 — 网络掩码: 255.255.255.0
eth1: — 取消选中 [Configure using DHCP] 复选项 — 选中 [Activate on boot] — IP 地址:192.168.2.100 — 网络掩码: 255.255.255.0
接着,手动设置您的主机名。第一个节点使用“linux1”,第二个节点使用“linux2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。
防火墙 在本屏幕上,确保选中 [No firewall],然后单击 [Next] 继续。
其他语言支持/时区 接下来的两个屏幕允许您选择其他语言支持以及时区信息。几乎所有情况下,您都可以接受默认值。
设置根口令 选择一个根口令,然后单击 [Next] 继续。
程序包组选项 滚动到本屏幕的底部,在“Miscellaneous”区域的下面选择 [Everything]。单击 [Next] 继续。
即将安装 本屏幕基本上是一个确认屏幕。单击 [Next] 开始安装。在安装过程中,会依次要求您将盘换为 2 号盘、3 号盘。
图形接口 (X) 配置 当安装结束时,安装程序将会尝试检测您的视频硬件。确保安装程序已经检测并选择了正确的视频硬件(图形卡和监视器),以便正确使用 X Windows 服务器。在接下来的三个屏幕中,您将继续进行 X 配置。
恭喜 大功告成。您已经成功地在第一个节点 (linux1) 上安装了 WBEL。安装程序将从 CD-ROM 驱动器中弹出 CD。取出 CD,单击 [Exit] 重新引导系统。
系统第一次引导进入 Linux 中时将为您显示另一个欢迎屏幕。(没人说过 Linux 不友好!)接下来的向导将允许您配置日期和时间、添加其他用户、测试声卡并安装任何其他 CD。我唯一关心的屏幕是时间和日期。至于其他屏幕,由于没有其他需要安装的东西(至少目前是这样!),因此只需快速通过即可。如果一切都已成功,您现在应该看到登录屏幕了。
在第二个节点上执行相同的安装 在第一个节点上完成 Linux 安装后,在第二个节点 (linux2) 上重复以上步骤。在配置机器名和网络时,确保配置相应值。对于我的安装,以下是我为 linux2 所配置的内容:
首先,确保将每个网络设备设置为 [Active on boot]。安装程序将选择不激活 eth1。
第二步,按照以下方法对 eth0 和 eth1 进行 [Edit] 操作:
eth0: — 取消选中 [Configure using DHCP] 复选项 — 选中 [Activate on boot] — IP 地址:192.168.1.101 — 网络掩码: 255.255.255.0
eth1: — 取消选中 [Configure using DHCP] 复选项 — 选中 [Activate on boot] — IP 地址:192.168.2.101 — 网络掩码: 255.255.255.0
接着,手动设置您的主机名。我对第二个节点使用“linux2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。
7. 配置网络设置 在集群的所有节点上执行以下网络配置!
注意:虽然我们在 Linux 安装过程中配置了几个网络设置,但千万不要跳过本节,这是因为它包含 RAC 环境所需的关键步骤。
网络设置简介
在 Linux O/S 安装过程中,我们已经为每个节点配置了 IP 地址和主机名。现在我们需要配置 /etc/hosts 文件,并调整几个用于互联的网络设置。我还提供了启用 Telnet 和 FTP 服务的说明。
每个节点均应有一个用于公共网络的静态 IP 地址和一个用于专用集群互联的静态 IP 地址。专用互联只用于由 Oracle 传输与集群管理器和高速缓存合并相关的数据。虽然可以将公共网络用于互联,但由于它可能导致数据库性能降低(减少高速缓存合并和集群管理器流量的带宽),因此不建议使用这种方法。对于生产 RAC 实施,互联应该至少有 GB 或更多,并且只由 Oracle 使用。
配置公共网络和专用网络 在我们的双节点示例中,我们需要在两个节点上配置网络,以访问公共网络及其专用互联。
在 Red Hat Enterprise Linux 3 中配置网络设置的最简单方法就是使用网络配置程序。该应用程序可以以根用户帐户从命令行启动,如下所示:
# su -
# /usr/bin/redhat-config-network &
不要为公共 IP 地址或互联使用 DHCP 命名 — 我们需要静态 IP 地址!
使用网络配置应用程序,您需要配置两个 NIC 设备以及 /etc/hosts 文件。可以使用网络配置 GUI 完成这两个任务。请注意,两个节点的 /etc/hosts 设置是相同的。
我们的示例配置将使用以下的设置:
| 服务器 1 (linux1) |
| 设备 |
IP 地址 |
子网 |
目的 |
| eth0 |
192.168.1.100 |
255.255.255.0 |
连接 linux1 与公共网络 |
| eth1 |
192.168.2.100 |
255.255.255.0 |
连接 linux1(互联)与 linux2 (int-linux2) |
| /etc/hosts |
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
|
| 服务器 2 (linux2) |
| 设备 |
IP 地址 |
子网 |
目的 |
| eth0 |
192.168.1.101 |
255.255.255.0 |
连接 linux2 与公共网络 |
| eth1 |
192.168.2.101 |
255.255.255.0 |
连接 linux2(互联)与 linux1 (int-linux1) |
| /etc/hosts |
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
|
请注意,只需在两个节点的 /etc/hosts 文件中定义虚拟 IP 地址。当您运行 Oracle Universal Installer 时,该程序启动 Oracle 的虚拟互联网协议配置助手 (VIPCA),也就说 Oracle 将自动配置公共虚拟 IP 地址。当运行 srvctl start nodeapps -n <node_name> 命令时,所有的虚拟 IP 地址将被激活。这就是将要在客户端 tnsnames.ora 文件中进行配置的主机名/IP 地址(后文详述)。
在以下的屏幕截图中,只显示了节点 1 (linux1)。请确保对两个节点进行了所有适当的网络设置。
图 2:网络配置屏幕,节点 1 (linux1)
图 3:以太网设备屏幕,eth0 (linux1)
图 4:以太网设备屏幕,eth1 (linux1)
图 5:网络配置屏幕,/etc/hosts (linux1)
在配置网络后,您可以使用 ifconfig 命令来验证一切是否正常。以下示例来自于 linux1:
$ /sbin/ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:41:F1:6E:9A
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:421591 errors:0 dropped:0 overruns:0 frame:0
TX packets:403861 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:78398254 (74.7 Mb) TX bytes:51064273 (48.6 Mb)
Interrupt:9 Base address:0x400
eth1 Link encap:Ethernet HWaddr 00:0D:56:FC:39:EC
inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1715352 errors:0 dropped:1 overruns:0 frame:0
TX packets:4257279 errors:0 dropped:0 overruns:0 carrier:4
collisions:0 txqueuelen:1000
RX bytes:802574993 (765.3 Mb) TX bytes:1236087657 (1178.8 Mb)
Interrupt:3
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1273787 errors:0 dropped:0 overruns:0 frame:0
TX packets:1273787 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:246580081 (235.1 Mb) TX bytes:246580081 (235.1 Mb)
关于虚拟 IP
我们为什么在 10g 中有虚拟 IP (VIP)?为什么当它的主节点发生故障时不只是返回一个无效的连接呢?
这全是出于对应用程序可用性的考虑。当一个节点发生故障时,与其关联的 VIP 将被自动故障切换到另外某个节点上。当出现这种情况时,会发生两件事。
- 新的节点重新进行地址解析,显示该地址的一个新的 MAC 地址。对于直接连接的客户端,这通常使它们在连接旧地址时出现错误。
- 随后发送到 VIP 的数据包前往新的节点,该节点将把错误的 RST 数据包返回客户端。这导致客户端立即收到错误信息。
这意味着,当客户端向现在已经停机的节点发出 SQL 时,或者在连接状态下遍历地址列表时,客户端不会等待很长的 TCP/IP 超时(大约 10 分钟),而是接收到一个 TCP 重置信息。就 SQL 来说,该信息为 ORA-3113。对于连接,使用 tnsname 中的下一个地址。
如果不使用 VIP,连接停用节点的客户端经常要等待 10 分钟的 TCP 超时,然后才收到错误信息。因此,不使用 VIP 您就不会真正拥有好的高可用性解决方案(来源 — Metalink 注释 220970.1)。
确保 RAC 节点名没有出现在回送地址中
确保在 /etc/hosts 文件的回送地址中不包含节点名(linux1 或 linux2)。如果机器名出现在回送地址条目中,如下所示:
127.0.0.1 linux1 localhost.localdomain localhost
需要将其如下删除:
127.0.0.1 localhost.localdomain localhost
如果 RAC 节点名出现在回送地址中,您在 RAC 安装期间将接收到以下错误信息:
ORA-00603:ORACLE server session terminated by fatal error
或
ORA-29702:error occurred in Cluster Group Service operation
调整网络设置
在 Oracle 9.2.0.1 以及更高版本中,Oracle 在 Linux 上使用 UDP 作为默认协议进行过程间通信 (IPC) 的默认协议,如在 RAC 集群中的实例间的高速缓存合并和集群管理器缓冲区传输。
Oracle 强烈建议将默认的和最大的发送缓冲区大小(SO_SNDBUF 套接字选项)调整为 256KB,并将默认的和最大的接收缓冲区大小(SO_RCVBUF 套接字选项)调整为 256KB。
接收缓冲区由 TCP 和 UDP 用于保留所接收的数据,直到应用程序读出这些数据为止。由于不允许对等端发送超过缓冲区大小窗口的数据,因此接收缓冲区无法溢出。这意味着,如果数据报不适合套接字接收缓冲区,则将它们舍弃,从而可能导致发送端压垮接收端。
无需重新引导即可在 /proc 文件系统中更改默认的和最大的窗口大小:
# 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
以上命令对已经运行的操作系统作出更改。现在您应将以下各行添加到 RAC 集群中每个节点的 /etc/sysctl.conf 文件中,从而使以上更改成为永久性更改(针对每次重新引导而言):
# 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
启用 Telnet 和 FTP 服务
Linux 被配置为运行 Telnet 和 FTP 服务器,但在默认情况下,这些服务被禁用了。要启用 telnet 的这些服务,以根用户帐户登录到服务器并运行以下命令:
# chkconfig telnet on
# service xinetd reload
Reloading configuration:[ OK ]
从 Red Hat Enterprise Linux 3.0 版本(以及 WBEL 中的版本)起,FTP 服务器 (wu-ftpd) 不再随 xinetd 一起提供。它已经被 vsftp 所取代,并且可以从 /etc/init.d/vsftpd 启动,如下所示:
# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd:[ OK ]
如果您希望在重新启动(重新引导)机器时启动和停止 vsftpd 服务,则可以创建以下的符号链接:
# 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
允许根登录到 Telnet 和 FTP 服务
在详细了解如何为根登录配置 Red Hat Linux 之前,牢记这是非常不安全的。千万不要为您的生产服务器配置这种类型的登录。
要配置 Telnet 以实现根登录,只需编辑文件 /etc/securetty 并将以下内容添加到文件结尾:
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
这样将允许多达 10 个 telnet 会话以根用户连接服务器。要配置 FTP 以实现根登录,编辑文件 /etc/vsftpd.ftpusers 和 /etc/vsftpd.user_list,并从每个文件中删除“root”行。
8. 获取并安装合适的 Linux 内核
在集群中的所有节点上执行以下内核升级!
接下来的步骤是获取并安装一个新的 Linux 内核,该内核支持对 IEEE1394 设备的多登录使用。在本文的先前版本中,我提供了下载 Linux 内核的一个修补版本(源代码)并编译它的步骤。由于 Oracle 的 Linux 项目开发组的工作,已经不再需要这些步骤了。他们提供一个 RHEL3 的预编译内核(它也可用于 WBEL!),很容易下载和安装。本部分包含了下载和安装该内核的说明。但是,在详细了解如何执行这些操作之前,让我们花点时间来讨论新内核中所需要的更改。
尽管已经有了针对 Linux 的 FireWire 驱动程序,但它们常常不支持共享存储器。通常,当您登录到操作系统时,操作系统将驱动程序与该机器上一个具体的驱动器相连。这种实施方法不适用于我们的 RAC 配置。共享存储器(我们的 FireWire 硬盘驱动器)需要被多个节点所访问。我们需要使 FireWire 驱动程序能够提供对驱动器的非独占访问,以便多个服务器 即组成集群的节点 能够访问同一个存储器。通过在源代码中删除在登录期间标识机器的位掩码,导致对 FireWire 硬盘驱动器进行非独占访问,从而实现这一目的。集群中的所有其他节点在其登录会话期间,使用相同的经过修改的驱动程序登录到同一个驱动器,因此它们也具有对于该驱动器的非独占访问权。
我们的实施描述了一个双节点的集群(每个节点具有单处理器)— 每个服务器均运行 WBEL。请牢记,需要在两个 Linux 节点上执行打补丁的 Linux 内核的安装过程。White Box Enterprise Linux 3.0 (Respin 1) 包含内核 2.4.21-15.EL #1;我们将需要下载在 http://oss.oracle.com/projects/firewire/files 处提供的版本 2.4.21-27.0.2.ELorafw1。
下载以下文件之一:
kernel-2.4.21-27.0.2.ELorafw1.i686.rpm — (用于单处理器) 或
kernel-smp-2.4.21-27.0.2.ELorafw1.i686.rpm — (用于多处理器)
备份您的 GRUB 配置文件:
在大多数情况下,您要将 GRUB 用于引导加载程序。在实际安装新内核之前,需要备份您的 /etc/grub.conf 文件:
# cp /etc/grub.conf /etc/grub.conf.original
以根用户安装新内核:
# rpm -ivh --force kernel-2.4.21-27.0.2.ELorafw1.i686.rpm — (用于单处理器)
或
# rpm -ivh --force kernel-smp-2.4.21-27.0.2.ELorafw1.i686.rpm — (用于多处理器)
注意:使用 RPM 安装新内核还将利用适当的节 (stanza) 来更新您的 GRUB(或 lilo)配置。除非您希望保留旧的内核镜像,否则不需要向您的引导加载器配置中添加任何新节。
以下是我的 /etc/grub.conf 文件在内核安装之前和之后的清单。可以看到,我的安装为 2.4.21-27.0.2.ELorafw1 内核添加了另一个节。如果愿意,您可以在新文件中更改条目 (default),以便新内核成为默认引导的内核。在默认情况下,安装程序保留默认内核(您的原始内核),方法是将其设置为 default=1。您应该将默认值更改为零 (default=0),以便在默认情况下能够引导新内核。
原始文件
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:You have a /boot partition.This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title White Box Enterprise Linux (2.4.21-15.EL)
root (hd0,0)
kernel /vmlinuz-2.4.21-15.EL ro root=LABEL=/
initrd /initrd-2.4.21-15.EL.img
在安装内核后新配置的文件
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:You have a /boot partition.This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title White Box Enterprise Linux (2.4.21-27.0.2.ELorafw1)
root (hd0,0)
kernel /vmlinuz-2.4.21-27.0.2.ELorafw1 ro root=LABEL=/
initrd /initrd-2.4.21-27.0.2.ELorafw1.img
title White Box Enterprise Linux (2.4.21-15.EL)
root (hd0,0)
kernel /vmlinuz-2.4.21-15.EL ro root=LABEL=/
initrd /initrd-2.4.21-15.EL.img
添加模块选项:
将下列行添加到 /etc/modules.conf 中:
alias ieee1394-controller ohci1394
options sbp2 sbp2_exclusive_login=0
post-install sbp2 insmod sd_mod
post-install sbp2 insmod ohci1394
post-remove sbp2 rmmod sd_mod
将串行总线协议模块 (sbp2) 的参数 sbp2_exclusive_login 设为零是非常重要的,以便允许多个主机并发地登录和访问 FireWire 磁盘。第二行确保 SCSI 磁盘驱动程序模块 (sd_mod) 也会被加载,因为 (sbp2) 需要 SCSI 层。如果加载了 (sd_mod),则会自动加载核心 SCSI 支持模块 (scsi_mod);不需要为其建立一个单独的条目。
将 FireWire 驱动器连接到每台机器并引导进入新的内核中:
在集群中的两个节点上都执行了以上任务之后,关闭两台 Linux 机器的电源:
===============================
# hostname
linux1
# init 0
===============================
# hostname
linux2
# init 0
===============================
在关闭了两台机器的电源后,将它们连接到 FireWire 驱动器的后部。打开 FireWire 驱动器的电源。最后,打开每台 Linux 服务器的电源并确保将每台机器引导进入新的内核中。
加载 FireWire 堆栈:
在大多数情况下,在 /etc/rc.sysinit 文件中已经对 FireWire 堆栈加载进行了配置。该文件中所包含的用于加载 FireWire 堆栈的命令是:
# modprobe sbp2
# modprobe ohci1394
在 Red Hat 的旧版本中,情况有所不同,必须手动运行这些命令或者将其包含在启动文件中。在 Red Hat Enterprise Linux 3 及更高版本中,这些命令已经包含在 /etc/rc.sysinit 文件中并在每次引导时运行。
检查 SCSI 设备:
重新引导每台机器后,内核应该自动把该磁盘检测为 SCSI 设备 (/dev/sdXX)。本节将提供几个应该在集群的所有节点上运行的命令,以验证是否成功地检测到 FireWire 驱动器并由集群中所有节点所共享。
对于本配置而言,我同时在两个节点上执行上述过程。在过程完成后,我关闭两台机器,首先启动 linux1,然后启动 linux2。以下的命令和结果来自于我的 linux2 机器。同样,请确认您在两个节点上都运行了以下的命令,以确保两台机器都能登录到共享驱动器。
首先查看该 FireWire 适配器是否已被成功地检测到:
# lspci
00:00.0 Host bridge:Intel Corp. 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface (rev 01)
00:02.0 VGA compatible controller:Intel Corp. 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device (rev 01)
00:1d.0 USB Controller:Intel Corp. 82801DB (ICH4) USB UHCI #1 (rev 01)
00:1d.1 USB Controller:Intel Corp. 82801DB (ICH4) USB UHCI #2 (rev 01)
00:1d.2 USB Controller:Intel Corp. 82801DB (ICH4) USB UHCI #3 (rev 01)
00:1d.7 USB Controller:Intel Corp. 82801DB (ICH4) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge:Intel Corp. 82801BA/CA/DB/EB/ER Hub interface to PCI Bridge (rev 81)
00:1f.0 ISA bridge:Intel Corp. 82801DB (ICH4) LPC Bridge (rev 01)
00:1f.1 IDE interface:Intel Corp. 82801DB (ICH4) Ultra ATA 100 Storage Controller (rev 01)
00:1f.3 SMBus:Intel Corp. 82801DB/DBM (ICH4) SMBus Controller (rev 01)
00:1f.5 Multimedia audio controller:Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 01)
01:04.0 FireWire (IEEE 1394):Texas Instruments TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
01:05.0 Modem:Intel Corp.:Unknown device 1080 (rev 04)
01:06.0 Ethernet controller:Linksys NC100 Network Everywhere Fast Ethernet 10/100 (rev 11)
01:09.0 Ethernet controller:Broadcom Corporation BCM4401 100Base-T (rev 01)
第二步,查看这些模块是否已被加载:
# lsmod |egrep "ohci1394|sbp2|ieee1394|sd_mod|scsi_mod"
sd_mod 13744 0
sbp2 19724 0
scsi_mod 106664 3 [sg sd_mod sbp2]
ohci1394 28008 0 (unused)
ieee1394 62884 0 [sbp2 ohci1394]
第三步,确认已检测到磁盘并由内核创建了一个项目:
# cat /proc/scsi/scsi
Attached devices:
Host:scsi0 Channel:00 Id:00 Lun: 00
Vendor:Maxtor Model:OneTouch Rev: 0200
Type:Direct-Access ANSI SCSI revision: 06
现在让我们确认 FireWire 驱动器可以被多个登录所访问,并显示有效的登录:
# dmesg | grep sbp2
ieee1394:sbp2:Query logins to SBP-2 device successful
ieee1394:sbp2:Maximum concurrent logins supported: 3
ieee1394:sbp2:Number of active logins: 1
ieee1394:sbp2:Logged into SBP-2 device
ieee1394:sbp2:Node[01:1023]:Max speed [S400] - Max payload [2048]
从以上的输出中,可以看到我的 FireWire 驱动器能够支持多达三个服务器的并发登录。您的驱动器的芯片组应该支持 RAC 集群中所有节点的并发访问,这很重要。
我喜欢执行的另一项测试是从集群中的每个节点上运行快速的 fdisk -l,以验证它确实被操作系统所接受。它将显示该设备没有包含有效的分区表,但是就 RAC 配置的这一阶段而言,这样就可以了。
# fdisk -l
Disk /dev/sda:203.9 GB, 203927060480 bytes
255 heads, 63 sectors/track, 24792 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sda doesn't contain a valid partition table
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 4609 36917370 83 Linux
/dev/hda3 4610 4863 2040255 82 Linux swap
不再需要重新扫描 SCSI 总线:
在内核的旧版本中,我需要运行 rescan-scsi-bus.sh 脚本来检测 FireWire 驱动器。此脚本的目的是通过使用以下命令为节点创建 SCSI 项:
echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi
在 Red Hat Enterprise Linux 3 中,不再需要该步骤,磁盘会被自动检测到。
SCSI 设备检测方面的故障诊断:
如果您在检测 SCSI 设备的任何步骤(如上所述)中遇到问题,可以尝试以下操作:
# modprobe -r sbp2
# modprobe -r sd_mod
# modprobe -r ohci1394
# modprobe ohci1394
# modprobe sd_mod
# modprobe sbp2
您可能还希望拔下任何连接到服务器的 USB 设备。如果您连接了 USB 设备,系统可能无法识别您的 FireWire 驱动器!
9. 创建“oracle”用户和目录(在两个节点上)
在集群中的所有节点上执行以下过程!
我将使用 Oracle 集群文件系统 (OCFS) 来存储那些需要为 Oracle 集群就绪服务 (CRS) 所共享的文件。在使用 OCFS 时,集群中所有机器上的 UNIX 用户 oracle 的 UID 以及 UNIX 组 dba 的 GID 都必须相同。如果 UID 或 GID 不同,则 OCFS 文件系统中的文件将显示为“unowned”,甚至可能被其他用户所拥有。对于本文而言,oracle UID 使用 175,dba GID 使用 115。
创建 Oracle 的组和用户
让我们继续此示例,创建 Unix dba 组和 oracle 用户帐户以及所有相关目录。
# 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
注意:当您为每个 RAC 节点设置 Oracle 环境变量时,请确保为每个 RAC 节点分配唯一的 Oracle SID!
对于此示例,我使用:
- linux1 :ORACLE_SID=orcl1
- linux2 :ORACLE_SID=orcl2
在两个节点上都创建了“oracle”UNIX 用户 id 后,通过使用以下的 .bash_profile,确保正确地建立了环境:
....................................
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
alias ls="ls -FA"
# User specific environment and startup programs
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1
export ORA_CRS_HOME=$ORACLE_BASE/product/10.1.0/crs_1
# 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 ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/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
export LD_ASSUME_KERNEL=2.4.1
....................................
现在,让我们为 Oracle 集群文件系统 (OCFS) 创建挂载点,它将用于存储 Oracle 集群就绪服务 (CRS) 的文件。这些命令需要以“root”用户帐户来运行:
$ su -
# mkdir -p /u02/oradata/orcl
# chown -R oracle:dba /u02
注意: Oracle Universal Installer (OUI) 最多需要在 /tmp 目录中有 400MB 空闲空间。
您可以通过运行以下命令来查看 /tmp 中的可用空间:
# df -k /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda2 36337384 4691460 29800056 14% /
如果由于某种原因,您在 /tmp 中没有足够的空间,您可以在其他文件系统中临时创建空间,并在安装期间将您的 TEMP 和 TMPDIR 指向该空间。以下是完成此操作的步骤:
# 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"
当 Oracle 的安装完成时,您可以使用以下命令删除该临时目录:
# su -
# rmdir /<AnotherFilesystem>/tmp
# unset TEMP
# unset TMPDIR
10. 在共享的 FireWire 存储设备上创建分区
仅在集群中的一个节点上创建以下分区!
接下来的步骤是在 FireWire(共享)驱动器上创建所需的分区。我在前面曾提到,我们将使用 OCFS 来存储 CRS 所共享的两个文件。然后我们将 ASM 用于所有物理数据库文件(数据/索引文件、联机重做日志文件、控制文件、SPFILE 和归档的重做日志文件)。
下表列出了将要在 FireWire(共享)驱动器上创建的各个分区以及它们将包含的文件。
|
Oracle 共享驱动器配置
|
| 文件系统类型 |
分区 |
大小 |
挂载点 |
文件类型 |
| OCFS |
/dev/sda1 |
300MB |
/u02/oradata/orcl |
Oracle 集群注册表文件 — (~100MB) CRS 表决磁盘 — (~20MB) |
| ASM |
/dev/sda2 |
50GB |
ORCL:VOL1 |
Oracle 数据库文件 |
| ASM |
/dev/sda3 |
50GB |
ORCL:VOL2 |
Oracle 数据库文件 |
| ASM |
/dev/sda4 |
50GB |
ORCL:VOL3 |
Oracle 数据库文件 |
| 总计 |
|
150.3GB |
|
|
在 FireWire 共享存储器上创建所有分区
如上表中所示,我的 FireWire 驱动器显示为 SCSI 设备 /dev/sda。fdisk 命令用于创建(和删除)分区。对于此配置而言,我们将创建四个分区:一个用于 CRS,其他三个用于 ASM(存储所有 Oracle 数据库文件)。在创建新分区之前,删除 FireWire 驱动器上的现有分区(如果有)是很重要的:
# fdisk /dev/sda
Command (m for help):p
Disk /dev/sda:203.9 GB, 203927060480 bytes
255 heads, 63 sectors/track, 24792 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 24791 199133676 c Win95 FAT32 (LBA)
Command (m for help):d
Selected partition 1
Command (m for help):p
Disk /dev/sda:203.9 GB, 203927060480 bytes
255 heads, 63 sectors/track, 24792 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
Command (m for help):n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-24792, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-24792, default 24792):+300M
Command (m for help):n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (38-24792, default 38): 38
Using default value 38
Last cylinder or +size or +sizeM or +sizeK (38-24792, default 24792):+50G
Command (m for help):n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (6118-24792, default 6118): 6118
Using default value 6118
Last cylinder or +size or +sizeM or +sizeK (6118-24792, default 24792):+50G
Command (m for help):n
Command action
e extended
p primary partition (1-4)
p
Selected partition 4
First cylinder (12198-24792, default 12198): 12198
Using default value 12198
Last cylinder or +size or +sizeM or +sizeK (12198-24792, default 24792):+50G
Command (m for help):p
Disk /dev/sda:203.9 GB, 203927060480 bytes
255 heads, 63 sectors/track, 24792 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 37 297171 83 Linux
/dev/sda2 38 6117 48837600 83 Linux
/dev/sda3 6118 12197 48837600 83 Linux
/dev/sda4 12198 18277 48837600 83 Linux
Command (m for help):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
在创建了所有必要分区后,现在应以 root 用户帐户使用以下语法将分区的更改情况通知给内核:
# partprobe
# fdisk -l /dev/sda
Disk /dev/sda:203.9 GB, 203927060480 bytes
255 heads, 63 sectors/track, 24792 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 37 297171 83 Linux
/dev/sda2 38 6117 48837600 83 Linux
/dev/sda3 6118 12197 48837600 83 Linux
/dev/sda4 12198 18277 48837600 83 Linux
(注意:FireWire 驱动器和所创建的分区将显示为 SCSI 设备。)
重新引导 RAC 集群中的所有节点
在创建分区后,建议您重新引导所有 RAC 节点上的内核,以确保所有 RAC 节点上的内核识别所有新分区。
# su -
# reboot
在备份了每台机器后,在集群中的每台机器上运行 fdisk -l /dev/sda 命令,以确保它们都能够看到分区表:
# fdisk -l /dev/sda
Disk /dev/sda:203.9 GB, 203927060480 bytes
255 heads, 63 sectors/track, 24792 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 37 297171 83 Linux
/dev/sda2 38 6117 48837600 83 Linux
/dev/sda3 6118 12197 48837600 83 Linux
/dev/sda4 12198 18277 48837600 83 Linux
第 1 页 第 2 页 第 3 页
|