目录
简介
Oracle RAC 11g 概述
共享存储概述
iSCSI 技术
硬件及成本
安装 Linux 操作系统
安装 Oracle RAC 所需的 Linux 程序包
网络配置
集群时间同步服务
安装 Openfiler
使用 Openfiler 配置 iSCSI 卷
在 Oracle RAC 节点上配置 iSCSI 卷
创建任务角色划分操作系统权限组、用户和目录
使用 X 终端登录远程系统
为 Oracle 配置 Linux 服务器
配置 RAC 节点以便可以使用 SSH 进行远程访问(可选)
适用于这两个 Oracle RAC 节点的所有启动命令
安装并配置 ASMLib 2.0
下载 Oracle RAC 11g 第 2 版软件
集群的 Oracle Grid Infrastructure 的安装前任务
为集群安装 Oracle Grid Infrastructure
集群的 Oracle Grid Infrastructure 的安装后任务
为数据和快速恢复区创建 ASM 磁盘组
在 Oracle Real Application Clusters 中安装 Oracle Database 11g
安装 Oracle Database 11g Examples(以前的随附 CD)
创建 Oracle 集群数据库
数据库创建后任务(可选)
创建/更改表空间
验证 Oracle Grid Infrastructure 和数据库配置
启动/停止集群
故障排除
总结
致谢
|
1. 简介
熟悉 Oracle Real Application Clusters (RAC) 11g 技术的最有效方法之一是访问一个实际的 Oracle RAC 11g 集群。没有什么方法比直接体验它们能够更好地理解其优势了,这些优势包括容错、安全性、负载平衡和可伸缩性。
遗憾的是,对于很多商家而言,典型的生产级 RAC 配置所需的硬件投入使它们无法实现这一目标。一个小型的只有两个节点的集群可能花费 10,000 美元至 20,000 美元以上,此花费甚至不包括 RAC 生产环境的核心 — 共享存储。大多数情况下,这会是一个存储区域网 (SAN),起价通常为 10,000 美元。
对于那些没有大笔现金但希望熟悉 Oracle RAC 11g 的人们而言,本指南提供了一种低成本的替代方法来配置 Oracle RAC 11g 第 2 版系统,它使用现成的商用组件和可下载的软件,估计成本在 2,200 美元到 2,700 美元之间。该系统将由一个双节点集群组成,这两个节点均运行适用于 x86_64 的 Oracle Enterprise Linux (OEL) 第 5 版 Update 4、适用于 Linux x86_64 的 Oracle RAC 11g 第 2 版和 ASMLib 2.0。Oracle RAC 的所有共享磁盘存储将基于 iSCSI,iSCSI 使用在第三个节点(该节点在本文中称为网络存储服务器)上运行的 Openfiler 2.3 版 x86_64。
尽管本文应与 Red Hat Enterprise Linux 一同使用,但 Oracle Enterprise Linux(免费提供)也可满足需要(即使不能更为稳定),它包括 ASMLib 软件包(不包括 ASMLib 用户空间库,这个需要单独下载)。
本指南仅供教学使用,因此安装很简单,仅用于演示想法和概念。例如,本文中共享的 Oracle 集群件文件(OCR 和表决文件)以及所有物理数据库文件将仅安装在一个物理磁盘上,而实际上应在多个物理驱动器上配置这些文件。另外,每个 Linux 节点仅配置两个网络接口 — eth0 用于连接公共网络, eth1 用于 Oracle RAC 专用互连“和”连接网络存储服务器以便进行共享 iSCSI 访问。而在实现生产级 RAC 时,专用互连至少应是千兆位级(或以上)、有冗余路径,并且“仅”供 Oracle 用来传输 Cluster Manager 和 Cache Fusion 的相关数据。应在另一个冗余的千兆位网络上配置第三个专用网络接口(例如, eth2)以访问网络存储服务器 (Openfiler)。
Oracle 文档
尽管本指南提供了成功安装完整的 Oracle RAC 11g 系统的详细说明,但它绝不能替代 Oracle 官方文档(参见下面的列表)。除本指南外,用户还应参考以下 Oracle 文档,以便全面了解 Oracle RAC 11g 的其他配置选项、安装和管理。Oracle 的官方文档网站是 docs.oracle.com。
Oracle Grid Infrastructure 安装指南 — 适用于 Linux 的 11g 第 2 版 (11.2)
Clusterware 管理和部署指南 — 11g 第 2 版 (11.2)
Oracle Real Application Clusters 安装指南 — 适用于 Linux 和 UNIX 的 11g 第 2 版 (11.2)
Real Application Clusters 管理和部署指南 — 11g 第 2 版 (11.2)
Oracle Database 两日速成和 Real Application Clusters 指南 — 11g 第 2 版 (11.2)
Oracle 数据库存储管理员指南 — 11g 第 2 版 (11.2)
网络存储服务器
Openfiler 构建于 rPath Linux 之上,它是一个基于浏览器的免费网络存储管理实用程序,可在一个框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。整个软件体系与许多开源应用程序(如 Apache、Samba、LVM2、ext3、Linux NFS 和 iSCSI Enterprise Target)相连接。Openfiler 将这些随处可见的技术组合到一个易于管理的小型管理解决方案中,该解决方案的前端是一个基于 Web 的功能强大的管理界面。
Openfiler 支持 CIFS、NFS、HTTP/DAV 和 FTP,但是,我们将仅使用它的 iSCSI 功能为 Oracle RAC 11g 所需的共享存储组件实现低成本的 SAN。操作系统和 Openfiler 应用程序将安装在一个内置 SATA 磁盘上。另一个内置 73GB 15K SCSI 硬盘将被配置为一个“卷组”,用于满足所有共享磁盘存储需求。Openfiler 服务器将配置为使用该卷组进行基于 iSCSI 的存储,并且将在我们的 Oracle RAC 11g 配置中使用该服务器存储 Oracle Grid Infrastructure 和 Oracle RAC 数据库所需的共享文件。
Oracle Grid Infrastructure 11g 第 2 版 (11.2)
在 Oracle Grid Infrastructure 11g 第 2 版 (11.2) 中,自动存储管理 (ASM) 和 Oracle Clusterware 软件一起打包到一个二进制版本中并安装到同一个主目录中,这个主目录称为 Grid Infrastructure 主目录。为了使用 Oracle RAC 11g 第 2 版,您必须安装 Grid Infrastructure。在安装程序的询问过程之后,会启动配置助手以配置 ASM 和 Oracle Clusterware。虽然这种组合的产品安装称为 Oracle Grid Infrastructure,但 Oracle Clusterware 和 Automatic Storage Manager 仍然是独立的产品。
在集群中的两个节点上安装并配置 Oracle Grid Infrastructure 后,下一步将是在两个 Oracle RAC 节点上安装 Oracle RAC 软件。
在本文中,我们在两个节点上使用可选的作业角色划分 配置来安装 Oracle Grid Infrastructure 和 RAC 软件。我们会为每个 Oracle 软件产品创建一个操作系统用户作为该产品的所有者 —“grid”作为 Oracle Grid Infrastructure 的所有者,“oracle”作为 Oracle RAC 软件的所有者。在本文中, grid 的用户是我们创建作为 Oracle Grid Infrastructure 二进制文件所有者的用户。该用户将是 Oracle Clusterware 和 Oracle 自动存储管理二进制文件的所有者。而 oracle 的用户是我们创建作为 Oracle 数据库二进制文件 (Oracle RAC) 所有者的用户。这两个 Oracle 软件所有者必须以 Oracle Inventory 组 (oinstall) 作为其主组,这样每个 Oracle 软件安装所有者都有权写入中央清单 (oraInventory),以便正确设置 OCR 和 Oracle Clusterware 资源的权限。Oracle RAC 软件所有者还必须以 OSDBA 组和可选的 OSOPER 组作为其辅助组。
自动存储管理和 Oracle Clusterware 文件
如上所述,自动存储管理 (ASM) 现在已与 Oracle Clusterware 完全集成在 Oracle Grid Infrastructure 中。Oracle ASM 和 Oracle Database 11g 第 2 版提供了较以前版本更为增强的存储解决方案。该解决方案能够在 ASM 上存储 Oracle Clusterware 文件,即 Oracle 集群注册表 (OCR) 和表决文件(VF,又称为表决磁盘)。这一特性使 ASM 能够提供一个统一的存储解决方案,无需使用第三方卷管理器或集群文件系统即可存储集群件和数据库的所有数据。
和数据库文件一样,Oracle Clusterware 文件也存储在 ASM 磁盘组中,从而使用 ASM 磁盘组的冗余配置。例如,一个常规冗余 配置的 ASM 磁盘组将保存一个双向镜像的 OCR。磁盘组中一个磁盘出现故障不会妨碍对 OCR 的访问。就高冗余 配置的 ASM 磁盘组(三向镜像)而言,两个独立的磁盘出现故障不会影响对 OCR 的访问。而采用外部冗余 配置,Oracle 不提供任何保护。
为了防止物理磁盘故障,Oracle 针对每个磁盘组只允许一个 OCR。在生产系统中配置 Oracle Clusterware 文件时,Oracle 建议使用常规或高冗余配置的 ASM 磁盘组。如果在操作系统级或硬件级已存在磁盘镜像,您可以使用外部冗余配置。
对表决文件的管理类似于 OCR。这些文件遵循 ASM 磁盘组的冗余配置,但是其管理方式不同于磁盘组中的常规 ASM 文件。每个表决磁盘放置在磁盘组的一个特定磁盘上。表决文件的磁盘及其在磁盘上的位置存储在 Oracle Clusterware 内部。
下面的示例说明,在使用本指南安装 Oracle Grid Infrastructure 后 ASM 如何存储 Oracle Clusterware 文件。要查看 OCR,请使用 ASMCMD:
[grid@racnode1 ~]$ asmcmd
ASMCMD> ls -l +CRS/racnode-cluster/OCRFILE
Type Redund Striped Time Sys Name
OCRFILE UNPROT COARSE NOV 22 12:00:00 Y REGISTRY.255.703024853
从以上示例可以看出,在列出 +CRS/racnode-cluster/OCRFILE 目录中的所有 ASM 文件后,只显示了 OCR (REGISTRY.255.703024853)。上面未列出表决文件,这是因为表决文件的管理方式不同于常规 ASM 文件。要找到 Oracle 集群件内表决文件的位置,使用如下的 crsctl query css votedisk 命令:
[grid@racnode1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 4cbbd0de4c694f50bfd3857ebd8ad8c4 (ORCL:CRSVOL1) [CRS]
Located 1 voting disk(s).
如果您决定不使用 ASM 管理 OCR 和表决磁盘文件,Oracle Clusterware 仍然允许将这些文件存储在一个集群文件系统(如 Oracle Cluster File System 第 2 版 (OCFS2))或 NFS 系统中。请注意,除非现有系统正在进行升级,否则不再支持在原始设备或块设备上安装 Oracle Clusterware 文件。
此指南的以前版本使用 OCFS2 存储 OCR 和表决磁盘文件。本指南将在 ASM 上存储 OCR 和表决磁盘文件,具体是存储在一个名为 +CRS 的磁盘组中,该磁盘组使用外部冗余 配置,只有一个 OCR 位置和一个表决磁盘位置。ASM 磁盘组应在共享存储器上创建,大小至少为 2GB。
Oracle 物理数据库文件(数据、联机重做日志、控制文件、存档重做日志)将安装在 ASM 上一个名为 +RACDB_DATA 的 ASM 磁盘组中,而快速恢复区将在一个名为 +FRA 的 ASM 磁盘组上创建。
两个 Oracle RAC 节点和网络存储服务器配置如下:
节点 | |||||
节点名称 | 实例名称 | 数据库名称 | 处理器 | RAM | 操作系统 |
racnode1 | racdb1 | racdb. idevelopment. info |
1 个双核 Intel Xeon,3.00 GHz | 4GB | OEL 5.4 - (x86_64) |
racnode2 | racdb2 | 1 个双核 Intel Xeon,3.00 GHz | 4GB | OEL 5.4 - (x86_64) | |
openfiler1 | 2 个 Intel Xeon,3.00 GHz | 6GB | Openfiler 2.3 - (x86_64) | ||
网络配置 | |||||
节点名称 | 公共 IP 地址 | 专用 IP 地址 | 虚拟 IP 地址 | SCAN 名称 | SCAN IP 地址 |
racnode1 | 192.168.1.151 | 192.168.2.151 | 192.168.1.251 | racnode-cluster-scan | 192.168.1.187 |
racnode2 | 192.168.1.152 | 192.168.2.152 | 192.168.1.252 | ||
openfiler1 | 192.168.1.195 | 192.168.2.195 | |||
Oracle 软件组件 | |||||
软件组件 | 操作系统用户 | 主组 | 辅助组 | 主目录 | Oracle 基目录/Oracle 主目录 |
Grid Infrastructure | grid | oinstall | asmadmin、asmdba、asmoper | /home/grid | /u01/app/grid /u01/app/11.2.0/grid |
Oracle RAC | oracle | oinstall | dba、oper、asmdba | /home/oracle | /u01/app/oracle /u01/app/oracle/product/11.2.0/dbhome_1 |
存储组件 | |||||
存储组件 | 文件系统 | 卷大小 | ASM 卷组名 | ASM 冗余 | Openfiler 卷名 |
OCR/表决磁盘 | ASM | 2GB | +CRS | External | racdb-crs1 |
数据库文件 | ASM | 32GB | +RACDB_DATA | External | racdb-data1 |
快速恢复区 | ASM | 32GB | +FRA | External | racdb-fra1 |
本文仅作为绝对不可替代的文档。此处唯一的例外是供应商硬件的选择(即,计算机、网络设备和内置/外置硬盘驱动器)。确保您从供应商处购买的硬件在 Enterprise Linux 5 和 Openfiler 2.3(最终版本)上受支持。
如果您要寻找一个基于 Oracle Enterprise Linux 5.3 和 iSCSI 利用 Oracle RAC 10g 第 2 版的示例,请单击此处。
2. Oracle RAC 11g 概述
在介绍构建 RAC 集群的详细信息之前,首先阐明集群的定义将很有帮助。集群是一组两个或多个互连的计算机或服务器,对最终用户和应用程序来说,它们就像是一台服务器,通常共享同一组物理磁盘。集群的主要优势在于提供了一个高可用的框架,在该框架中,一个节点(例如,运行一个 Oracle 实例的数据库服务器)出现故障不会中断整个应用程序。如果其中一个服务器出现故障,其他正常运行的(一个或多个)服务器可以接管故障服务器的负载,应用程序继续正常运行,就像什么都没有发生。
实际上,集群计算机的概念在几十年前就出现了。第一个成功的集群产品由 DataPoint 在 1977 年开发完成,该产品名为 ARCnet。ARCnet 产品在实验室的学术环境中获得了很大成功,但未能真正投放到商业市场。直到 20 世纪 80 年代,Digital Equipment Corporation (DEC) 才发布了针对 VAX/VMS 操作系统的 VAX 集群产品。
随着针对 Digital VAX 集群产品的 Oracle 6 发布,Oracle 成为在数据库级别支持集群的第一个商业数据库。但是不久之后,Oracle 意识到还需要一个更高效、可伸缩性更强的分布式锁管理器 (DLM),因为 VAX/VMS 集群产品中的锁管理器不太适合数据库应用程序。Oracle 决定为 VAX/VMS 集群产品设计并编写自己的 DLM,以提供数据库所需的细粒度块级锁定。Oracle 自己的 DLM 包含在 Oracle 6.2 中,这导致诞生了 Oracle Parallel Server (OPS) — 第一个运行并行服务器的数据库。
OPS 在 Oracle 7 中得到了扩展,不仅支持 VAX/VMS 集群产品,还支持大多数 UNIX 环境。该框架不仅要求供应商提供的集群件运行良好,还要适用于复杂的环境,以设置并管理所涉及的多个给定层。在 Oracle 8 中,Oracle 引入了一个集成到 Oracle 内核中的通用锁管理器。在更高版本的 Oracle 中,这称为集成分布式锁管理器 (IDLM),依赖于称为操作系统依赖 (OSD) 层的附加层。这个新模型为 Oracle 铺平了道路,使其不仅拥有自己的 DLM,还可以在未来版本中创建自己的集群件产品。
随 Oracle9i 一同推出的 Oracle Real Application Clusters (RAC) 是 Oracle Parallel Server 的后续版本。由于使用了相同的 IDLM,Oracle 9i 仍然可以依赖于外部集群件,但它是包含自己的集群件产品(称为 Cluster Ready Services (CRS))的第一个版本。在 Oracle 9i 中,CRS 只能用于 Windows 和 Linux。到了 Oracle 10g 第 1 版,Oracle 的集群件产品可用于所有操作系统,成为了 Oracle RAC 所需的集群技术。随着 Oracle 数据库 10g 第 2 版 (10.2) 的发布,Cluster Ready Services 被重命名为 Oracle Clusterware。如果使用 Oracle 10g 或更高版本,Oracle Clusterware 是大多数运行 Oracle RAC 的平台所需的唯一集群件(不包括 Tru 集群,在这种情况下,您需要供应商集群件)。您仍然可以使用其他供应商的集群件(如果该集群件通过了认证),但是请记住,Oracle RAC 仍然需要 Oracle Clusterware,因为它与数据库软件完全集成。本指南使用 Oracle Clusterware,该集群件从 11g 第 2 版 (11.2) 开始就是 Oracle Grid Infrastructure 的一个组件了。
与 OPS 一样,Oracle RAC 允许多个实例同时访问同一个数据库(存储)。通过允许系统进行扩展,RAC 提供了容错、负载平衡和性能优势。同时,由于所有实例都访问同一个数据库,因此一个节点出现故障不会导致无法访问数据库。
Oracle RAC 的核心是共享磁盘子系统。集群中的每个实例都必须能够访问集群中所有其他实例的所有数据、重做日志文件、控制文件和参数文件。为了使所有实例都能访问数据库,数据磁盘必须全局可用。每个实例都有自己的、可在本地读写的重做日志文件和 UNDO 表空间。集群中的其他实例必须能够访问这些文件(只读),以便在系统出现故障时恢复该实例。一个实例的重做日志文件只能由该实例自己写入,其他实例只能在系统故障期间读取该实例。另一方面,UNDO 可以在正常数据库操作(例如,CR 构建)期间随时读取。
Oracle RAC 与 OPS 之间的最大区别在于使用了缓存融合技术。使用 OPS 时,从一个实例到另一个实例的数据请求需要首先将数据写到磁盘,然后请求实例才能读取该数据(获得必需的锁之后)。此过程称为磁盘 ping。而使用缓存融合,数据沿着使用复杂锁定算法的高速互连链路传递。
并非所有数据库集群解决方案都使用共享存储。一些供应商使用联合集群 方法,在这种方法中,数据分布在多台计算机中,而不是由所有计算机共享。但是,对于 Oracle RAC,多个实例使用一组相同的磁盘存储数据。Oracle 的集群方法利用了集群中所有节点的集体处理能力,同时提供了故障切换安全性。
Dell、IBM 和 HP 等供应商提供了预先配置的面向生产环境的 Oracle RAC 解决方案。但是,本文将重点讨论如何使用 Linux 服务器和低成本的共享磁盘解决方案 iSCSI 整合您自己的 Oracle RAC 11g 环境以进行开发和测试。
有关 Oracle RAC 的更多背景知识,请访问 OTN 上的 Oracle RAC 产品中心。
3. 共享存储概述
现在,光纤通道是最流行的共享存储解决方案之一。前面曾提到过,光纤通道是一种高速串行传输接口,用于在点到点 (FC-P2P)、仲裁环路 (FC-AL) 或交换式拓扑结构 (FC-SW) 中连接系统与存储设备。光纤通道支持的协议包括 SCSI 和 IP。光纤通道配置最多可支持 127 个节点,每个方向上最高可实现每秒 2.12 Gb 的吞吐量,预期可达 4.25 Gbps。
但是,光纤通道的价格很昂贵。单是光纤通道交换机的起价就可能需要约 1,000 美元。这还不包括光纤通道存储阵列和高端驱动器,一个 36GB 驱动器的价格可达 300 美元左右。典型的光纤通道安装包括用于服务器的光纤通道卡。基本安装的费用为大约 10,000 美元,还不包括构成集群的服务器的成本。
光纤通道的一种较为便宜的替代方法是 SCSI。SCSI 技术提供了可接受的共享存储性能。但对于那些习惯了基于 GPL 的 Linux 价格的管理员和开发人员来说,即使是 SCSI(一个双节点集群的价格在 2,000 美元到 5,000 美元左右)也可能超出预算。
另一种流行的解决方案是基于 NAS 的 Sun NFS(网络文件系统)。只有在您使用网络设备或类似的设备时,它才可以用于共享存储。具体来说就是,您需要拥有能够保证在 NFS 上进行直接 I/O、将 TCP 作为传输协议并且读/写块大小为 32K 的服务器。有关可用于 Oracle RAC 的受支持的网络连接存储 (NAS) 设备,请参见 Oracle Metalink 上的 Certify 页面。其中一个主要缺陷限制了使用 NFS 和 NAS 进行数据库存储的优势,即,性能降低和复杂的配置要求。标准的 NFS 客户端软件(使用操作系统提供的 NFS 驱动程序的客户端系统)没有针对 Oracle 数据库文件 I/O 访问模式进行优化。随着 Oracle 11g 的推出,一个称为 Direct NFS Client 的新特性将 NFS 客户端功能直接集成到 Oracle 软件中。通过该集成,Oracle 可以优化 Oracle 软件与 NFS 服务器之间的 I/O 路径,从而显著提高性能。Direct NFS Client 可以为数据库负载简化(在许多情况下可以自动化)NFS 客户端配置的性能优化。要了解有关 Direct NFS Client 的更多信息,请参阅标题为“Oracle 数据库 11g Direct NFS Client ”的 Oracle 白皮书。
本文将采用的共享存储基于 iSCSI 技术,使用网络存储服务器(随 Openfiler 安装)。该解决方案提供了一个低成本的光纤通道替代方案,只用于测试和教学目的。考虑到方案中使用低端硬件,不应将其用于生产环境。
4. iSCSI 技术
多年以来,光纤通道存储区域网 (FC SAN) 是构建基于网络的存储解决方案所使用的唯一技术。基于以前的一组 ANSI 协议(称为光纤分布式数据接口 (FDDI)),开发了光纤通道以在存储网络上移动 SCSI 命令。
FC SAN 的优势包括提高了性能、磁盘利用率、可用性以及可伸缩性等,但最重要的是支持服务器集群!但是,FC SAN 现在仍受三个主要缺点的限制。首先是价格。尽管构建 FC SAN 的成本在近几年有所下降,但进入成本对于 IT 预算有限的小公司来说仍然是高的惊人。第二个缺点是硬件组件不兼容。采用 FC SAN 之后,许多产品制造商对光纤通道规范的解释各不相同,从而导致许多互连问题。如果从公共制造商购买光纤通道组件,这通常不是一个问题。第三个缺点是光纤通道网络不是以太网!它需要一种不同的网络技术,并要求数据中心人员具备另外一组技能。
随着千兆位以太网的普及以及对降低成本的需要,基于 iSCSI 的存储系统逐渐成为光纤通道的有力竞争对手。现在,iSCSI SAN 仍然是 FC SAN 的最大竞争者。
2003 年 2 月 11 日,经过 Internet 工程任务组 (IETF) 的批准,Internet 小型计算机系统接口(一般称为 iSCSI)成为一个基于 Internet 协议 (IP) 的存储网络标准,用于建立和管理基于 IP 的存储设备、主机和客户端之间的连接。iSCSI 是 SCSI-3 规范框架中定义的数据传输协议,它与光纤通道的类似之处在于它也负责在存储网络上运送块级数据。块级通信意味着数据以“块”的形式在主机和客户端之间传输。数据库服务器依赖此类通讯(而不是大多数 NAS 系统使用的文件级通讯)来工作。与 FC SAN 一样,iSCSI SAN 是一个专用于存储的单独物理网络,但其组件与典型 IP 网络 (LAN) 中的组件基本相同。
尽管 iSCSI 拥有光明的前景,但早期的批评很快指出了其在性能方面的内在不足。iSCSI 的优势是能够利用大家熟悉的 IP 网络作为传输机制。但是,TCP/IP 协议非常复杂并且占用过多的 CPU 资源。而使用 iSCSI,大部分对数据进行的处理(TCP 和 iSCSI)都由软件执行,比完全通过硬件处理的光纤通道慢得多。将每个 SCSI 命令映射到等价 iSCSI 事务所带来的开销过大。对许多公司来说,解决方案是取消 iSCSI 软件启动器,投资能够从服务器 CPU 中卸载 TCP/IP 和 iSCSI 处理的专用卡。这些专用卡有时称为 iSCSI 主机总线适配器 (HBA) 或 TCP 卸载引擎 (TOE) 卡。还要考虑到目前 10 Gb 以太网是主流!
与其他新技术一样,iSCSI 具有一组自己的缩略语和术语。对于本文来说,用户只需要了解 iSCSI 启动器与 iSCSI 目标之间的区别即可。
iSCSI 启动器
从本质上说,iSCSI 启动器是一个客户端设备,它连接到服务器(在本例中是 iSCSI 目标)提供的某一服务,并发起对该服务的请求。iSCSI 启动器软件需要安装在每个 Oracle RAC 节点(racnode1 和 racnode2)上。
iSCSI 启动器可以用软件实现,也可以用硬件实现。软件 iSCSI 启动器可用于大部分主要操作系统平台。对于本文,我们将使用 iscsi-initiator-utils RPM 中提供的免费 Linux Open-iSCSI 软件驱动程序。iSCSI 软件启动器通常与标准网络接口卡 (NIC)(大多数情况下是千兆位以太网卡)配合使用。硬件启动器是一个 iSCSI HBA(或 TCP 卸载引擎 (TOE) 卡),它本质上只是一个专用以太网卡,其上的 SCSI ASIC 可以从系统 CPU 内卸载所有工作(TCP 和 SCSI 命令)。iSCSI HBA 可以从许多供应商处购买,包括 Adaptec、Alacritech、Intel 和 QLogic。
iSCSI 目标
iSCSI 目标是 iSCSI 网络的“服务器”组件。它通常是一个存储设备,包含您所需的信息并响应来自(一个或多个)启动器的请求。对于本文,节点 openfiler1 将是 iSCSI 目标。
因此,根据有关 iSCSI 的所有这些讨论,是否意味着光纤通道很快就会消失?可能不会。多年以来,光纤通道凭借其极快的速度、灵活性和强健的可靠性,为自己的能力提供了有力的证明。对高性能存储、大型复杂连接以及任务关键可靠性有严格要求的客户将毫不犹豫地继续选择光纤通道。
在结束本节内容之前,我认为应该提供一个列表,对各种类型的磁盘接口和网络技术的速度进行一番比较。对于每种接口,我提供了以每秒千位 (kb)、千字节 (KB)、兆位 (Mb)、兆字节 (MB)、千兆位 (Gb) 以及千兆字节 (GB) 为单位的最大传输速率,较常用的以灰色突出显示。
磁盘接口/网络/总线 | 速度 | |||||
Kb | KB | Mb | MB | Gb | GB | |
串行 | 115 | 14.375 | 0.115 | 0.014 | ||
并行(标准) | 920 | 115 | 0.92 | 0.115 | ||
10Base-T 以太网 | 10 | 1.25 | ||||
IEEE 802.11b 无线 Wi-Fi(2.4 GHz 频带) | 11 | 1.375 | ||||
USB 1.1 | 12 | 1.5 | ||||
并行 (ECP/EPP) | 24 | 3 | ||||
SCSI-1 | 40 | 5 | ||||
IEEE 802.11g 无线 WLAN(2.4 GHz 频带) | 54 | 6.75 | ||||
SCSI-2(快速 SCSI/快速窄带 SCSI) | 80 | 10 | ||||
100Base-T 以太网(高速以太网) | 100 | 12.5 | ||||
ATA/100(并行) | 100 | 12.5 | ||||
IDE | 133.6 | 16.7 | ||||
快速宽带 SCSI(宽带 SCSI) | 160 | 20 | ||||
Ultra SCSI(SCSI-3 / Fast-20 / Ultra 窄带) | 160 | 20 | ||||
Ultra IDE | 264 | 33 | ||||
宽带 Ultra SCSI(快速宽带 20) | 320 | 40 | ||||
Ultra2 SCSI | 320 | 40 | ||||
FireWire 400 — (IEEE1394a) | 400 | 50 | ||||
USB 2.0 | 480 | 60 | ||||
宽带 Ultra2 SCSI | 640 | 80 | ||||
Ultra3 SCSI | 640 | 80 | ||||
FireWire 800 — (IEEE1394b) | 800 | 100 | ||||
千兆位以太网 | 1000 | 125 | 1 | |||
PCI —(33 MHz / 32 位) | 1064 | 133 | 1.064 | |||
串行 ATA I — (SATA I) | 1200 | 150 | 1.2 | |||
宽带 Ultra3 SCSI | 1280 | 160 | 1.28 | |||
Ultra160 SCSI | 1280 | 160 | 1.28 | |||
PCI —(33 MHz / 64 位) | 2128 | 266 | 2.128 | |||
PCI —(66 MHz / 32 位) | 2128 | 266 | 2.128 | |||
AGP 1x —(66 MHz / 32 位) | 2128 | 266 | 2.128 | |||
串行 ATA II — (SATA II) | 2400 | 300 | 2.4 | |||
Ultra320 SCSI | 2560 | 320 | 2.56 | |||
FC-AL 光纤通道 | 3200 | 400 | 3.2 | |||
PCI-Express x1 —(双向) | 4000 | 500 | 4 | |||
PCI —(66 MHz / 64 位) | 4256 | 532 | 4.256 | |||
AGP 2x —(133 MHz / 32 位) | 4264 | 533 | 4.264 | |||
串行 ATA III — (SATA III) | 4800 | 600 | 4.8 | |||
PCI-X —(100 MHz / 64 位) | 6400 | 800 | 6.4 | |||
PCI-X —(133 MHz / 64 位) | 1064 | 8.512 | 1 | |||
AGP 4x —(266 MHz / 32 位) | 1066 | 8.528 | 1 | |||
10G 以太网 — (IEEE 802.3ae) | 1250 | 10 | 1.25 | |||
PCI-Express x4 —(双向) | 2000 | 16 | 2 | |||
AGP 8x —(533 MHz / 32 位) | 2133 | 17.064 | 2.1 | |||
PCI-Express x8 —(双向) | 4000 | 32 | 4 | |||
PCI-Express x16 —(双向) | 8000 | 64 | 8 |
5. 硬件及成本
用于构建示例 Oracle RAC 11g 环境的硬件包括三个 Linux 服务器(两个 Oracle RAC 节点和一个网络存储服务器),以及可以在许多本地计算机商店或通过互联网购买到的组件。
Oracle RAC 节点 1 — (racnode1) | |
Dell PowerEdge T100
|
450 美元 |
1 个以太网 LAN 卡 用于 racnode2 与 Openfiler 网络存储的 RAC 互连。 Oracle RAC 的每个 Linux 服务器应该包含两个 NIC 适配器。Dell PowerEdge T100 包括一个嵌入式 Broadcom(R) NetXtreme IITM 5722 千兆位以太网 NIC,该 NIC 将用于连接公共网络。另一个 NIC 适配器将用于专用网络(RAC 互连和 Openfiler 网络存储)。所选 NIC 适配器要与专用网络将使用的网络交换机的最大数据传输速度兼容。对于本文,我在专用网络中使用了千兆位以太网交换机(以及一个 1Gb 的以太网卡)。 千兆位以太网
|
90 美元 |
Oracle RAC 节点 2 — (racnode2) | |
Dell PowerEdge T100
|
450 美元 |
1 个以太网 LAN 卡 用于 racnode2 与 Openfiler 网络存储的 RAC 互连。 Oracle RAC 的每个 Linux 服务器应该包含两个 NIC 适配器。Dell PowerEdge T100 包括一个嵌入式 Broadcom(R) NetXtreme IITM 5722 千兆位以太网 NIC,该 NIC 将用于连接公共网络。另一个 NIC 适配器将用于专用网络(RAC 互连和 Openfiler 网络存储)。所选 NIC 适配器要与专用网络将使用的网络交换机的最大数据传输速度兼容。对于本文,我在专用网络中使用了千兆位以太网交换机(以及一个 1Gb 的以太网卡)。 千兆位以太网
|
90 美元 |
网络存储服务器 — (openfiler1) | |
Dell PowerEdge 1800
注: 操作系统和 Openfiler 应用程序将安装在 500GB 内置 SATA 磁盘上。将配置另一个内置 73GB 15K SCSI 硬盘用于数据库存储。Openfiler 服务器将配置为使用另一个硬盘进行基于 iSCSI 的存储,并将在 Oracle RAC 11g 配置中用于存储 Oracle Clusterware 所需的共享文件以及集群数据库文件。 请注意,任何类型的硬盘(内置或外置),只要网络存储服务器 (Openfiler) 能够识别并且该硬盘具有足够的空间,都可用于数据库存储。例如,我已在 500GB 内置 SATA 磁盘上建立了一个额外的分区用于 iSCSI 目标,但决定在此例中使用速度更快的 SCSI 磁盘。 |
800 美元 |
1 个以太网 LAN 卡 用于专用网络上的网络存储。 网络存储服务器(Openfiler 服务器)应包含两个 NIC 适配器。Dell PowerEdge 1800 包含一个集成的 10/100/1000 以太网适配器,该适配器将用于连接公共网络。另一个 NIC 适配器将用于专用网络(Openfiler 网络存储)。所选 NIC 适配器要与专用网络将使用的网络交换机的最大数据传输速度兼容。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。 千兆位以太网
|
125 美元 |
其他组件 | |
1 台以太网交换机 用于将部署在 192.168.2.0 网络上的 racnode1-priv 和 racnode2-priv 之间的互连。该交换机还将用于传输 Openfiler 的网络存储流量。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。 千兆位以太网
|
50 美元 |
6 根网络电缆
|
10 美元 10 美元 10 美元 10 美元 10 美元 10 美元 |
可选组件 | |
KVM 切换设备 为了安装操作系统并执行多项配置任务,本指南需要可以访问所有节点(服务器)的控制台。管理少量服务器时,为了访问其控制台,将每台服务器与自己的显示器、键盘和鼠标相连可能行得通。但是,随着需要管理的服务器数量越来越多,这一解决方案变得难以实施。更实际的解决方案是配置一台专用计算机,该计算机包括一个显示器、键盘和鼠标,可以直接访问每台服务器的控制台。使用一台键盘、视频和鼠标切换设备(也称作 KVM 切换设备)可以实现该解决方案。KVM 切换设备是一台允许用户通过一个键盘、视频显示器和鼠标来控制多台计算机的硬件设备。Avocent 提供了一种带有 4 根 6 英尺电缆的优质、低成本 4 端口切换设备:
有关 KVM 切换设备及其使用的详细说明和指南,请参阅“家用和企业 KVM 切换设备”一文。 |
340 美元 |
合计 | 2,455 美元 |
下面,我们将开始安装过程。既然我们已经讨论了将在本示例中使用的硬件,下面我们对连接好所有硬件组件后的环境进行概念性的了解(单击下图查看大图像):
图 1:体系结构
在开始详细说明安装过程之前,请注意本文中的大部分任务需要在两个 Oracle RAC 节点(racnode1 和 racnode2)上执行。我将在每节开始处指出是应在这两个 Oracle RAC 节点上还是在网络存储服务器 (openfiler1) 上执行该任务。
6. 安装 Linux 操作系统
在集群中的两个 Oracle RAC 节点上执行以下安装步骤。
本节总结了用于安装 Linux 操作系统的各个屏幕。本指南与适用于 x86_64 的 Oracle Enterprise Linux 第 5 版 Update 4 配合使用,并且遵循 Oracle 的如下建议:执行“默认 RPM”安装类型以确保拥有成功进行 Oracle RDBMS 安装所需的 Linux 操作系统程序包。
在两个 Oracle RAC 节点上安装 Oracle Enterprise Linux 之前,应已安装好两个 NIC 接口卡,这两个接口卡将分别用于公共网络和专用网络。
根据您的硬件体系结构,下载适用于 x86 或 x86_64 的 Oracle Enterprise Linux 第 5 版 Update 4 的以下 ISO 映像。
针对 Oracle Enterprise Linux 的 Oracle E-Delivery 网站
32 位 (x86) 安装
V17787-01.zip (582 MB)
V17789-01.zip (612 MB)
V17790-01.zip (620 MB)
V17791-01.zip (619 MB)
V17792-01.zip (267 MB)
下载 Oracle Enterprise Linux 操作系统之后,解压缩每个文件。您将获得以下 ISO 映像,需要将其刻录到 CD 上:
Enterprise-R5-U4-Server-i386-disc1.iso
Enterprise-R5-U4-Server-i386-disc2.iso
Enterprise-R5-U4-Server-i386-disc3.iso
Enterprise-R5-U4-Server-i386-disc4.iso
Enterprise-R5-U4-Server-i386-disc5.iso
注:如果 Linux RAC 节点安装了 DVD,您可能会发现使用如下的单个 DVD 映像更方便:
V17793-01.zip (2.7 GB)
解压缩该单个 DVD 映像文件后将其刻录到一张 DVD 中:
Enterprise-R5-U4-Server-i386-dvd.iso
64 位 (x86_64) 安装
V17795-01.zip (580 MB)
V17796-01.zip (615 MB)
V17797-01.zip (605 MB)
V17798-01.zip (616 MB)
V17799-01.zip (597 MB)
V17800-01.zip (198 MB)
下载 Oracle Enterprise Linux 操作系统之后,解压缩每个文件。您将获得以下 ISO 映像,需要将其刻录到 CD 上:
Enterprise-R5-U4-Server-x86_64-disc1.iso
Enterprise-R5-U4-Server-x86_64-disc2.iso
Enterprise-R5-U4-Server-x86_64-disc3.iso
Enterprise-R5-U4-Server-x86_64-disc4.iso
Enterprise-R5-U4-Server-x86_64-disc5.iso
Enterprise-R5-U4-Server-x86_64-disc6.iso
注:如果 Linux RAC 节点安装了 DVD,您可能会发现使用如下的单个 DVD 映像更为方便:
V17794-01.zip (3.2 GB)
解压缩该单个 DVD 映像文件后将其刻录到一张 DVD 中:
Enterprise-R5-U4-Server-x86_64-dvd.iso
如果您将以上 ISO 文件下载到 MS Windows 计算机,可以使用多种方法将这些映像(ISO 文件)刻录到一张 CD/DVD 上。您可能很熟悉这个过程,并且已经拥有合适的软件,可以将映像刻录到 CD/DVD。如果您不熟悉这个过程,并且没有将映像刻录到 CD/DVD 所需的软件,这里提供了两个软件程序包(实际上有许多个)供您使用:
UltraISO
Magic ISO Maker
下载 Oracle Enterprise Linux 映像(ISO 文件)并将其刻录到 CD/DVD 后,将 OEL 1 号盘插入第一个服务器(在本示例中是 racnode1),打开电源,然后按照以下说明回应安装屏幕的提示。在第一个节点上安装完 Linux 后,在第二个节点上执行相同的 Linux 安装,但将节点名 racnode1 替换为 racnode2 并设定另一个合适的 IP 地址。
引导屏幕
第一个屏幕是 Oracle Enterprise Linux 引导屏幕。在 boot:提示符处按 [Enter] 键启动安装过程。
介质测试
当要求测试 CD 介质时,用 Tab 键切换到 [Skip] 并按 [Enter] 键。如果有错误,介质刻录软件应该已经向我们发出警告。在几秒钟后,安装程序将会检测视频卡、显示器和鼠标。然后安装程序进入 GUI 模式。
欢迎使用 Oracle Enterprise Linux
在欢迎屏幕上,单击 [Next] 继续。
语言/键盘选项
接下来的两个屏幕提示您进行语言和键盘设置。请为您的配置作出合适的选择。
检测以前的安装
注意,如果安装程序检测到以前版本的 Oracle Enterprise Linux,它将询问您是“Install Enterprise Linux”还是“Upgrade an existing Installation”。始终选择“Install Enterprise Linux”。
磁盘分区设置
选中 [Remove all partitions on selected drives and create default layout],选中 [Review and modify partitioning layout] 选项。单击 [Next] 继续。
此时会显示一个对话窗口,询问您是否真的要删除所有 Linux 分区。单击 [Yes] 回复这一警告。
分区
随后安装程序将允许您查看(如果需要还可以修改)它自动选择的磁盘分区。对于大多数自动布局,安装程序将为 /boot 分配 100MB 空间,为交换分区分配 RAM 的双倍数量(系统 RAM <= 2,048MB 时)或 RAM 的同等数量(系统 RAM > 2,048MB 时),而将剩余空间分配给根 (/) 分区。从 RHEL 4 开始,安装程序将创建与刚才提到的相同的磁盘配置,但将使用逻辑卷管理器 (LVM) 创建它们。例如,它将第一个硬盘驱动器(我的配置使用 /dev/sda)划分为两个分区 — 一个用于 /boot 分区 (/dev/sda1),而磁盘的剩余部分专用于 LVM 指定的 VolGroup00 (/dev/sda2)。然后,将 LVM 卷组 (VolGroup00) 划分为两个 LVM 分区 — 一个用于根文件系统 (/),另一个用于交换分区。
在分区阶段,主要是要确保为 Oracle 分配了足够的交换空间(可用 RAM 的倍数)。下面是 Oracle 的最小交换空间要求:
可用 RAM | 所需交换空间 |
介于 1,024MB 和 2,048MB 之间 | RAM 大小的 1.5 倍 |
介于 2,049MB 和 8,192MB 之间 | 与 RAM 大小相同 |
超过 8,192MB | RAM 大小的 0.75 倍 |
就本安装而言,我将接受所有自动选用的大小。(包括 5,952MB 的交换空间,因为我安装了 4GB 的 RAM。)
如果出于任何原因,自动布局无法配置足够数量的交换空间,您可以通过此屏幕轻松地进行更改。要增加交换分区的大小,单击 [Edit] 编辑卷组 VolGroup00。这将显示“Edit LVM Volume Group:VolGroup00”对话框。首先,单击 [Edit] 进行编辑,减少根文件系统 (/) 的大小(减少的数量是您要添加到交换分区的数量)。例如,要为交换分区添加 512MB 的空间,您需要将根文件系统的大小减少 512MB(即,36,032MB - 512MB = 35,520MB)。现在,将您从根文件系统减少的空间 (512MB) 添加到交换分区。完成后,单击“Edit LVM Volume Group:VolGroup00”对话框中的 [OK]。
如果您对磁盘布局满意,单击 [Next] 继续。
引导加载程序配置
安装程序默认情况下将使用 GRUB 引导加载程序。要使用 GRUB 引导加载程序,接受所有默认值并单击 [Next] 继续。
网络配置
在开始安装操作系统之前,我已确认在每个 Linux 计算机上安装了两个 NIC 接口(卡)。本屏幕应该已经成功地检测到每个网络设备。由于我们要在该计算机上安装 Oracle 数据库,因此需要对网络配置进行一些更改。当然,您在此处的设置取决于您的网络配置。关键的一点是永远不要使用 DHCP 配置该计算机,因为该机算机将用作驻留 Oracle 数据库服务器的主机。您需要使用静态 IP 地址配置该计算机。您还需要使用实际主机名配置服务器。
首先,确保将每个网络设备设置为 [Active on boot]。默认情况下,安装程序可能选择不激活 eth1。
接下来,单击 [Edit],按照以下方法对 eth0 和 eth1 进行编辑。验证已选中“Enable IPv4 support”选项。单击选中“Manual configuration”单选按钮可取消选中“Dynamic IP configuration (DHCP)”选项,然后为您的环境配置一个静态 IP 地址和网络掩码。单击取消选中“Enable IPv6 support”选项。您可能要为本指南中的 eth0 和 eth1 使用不同的 IP 地址,这没有问题。可以将 eth1(互连)置于不同于 eth0(公共网络)的子网中:
eth0:
- 选中 [Enable IPv4 support] 选项
- 取消选中 [Dynamic IP configuration (DHCP)] 选项 —(选择人工配置)
IPv4 地址:192.168.1.151
前缀(网络掩码):255.255.255.0
- 取消选中 [Enable IPv6 support] 选项
eth1:
- 选中 [Enable IPv4 support] 选项
- 取消选中 [Dynamic IP configuration (DHCP)] 选项 —(选择人工配置)
IPv4 地址:192.168.2.151
前缀(网络掩码):255.255.255.0
- 取消选中 [Enable IPv6 support] 选项
接着,手动设置主机名。我对第一个节点使用“racnode1”,对第二个节点使用“racnode2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。
时区选择
为您的环境选择适当的时区,然后单击 [Next] 继续。
设置根口令
选择一个根口令,然后单击 [Next] 继续。
程序包安装默认值
默认情况下,Oracle Enterprise Linux 将安装一台典型服务器所需的大部分软件。但成功安装 Oracle 软件还需要若干其他程序包 (RPM)。运行安装程序时,您可以选择“Customize software”添加 RPM 分组,如“Development Libraries”或“Legacy Library Support”。添加这样的 RPM 分组不成问题。然而,取消选择任何“默认的 RPM”分组或单个的 RPM 可能会导致 Oracle Grid Infrastructure 和 Oracle RAC 安装尝试失败。
对于本文,选中 [Customize now] 单选按钮,然后单击 [Next] 继续。
您可以在这里选择要安装的程序包。Oracle 软件需要的大部分程序包都集中在“程序包组”中(即 Application -> Editors)。由于这些节点上将驻留 Oracle Grid Infrastructure 和 Oracle RAC 软件,请验证至少选择安装以下程序包组。注意,对于许多 Linux 程序包组,并不是所有与该组关联的程序包都被选择进行安装。(选择一个程序包组之后,请注意“Optional packages”按钮。)因此,尽管选择了安装该程序包组,但 Oracle 需要的某些程序包还是没有安装。实际上,Oracle 需要的某些程序包不属于任何 可用的程序包组(例如 libaio-devel)。不要担心。下一节将提供适用于 Oracle Enterprise Linux 5 的 Oracle Grid Infrastructure 11g 第 2 版和 Oracle RAC 11g 第 2 版所需程序包的完整列表。安装操作系统之后,需要从 Oracle Enterprise Linux CD 手动安装这些程序包。现在,安装以下程序包组:
Desktop Environments
GNOME Desktop Environment
Applications
Editors
Graphical Internet
Text-based Internet
Development
Development Libraries
Development Tools
Legacy Software Development
Servers
Server Configuration Tools
Base System
Administration Tools
Base
Java
Legacy Software Support
System Tools
X Window System
除了上述程序包外,还可选择您希望为此节点安装的任何其他程序包,请记住,不要取消选择任何“默认”的 RPM 程序包。选择要安装的程序包之后,单击 [Next] 继续。
准备安装
该屏幕本质上是一个确认屏幕。单击 [Next] 开始安装。如果您使用 CD 安装 Oracle Enterprise Linux,在安装过程中,系统会根据您选择安装的程序包来要求您更换 CD。
恭喜
大功告成。您已经在第一个节点 (racnode1) 上成功安装了 Oracle Enterprise Linux。安装程序将从 CD-ROM 驱动器中弹出 CD/DVD。取出 CD/DVD,单击 [Reboot] 重新引导系统。
安装后向导欢迎屏幕
当系统第一次引导进入 Oracle Enterprise Linux 时,将为您显示另一个 Welcome 屏幕,进入“Post Installation Wizard”。安装后向导允许您进行最终的 O/S 配置设置。在“Welcome”屏幕上,单击 [Forward] 继续。
许可协议
阅读许可协议。选择“Yes, I agree to the License Agreement”,然后单击 [Forward] 继续。
防火墙
在该屏幕上,确保选中 [Disabled] 选项,然后单击 [Forward] 继续。
系统将显示一个警告对话框,提示您未设置防火墙。显示该对话框之后,单击 [Yes] 继续。
SELinux
在 SELinux 屏幕上,选中 [Disabled] 选项,然后单击 [Forward] 继续。
系统将显示一个警告对话框,提示您更改 SELinux 设置需要重新引导系统以便重新标记整个文件系统。显示该对话框之后,单击 [Yes] 确认在第一次引导(安装后向导)完成后将重新引导系统。
Kdump
接受 Kdump 屏幕上的默认设置(禁用),然后单击 [Forward] 继续。
日期和时间设置
如果需要,调整日期和时间设置,然后单击 [Forward] 继续。
创建用户
如果需要,创建其他(非 oracle)操作系统用户帐户,然后单击 [Forward] 继续。对于本文,我不会创建任何其他操作系统帐户。在本指南稍后我将创建“grid”和“oracle”用户帐户。
如果您选择不定义任何其他操作系统用户帐户,单击 [Continue] 确认警告对话框。
声卡
只有当向导检测到声卡时,才会出现该屏幕。在声卡屏幕上,单击 [Forward] 继续。
其他 CD
在“Additional CDs”屏幕上,单击 [Finish] 继续。
重新引导系统
由于我们更改了 SELinux 选项(更改为 disabled),系统将提示重新引导系统。单击 [OK] 重新引导系统以便正常使用。
登录屏幕
重新引导计算机之后,将为您显示登录屏幕。使用“root”用户帐户和在安装期间提供的口令登录。
在第二个节点上进行相同的安装
在第一个节点上安装完 Linux 后,在第二个节点 (racnode2) 上重复上述步骤。确保计算机名和网络进行了正确配置。在我的安装中, racnode2 的配置如下:
首先,确保将每个网络设备设置为 [Active on boot]。安装程序可能选择不激活 eth1。
接下来,单击 [Edit],按照以下方法对 eth0 和 eth1 进行编辑。验证已选中“Enable IPv4 support”选项。单击选中“Manual configuration”单选按钮可取消选中“Dynamic IP configuration (DHCP)”选项,然后为您的环境配置一个静态 IP 地址和网络掩码。单击取消选中“Enable IPv6 support”选项。您可能要为本指南中的 eth0 和 eth1 使用不同的 IP 地址,这没有问题。可以将 eth1(互连)置于不同于 eth0(公共网络)的子网中:
eth0:
- 选中 [Enable IPv4 support] 选项
- 取消选中 [Dynamic IP configuration (DHCP)] 选项 —(选择人工配置)
IPv4 地址:192.168.1.152
前缀(网络掩码):255.255.255.0
- 取消选中 [Enable IPv6 support] 选项
eth1:
- 选中 [Enable IPv4 support] 选项
- 取消选中 [Dynamic IP configuration (DHCP)] 选项 —(选择人工配置)
IPv4 地址:192.168.2.152
前缀(网络掩码):255.255.255.0
- 取消选中 [Enable IPv6 support] 选项
接着,手动设置您的主机名。我对第二个节点使用“racnode2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。
7. 安装 Oracle RAC 所需的 Linux 程序包
在集群中的两个 Oracle RAC 节点上安装以下必需的 Linux 程序包。
安装 Enterprise Linux 之后,下一步是验证并安装 Oracle Clusterware 和 Oracle RAC 所需的所有程序包 (RPM)。Oracle Universal Installer (OUI) 将在安装期间在计算机上执行检查,以检验是否满足相应的操作系统程序包要求。要确保这些检查成功完成,请在开始安装 Oracle 之前查看本节中说明的软件要求。
尽管许多 Oracle 必需的程序包已经在 Enterprise Linux 安装期间安装,但还缺少一些程序包,因为它们在程序包组中被视为可选,或者根本不存在于任何程序包组中!
本节中列出的程序包(或更高版本)是 Oracle Enterprise Linux 5 平台上运行的 Oracle Grid Infrastructure 11g 第 2 版和 Oracle RAC 11g 第 2 版所必需的。
32 位 (x86) 安装
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
elfutils-libelf-devel-static-0.125
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.5-24
glibc-common-2.5
glibc-devel-2.52
glibc-headers-2.5
kernel-headers-2.6.18
ksh-20060214
libaio-0.3.106
libaio-devel-0.3.106
libgcc-4.1.2
libgomp-4.1.2
libstdc++-4.1.2
libstdc++-devel-4.1.2
make-3.81
sysstat-7.0.2
unixODBC-2.2.11
unixODBC-devel-2.2.11
上面列出的每个程序包都可以在 Oracle Enterprise Linux 5 - (x86) CD 的 1 号 CD、2 号 CD 和 3 号 CD 中找到。尽管可以查询每个单独的程序包以确定缺少并需要安装哪个程序包,但更简单的方法是针对这三个 CD 运行 rpm -Uvh PackageName 命令,如下所示。对于已经存在并且是最新版本的程序包,RPM 命令将忽略安装,并在控制台上打印警告消息,表明该程序包已经安装。
# From Enterprise Linux 5.4 (x86)- [CD #1]
mkdir -p /media/cdrom
mount -r /dev/cdrom /media/cdrom
cd /media/cdrom/Server
rpm -Uvh binutils-2.*
rpm -Uvh elfutils-libelf-0.*
rpm -Uvh glibc-2.*
rpm -Uvh glibc-common-2.*
rpm -Uvh kernel-headers-2.*
rpm -Uvh ksh-2*
rpm -Uvh libaio-0.*
rpm -Uvh libgcc-4.*
rpm -Uvh libstdc++-4.*
rpm -Uvh make-3.*
cd /
eject
# From Enterprise Linux 5.4 (x86) - [CD #2]
mount -r /dev/cdrom /media/cdrom
cd /media/cdrom/Server
rpm -Uvh elfutils-libelf-devel-*
rpm -Uvh gcc-4.*
rpm -Uvh gcc-c++-4.*
rpm -Uvh glibc-devel-2.*
rpm -Uvh glibc-headers-2.*
rpm -Uvh libgomp-4.*
rpm -Uvh libstdc++-devel-4.*
rpm -Uvh unixODBC-2.*
cd /
eject
# From Enterprise Linux 5.4 (x86) - [CD #3]
mount -r /dev/cdrom /media/cdrom
cd /media/cdrom/Server
rpm -Uvh compat-libstdc++-33*
rpm -Uvh libaio-devel-0.*
rpm -Uvh sysstat-7.*
rpm -Uvh unixODBC-devel-2.*
cd /
eject
64 位 (x86_64) 安装
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-libstdc++-33-3.2.3(32 位)
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
elfutils-libelf-devel-static-0.125
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.5-24
glibc-2.5-24(32 位)
glibc-common-2.5
glibc-devel-2.5
glibc-devel-2.5(32 位)
glibc-headers-2.5
ksh-20060214
libaio-0.3.106
libaio-0.3.106(32 位)
libaio-devel-0.3.106
libaio-devel-0.3.106(32 位)
libgcc-4.1.2
libgcc-4.1.2(32 位)
libstdc++-4.1.2
libstdc++-4.1.2(32 位)
libstdc++-devel 4.1.2
make-3.81
sysstat-7.0.2
unixODBC-2.2.11
unixODBC-2.2.11(32 位)
unixODBC-devel-2.2.11
unixODBC-devel-2.2.11(32 位)
上面列出的每个程序包都可以在 Oracle Enterprise Linux 5 - (x86_64) CD 的 1 号 CD、2 号 CD、3 号 CD 和 4 号 CD 中找到。尽管可以查询每个单独的程序包以确定缺少并需要安装哪个程序包,但更简单的方法是针对这四个 CD 运行 rpm -Uvh PackageName 命令,如下所示。对于已经存在并且是最新版本的程序包,RPM 命令将忽略安装,并在控制台上打印警告消息,表明该程序包已经安装。
# From Enterprise Linux 5.4 (x86_64)- [CD #1]
mkdir -p /media/cdrom
mount -r /dev/cdrom /media/cdrom
cd /media/cdrom/Server
rpm -Uvh binutils-2.*
rpm -Uvh elfutils-libelf-0.*
rpm -Uvh glibc-2.*
rpm -Uvh glibc-common-2.*
rpm -Uvh ksh-2*
rpm -Uvh libaio-0.*
rpm -Uvh libgcc-4.*
rpm -Uvh libstdc++-4.*
rpm -Uvh make-3.*
cd /
eject
# From Enterprise Linux 5.4 (x86_64) - [CD #2]
mount -r /dev/cdrom /media/cdrom
cd /media/cdrom/Server
rpm -Uvh elfutils-libelf-devel-*
rpm -Uvh gcc-4.*
rpm -Uvh gcc-c++-4.*
rpm -Uvh glibc-devel-2.*
rpm -Uvh glibc-headers-2.*
rpm -Uvh libstdc++-devel-4.*
rpm -Uvh unixODBC-2.*
cd /
eject
# From Enterprise Linux 5.4 (x86_64) - [CD #3]
mount -r /dev/cdrom /media/cdrom
cd /media/cdrom/Server
rpm -Uvh compat-libstdc++-33*
rpm -Uvh libaio-devel-0.*
rpm -Uvh unixODBC-devel-2.*
cd /
eject
# From Enterprise Linux 5.4 (x86_64) - [CD #4]
mount -r /dev/cdrom /media/cdrom
cd /media/cdrom/Server
rpm -Uvh sysstat-7.*
cd /
eject
8. 网络配置
在集群中的两个 Oracle RAC 节点上执行下列网络配置。
尽管我们在 Linux 安装期间进行了一些网络配置,但不要跳过此节,这很重要,因为此节包含了重要的检查步骤,可以检查您是否拥有集群安装的 Oracle Grid Infrastructure 所需的网络硬件和互联网协议 (IP) 地址。
网络硬件要求
以下为该网络配置的硬件要求列表:
每个 Oracle RAC 节点至少必须有两个网络适配器(即网络接口卡 (NIC)):一个用于公共网络接口,另一个用于专用网络接口(互连)。要对公共网络或专用网络使用多个 NIC,Oracle 建议采用 NIC 绑定。对公共网络和专用网络使用不同的绑定(即,对公共网络使用 bond0,对专用网络使用 bond1),这是因为在安装过程中,每个接口要么定义为公共接口,要么定义为专用接口。本文不讨论 NIC 绑定。
每个网络中网络适配器的相关公共接口名称在所有节点上都应相同,网络适配器的相关专用接口名称在所有节点上都应相同。
例如,对于我们的两节点集群,不能这样配置网络适配器:在 racnode1 配置 eth0 作为公共接口,而在 racnode2 上却配置 eth1 作为公共接口。公共接口名称必须相同,因此,必须在两个节点上均配置 eth0 作为公共接口。同样,应在相同的网络适配器上配置专用接口。如果 eth1 是 racnode1 的专用接口,则 eth1 必须是 racnode2 的专用接口。
对于公共网络,每个网络适配器必须支持 TCP/IP。
对于专用网络,互连必须支持用户数据报协议 (UDP),使用支持 TCP/IP(最小要求为 1 Gb 以太网)的高速网络适配器和交换机。
UDP 是 Oracle RAC 的默认互连协议,TCP 是 Oracle Clusterware 的互连协议。对于此互连,必须使用一个交换机。Oracle 建议您使用一个专用交换机。
对于互连,Oracle 不支持令牌环和交叉电缆。
对于专用网络,所有指定互连接口的端点在网络上必须完全可达。每个节点均应连接到所有的专用网络接口。可以使用 ping 命令测试一个互连接口是否可达。
在 Oracle Grid Infrastructure 的安装过程中,系统都会要求您标识 OUI 在您的集群节点上检测到的每个网络接口计划使用方式。必须将每个接口标识为 public interface、private interface 或 not used,并且必须对 Oracle Clusterware 和 Oracle RAC 使用相同的专用接口。
可将若干独立的接口绑定为一个公共接口,这样可在某个 NIC 出现故障时提供冗余性。但是,Oracle 建议您不要为 Oracle Clusterware 和 Oracle RAC 创建不同的接口。如果您对专用互连使用多个 NIC,Oracle 建议您使用 NIC 绑定。请注意,多个专用接口提供负载平衡,但不提供故障切换功能,只有将它们绑定在一起时才提供故障切换功能。
从 Oracle Clusterware 11g 第 2 版开始,无需再为互连提供专用名称或 IP 地址。标识为专用的子网上的 IP 地址将被分配作为集群成员节点的专用 IP 地址。无需在 hosts 目录中手动配置这些地址。如果需要针对互连进行名称解析,可在 hosts 文件或 DNS 上配置专用 IP 名称。而 Oracle Clusterware 会为安装期间定义为专用接口的那个接口(如 eth1)分配互连地址,并将该地址分配给用作专用子网的那个子网。实际上,在本指南中,我会继续在每个节点包括一个专用名称和 IP 地址以用于 RAC 互连。这在专用网络上提供了自我文档编制的方法和一组端点,可供故障排除之用:
192.168.2.151 racnode1-priv
192.168.2.152 racnode2-priv在使用 iSCSI 进行网络存储的生产环境中,我们强烈建议使用 TCP/IP 卸载引擎 (TOE) 卡配置第三个网络接口(如 eth2)作为冗余接口来处理这种存储流量。为简单起见,本文中的配置是让 RAC 专用互连接口 (eth1) 所属的网络同时承载 iSCSI 网络存储流量。在同一网络接口上同时处理 Oracle RAC 的 iSCSI 存储流量和缓存融合流量使我们的测试系统成本低廉,但永远不要考虑在生产环境中使用该方法。
TOE 的基本用意是将 TCP/IP 协议的处理工作从主机处理器卸载到适配器上的硬件或系统中。TOE 通常内嵌在网络接口卡 (NIC) 或主机总线适配器 (HBA) 中,用于减少 CPU 和服务器 I/O 子系统上的 TCP/IP 处理工作量以提高总体性能。
分配 IP 地址
记得我们说过,每个节点至少需要配置两个网络接口,一个使用专用 IP 地址,另一个使用公共 IP 地址。在 Oracle Clusterware 11g 第 2 版之前,网络管理员需要手动分配所有的 IP 地址,要使用静态 IP 地址 — 绝不使用 DHCP。这会包括节点的公共 IP 地址、RAC 互连地址、虚拟 IP 地址 (VIP),以及 11g 第 2 版中新增的单客户端访问名称 (SCAN) IP 地址。实际上,在我以前的所有文章中,我都会强调绝不要使用 DHCP 来分配任何这些 IP 地址。在 11g 第 2 版中,您现在可以选择通过以下两种方法为每个 Oracle RAC 节点分配 IP 地址 — 使用 DHCP 的网格命名服务 (GNS),或者使用 DNS 手动分配静态 IP 地址的传统方法。
网格命名服务 (GNS)
从 Oracle Clusterware 11g 第 2 版开始,引入了另一种分配 IP 地址的方法,即网格命名服务 (GNS)。该方法允许使用 DHCP 分配所有专用互连地址以及大多数 VIP 地址。GNS 和 DHCP 是 Oracle 的新的网格即插即用 (GPnP) 特性的关键要素,如 Oracle 所述,该特性使我们无需配置每个节点的数据,也不必具体地添加和删除节点。通过实现对集群网络需求的自我管理,GNS 实现了动态 网格基础架构。与手动定义静态 IP 地址相比,使用 GNS 配置 IP 地址确实有其优势并且更为灵活,但代价是增加了复杂性,该方法所需的一些组件未在这个构建经济型 Oracle RAC 的指南中定义。例如,为了在集群中启用 GNS,需要在公共网络上有一个 DHCP 服务器,我认为这个 DHCP 服务器超出了本文的讨论范围。
要了解 GNS 的更多优势及其配置方法,请参见适用于 Linux 的 Oracle Grid Infrastructure 11g 第 2 版 (11.2) 安装指南 。
手动分配静态 IP 地址 —(DNS 方法)
如果选择不使用 GNS,在 Oracle Clusterware 11g 第 2 版中仍可手动定义静态 IP 地址,本文将使用此方法分配所有需要的 Oracle Clusterware 联网组件(节点的公共 IP 地址、RAC 互连地址、虚拟 IP 地址以及 SCAN IP 地址)。
您会注意到本节的标题包含了“DNS 方法”这样的字眼。Oracle 建议在开始安装 Oracle Grid Infrastructure之前,在域名服务器 (DNS) 中手动配置静态 IP 地址。然而,在构个经济型 Oracle RAC 时,您并非总是可以访问 DNS 服务器。在 11g 第 2 版之前,这不是一个很大的障碍,因为可以在所有节点的 host 文件 (/etc/hosts) 中定义每个 IP 地址而不必使用 DNS。这包括节点的公共 IP 地址、RAC 互连地址和虚拟 IP 地址 (VIP)。
然而,事情在 Oracle Grid Infrastructure 11g 第 2 版中有了些许变化。
让我们从 RAC 专用互连开始。在 Oracle Grid Infrastructure 的安装过程中无需再为互连提供 IP 地址或专用名称(即 racnode1-priv 或 racnode2-priv)。现在,Oracle Clusterware 为安装期间定义为专用接口的接口(如 eth1)分配互连地址,并将该地址分配给用作专用子网的那个子网(本文中为 192.168.2.0)。如果需要针对互连进行名称解析,可在 hosts 文件或 DNS 上配置专用 IP 名称。实际上,在本指南中,我会继续在每个节点包括一个专用名称和 IP 地址以用于 RAC 互连。这在专用网络上提供了自我文档编制的方法和一组端点,可供故障排除之用:
192.168.2.151 racnode1-priv
192.168.2.152 racnode2-priv
在 11g 第 2 版中,节点的公共 IP 地址和虚拟 IP 地址 (VIP) 保持不变。Oracle 建议定义每个节点的名称和 IP 地址(将来要通过 DNS 进行解析)并将该定义包括每个节点的 hosts 文件中。对于 Oracle Grid Infrastructure 的当前版本和以前版本,Oracle Clusterware 毫无疑问可以仅用一个 hosts 文件来解析节点的公共 IP 地址和 VIP:
192.168.1.151 racnode1
192.168.1.251 racnode1-vip
192.168.1.152 racnode2
192.168.1.252 racnode2-vip
单客户端访问名称 (SCAN) 虚拟 IP 是 11g 第 2 版的一个新特性,看起来该特性引发了很多讨论!必须在 GNS 或 DNS 中配置 SCAN 以便循环解析为三个地址(建议的数量)或至少一个地址。如果您选择不使用 GNS,Oracle 会告诉您,SCAN 必须通过 DNS 来解析而不是通过 hosts 文件来解析。如果不能通过 DNS(或 GNS)解析 SCAN,Oracle Grid Infrastructure 安装过程中的集群验证实用程序检查将失败。如果您不能访问 DNS,我在配置 SCAN 而不使用 DNS 一节提供了一种简单的变通方法。该方法需要在安装 Oracle Grid Infrastructure 之前修改 nslookup 实用程序。
集群的单客户端访问名称 (SCAN)
如果您曾经通过添加新节点来扩展 Oracle RAC 集群(或者通过删除节点来缩小 RAC 集群),您就会了解这种痛苦 — 遍历所有客户端,更新每个客户端的 SQL*Net 或 JDBC 配置以反映这个新增或删除的节点!为解决此问题,Oracle 11g 第 2 版引入了一个新特性,即单客户端访问名称(简称为 SCAN)。SCAN 这个新特性为客户端提供了单一的主机名,用于访问集群中运行的 Oracle 数据库。如果您在集群中添加或删除节点,使用 SCAN 的客户端无需更改自己的 TNS 配置。无论集群包含哪些节点,SCAN 资源及其关联的 IP 地址提供了一个稳定的名称供客户端进行连接使用。在 Oracle Grid Infrastructure 安装过程的询问阶段,系统会要求您提供主机名和最多三个 IP 地址以便用于 SCAN 资源。为了获得较高的可用性和可伸缩性,Oracle 建议您对 SCAN 名称进行配置,以便解析为三个 IP 地址。SCAN 必须至少解析为一个地址。
SCAN 虚拟 IP 名称类似于节点的虚拟 IP 地址所使用的名称,如 racnode1-vip。然而,与虚拟 IP 不同的是,SCAN 与整个集群相关联,而不是与一个节点相关联,它可与多个 IP 地址相关联,而不是只与一个地址相关联。注意,SCAN 地址、虚拟 IP 地址和公共 IP 地址必须属于同一子网。
应该将 SCAN 配置为可由集群中的网格命名服务 (GNS) 进行解析,或由域名服务 (DNS) 解析进行解析。
在本文中,我会将 SCAN 配置为使用 DNS 方法仅解析为一个手动配置的静态 IP 地址(但不在 DNS 中对其进行实际定义):
192.168.1.187 racnode-cluster-scan
配置公共网络和专用网络
在我们的双节点示例中,需要在两个节点上配置网络,以访问公共网络及其专用互连。
在 Enterprise Linux 中配置网络设置的最简单方法是使用“Network Configuration”程序。Network Configuration 是一个 GUI 应用程序,可以从命令行以“root”用户帐户进行启动,如下所示:
[root@racnode1 ~]# /usr/bin/system-config-network &
使用 Network Configuration 应用程序,您需要配置两个 NIC 设备以及 /etc/hosts 文件。您可以使用 Network Configuration GUI 完成这两个任务。注意,两个节点的 /etc/hosts 设置相同,而且我删除了与 IPv6 有关的所有项。例如:
::1 localhost6.localdomain6 localhost6
我们的示例 Oracle RAC 配置将使用以下网络设置:
Oracle RAC 节点 1 — (racnode1) | ||||
设备 | IP 地址 | 子网 | 网关 | 用途 |
eth0 | 192.168.1.151 | 255.255.255.0 | 192.168.1.1 | 将 racnode1 连接到公共网络 |
eth1 | 192.168.2.151 | 255.255.255.0 | 将 racnode1(互连)连接到 racnode2 (racnode2-priv) | |
/etc/hosts | ||||
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost |
Oracle RAC 节点 2 — (racnode2) | ||||
设备 | IP 地址 | 子网 | 网关 | 用途 |
eth0 | 192.168.1.152 | 255.255.255.0 | 192.168.1.1 | 将 racnode2 连接到公共网络 |
eth1 | 192.168.2.152 | 255.255.255.0 | 将 racnode2(互连)连接到 racnode1 (racnode1-priv) | |
/etc/hosts | ||||
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost |
以下屏幕截图只显示了 Oracle RAC 节点 1 (racnode1)。确保对两个 Oracle RAC 节点进行了所有适当的网络设置。
图 2:Network Configuration 屏幕,节点 1 (racnode1)
图 3:Ethernet Device 屏幕,eth0 (racnode1)
图 4:Ethernet Device 屏幕,eth1 (racnode1)
图 5:Network Configuration 屏幕,/etc/hosts (racnode1)
配置网络之后,可以使用 ifconfig 命令验证一切是否正常。以下示例来自于 racnode1:
[root@racnode1 ~]# /sbin/ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:14:6C:76:5C:71
inet addr:192.168.1.151 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::214:6cff:fe76:5c71/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:759780 errors:0 dropped:0 overruns:0 frame:0
TX packets:771948 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:672708275 (641.5 MiB) TX bytes:727861314 (694.1 MiB)
Interrupt:177 Base address:0xcf00
eth1 Link encap:Ethernet HWaddr 00:0E:0C:64:D1:E5
inet addr:192.168.2.151 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::20e:cff:fe64:d1e5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:120 errors:0 dropped:0 overruns:0 frame:0
TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:24544 (23.9 KiB) TX bytes:8634 (8.4 KiB)
Base address:0xddc0 Memory:fe9c0000-fe9e0000
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:3191 errors:0 dropped:0 overruns:0 frame:0
TX packets:3191 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4296868 (4.0 MiB) TX bytes:4296868 (4.0 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)
确保 RAC 节点名没有出现在环回地址中
确保 /etc/hosts 文件的环回地址中不包含节点名(racnode1 或 racnode2)。如果计算机名出现在环回地址条目中,如下所示:
127.0.0.1 racnode1 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
检查并关闭 UDP ICMP 拒绝
在 Linux 安装期间,我曾说过不配置防火墙选项。默认情况下,安装程序会选中配置防火墙的选项。这使我吃了好几次苦头,因此我要反复确认未配置防火墙选项,并确保 udp ICMP 过滤功能已关闭。
如果防火墙阻止或拒绝了 UDP ICMP,Oracle Clusterware 软件将在运行几分钟之后崩溃。如果 Oracle Clusterware 进程出现故障,您的 <计算机名>_evmocr.log
文件中将出现类似以下的内容:
08/29/2005 22:17:19
oac_init:2: Could not connect to server, clsc retcode = 9
08/29/2005 22:17:19
a_init:12!: Client init unsuccessful : [32]
ibctx:1:ERROR: INVALID FORMAT
proprinit:problem reading the bootblock or superbloc 22
如果遇到此类错误,解决方法是删除 UDP ICMP (iptables) 拒绝规则,或者只需关闭防火墙选项。之后,Oracle Clusterware 软件将开始正常工作而不会崩溃。以下命令应以 root
用户帐户的身份执行:
检查以确保关闭了防火墙选项。如果防火墙选项已停用(如下面的示例所示),则不必继续执行下面的步骤。
[root@racnode1 ~]# /etc/rc.d/init.d/iptables status
Firewall is stopped.
如果防火墙选项已启用,您首先需要手动禁用 UDP ICMP 拒绝:
[root@racnode1 ~]# /etc/rc.d/init.d/iptables stop
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
然后,针对下一次服务器重新引导关闭 UDP ICMP 拒绝(应该始终被关闭):
[root@racnode1 ~]# chkconfig iptables off
9. 集群时间同步服务
在集群中的两个 Oracle RAC 节点上执行以下集群时间同步服务配置。
Oracle Clusterware 11g 第 2 版及更高版本要求在部署了 Oracle RAC 的集群的所有节点上实现时间同步。Oracle 提供了两种方法来实现时间同步:一种方法是配置了网络时间协议 (NTP) 的操作系统,另一种方法是新的 Oracle 集群时间同步服务 (CTSS)。Oracle 集群时间同步服务 (ctssd) 旨在为那些 Oracle RAC 数据库无法访问 NTP 服务的组织提供服务。
对 NTP 的配置不在本文的讨论范围内,因此我们选择集群时间同步服务作为网络时间协议。
配置集群时间同步服务 — (CTSS)
如果您想使用集群时间同步服务在集群中提供同步服务,需要卸载网络时间协议 (NTP) 及其配置。
要停用 NTP 服务,必须停止当前的 ntpd 服务,从初始化序列中禁用该服务,并删除 ntp.conf 文件。要在 Oracle Enterprise Linux 上完成这些步骤,以 root 用户身份在两个 Oracle RAC 节点上运行以下命令:
[root@racnode1 ~]# /sbin/service ntpd stop
[root@racnode1 ~]# chkconfig ntpd off
[root@racnode1 ~]# mv /etc/ntp.conf /etc/ntp.conf.original
还要删除以下文件:
[root@racnode1 ~]# rm /var/run/ntpd.pid
此文件保存了 NTP 后台程序的 pid。
当安装程序发现 NTP 协议处于非活动状态时,安装集群时间同步服务将以活动模式自动进行安装并通过所有节点的时间。如果发现配置了 NTP,则以观察者模式 启动集群时间同步服务,Oracle Clusterware 不会在集群中进行活动的时间同步。
在安装后,要确认 ctssd 处于活动状态,请作为网格安装所有者 (grid) 输入以下命令:
[grid@racnode1 ~]$ crsctl check ctss
CRS-4701: The Cluster Time Synchronization Service is in Active mode.
CRS-4702: Offset (in msec): 0
配置网络时间协议 —(仅当不按如上所述使用 CTSS 时)
注:请注意,本指南将使用集群时间同步服务实现集群中的两个 Oracle RAC 节点的时间同步。提供此节仅出于说明目的,此节内容可供已设置为其域中使用 NTP 的组织使用。
如果您正在使用 NTP,并且愿意继续使用它而不是集群时间同步服务,那么您需要修改 NTP 初始化文件,在其中设置 -x 标志,这样可避免向后调整时间。完成此任务后,重启网络时间协议后台程序。
为了在 Oracle Enterprise Linux、Red Hat Linux 和 Asianux 系统上完成此任务,编辑 /etc/sysconfig/ntpd 文件,添加 -x 标志,如下例所示:
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"
# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=no
# Additional options for ntpdate
NTPDATE_OPTIONS=""
然后,重启 NTP 服务。
# /sbin/service ntp restart
在 SUSE 系统上,修改配置文件 /etc/sysconfig/ntp,在其中进行以下设置:
NTPD_OPTIONS="-x -u ntp"
用以下命令重启后台程序:
# service ntp restart
10. 安装 Openfiler
在网络存储服务器 (openfiler1) 上执行以下安装。
在两个 Oracle RAC 节点上进行网络配置之后,下一步是将 Openfiler 软件安装到网络存储服务器 (openfiler1)。本文稍后会将网络存储服务器配置为 iSCSI 存储设备,以满足 Oracle Clusterware 和 Oracle RAC 的所有共享存储需求。
Openfiler 构建于 rPath Linux 之上,它是一个基于浏览器的免费网络存储管理实用程序,可在一个框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。整个软件体系与许多开源应用程序(如 Apache、Samba、LVM2、ext3、Linux NFS 和 iSCSI Enterprise Target)相连接。Openfiler 将这些随处可见的技术组合到一个易于管理的小型管理解决方案中,该解决方案的前端是一个基于 Web 的功能强大的管理界面。
Openfiler 支持 CIFS、NFS、HTTP/DAV 和 FTP,但是,我们将仅使用它的 iSCSI 功能为 Oracle RAC 11g 所需的共享存储组件实现低成本的 SAN。操作系统和 Openfiler 应用程序将安装在一个内置 SATA 磁盘上。另一个内置 73GB 15K SCSI 硬盘将被配置为一个“卷组”,用于满足所有共享磁盘存储需求。Openfiler 服务器将配置为使用该卷组进行基于 iSCSI 的存储,并且将在我们的 Oracle RAC 11g 配置中使用该卷组存储 Oracle Clusterware 和 Oracle RAC 数据库所需的共享文件。
请注意,只要网络存储服务器 (Openfiler) 能够识别并具有足够的空间,任何类型的硬盘(内置或外置)都可用于数据库存储。例如,我已在 500GB 内置 SATA 磁盘上建立了一个额外的分区用于 iSCSI 目标,但决定在此例中使用速度更快的 SCSI 磁盘。
要了解有关 Openfiler 的更多信息,请访问其网站 http://www.openfiler.com/
下载 Openfiler
根据您的硬件体系结构,使用以下链接下载适用于 x86 或 x86_64 的 Openfiler NAS/SAN Appliance 2.3 版(最终版)。本指南使用 x86_64。下载 Openfiler 之后,需要将 ISO 映像刻录到 CD。
32 位 (x86) 安装
openfiler-2.3-x86-disc1.iso (322 MB)
64 位 (x86_64) 安装
openfiler-2.3-x86_64-disc1.iso (336 MB)
如果您将以上 ISO 文件下载到 MS Windows 计算机,可以使用多种方法将这些映像(ISO 文件)刻录到 CD。您可能很熟悉这个过程,甚至已经拥有合适的软件,可以将映像刻录到 CD。如果您不熟悉这个过程,并且没有将映像刻录到 CD 所需的软件,这里提供了两个软件程序包(实际上有许多个):
UltraISO
Magic ISO Maker
安装 Openfiler
本节概述了用于安装 Openfiler 软件的各个屏幕。在本文中,我选择了使用所有默认选项安装 Openfiler。所需的唯一手动更改是为了配置本地网络设置。
安装完成之后,服务器将重新引导以确保启动并识别所需的所有组件、服务和驱动程序。重新引导之后,Openfiler 服务器将会发现所有外置硬盘驱动器(若已连接)。
有关更详细的安装说明,请访问 http://www.openfiler.com/learn/。但是,我建议使用下面提供的说明对该 Oracle RAC 11g 进行配置。
将 Openfiler 软件安装到网络存储服务器之前,应该先安装两个 NIC 接口(卡),连接并打开所有外置硬盘驱动器(如果您要使用外置硬盘驱动器)。
在下载并将 Openfiler ISO 映像(ISO 文件)刻录到 CD 之后,将该 CD 插入网络存储服务器(在本例中是 openfiler1),打开电源,并按照以下说明来回应安装屏幕的提示。
引导屏幕
第一个屏幕是 Openfiler 引导屏幕。在 boot:提示符处按 [Enter] 键启动安装过程。
介质测试
当要求测试 CD 介质时,用 Tab 键切换到 [Skip] 并按 [Enter] 键。如果有错误,介质刻录软件应该已经向我们发出警告。在几秒钟后,安装程序将会检测视频卡、显示器和鼠标。然后安装程序进入 GUI 模式。
欢迎使用 Openfiler NSA
在该欢迎屏幕上,单击 [Next] 继续。
键盘配置
下一个屏幕将提示您进行键盘设置。为您的配置作出合适的选择。
磁盘分区设置
下一个屏幕将询问是使用“Automatic Partitioning”还是“Manual Partitioning with Disk Druid”进行磁盘分区。虽然 Openfiler 官方文档建议使用手动分区,但我选择使用“自动分区”,因为我的示例配置较为简单。
选择 [Automatically partition] 并单击 [Next] 继续。
自动分区
如果以前在本机上安装了 Linux,则下一屏幕将询问您是要“删除”还是“保留”旧分区。选择 [Remove all partitions on this system] 选项。就我的示例配置而言,我选择了仅使用 500GB SATA 内置硬盘驱动器 [sda] 来进行操作系统和 Openfiler 应用程序的安装。我取消了对 73GB SCSI 内置硬盘驱动器的选择,因为在下一节中该磁盘将专门用于创建单个“卷组”,该卷组将用于 Oracle Clusterware 和 Oracle RAC 的所有基于 iSCSI 的共享磁盘存储之需。
我还选中了 [Review (and modify if needed) the partitions created] 复选框。单击 [Next] 继续。
随后会显示一个对话窗口,询问您是否真的要删除所有分区。单击 [Yes] 回复这一警告。
分区
随后安装程序将允许您查看(如果需要还可以更改)它为您在上一屏中选择的硬盘自动选择的磁盘分区。在绝大多数情况下,安装程序将为 /boot 分配 100MB,为交换分区分配足够量的空间,而将剩余空间分配给这个(这些)磁盘的根 (/) 分区。在本示例中,我对安装程序为 /dev/sda 建议的分区感到满意。
安装程序还将显示它所发现的任何其他内置硬盘。对于我的示例配置,安装程序发现了 73GB SCSI 内置硬盘作为 /dev/sdb。现在,我将“删除”此驱动器上的任何及所有分区(只有一个分区,/dev/sdb1)。在下一节,我将为该特定硬盘创建所需分区。
网络配置
在启动 Openfiler 安装之前,我已确认在网络存储服务器上安装了两个 NIC 接口(卡)。本屏幕应该已经成功地检测到每个网络设备。
首先,确保将每个网络设备设置为 [Active on boot]。默认情况下,安装程序可能选择不激活 eth1。
接下来,单击 [Edit],按照以下方法对 eth0 和 eth1 进行编辑。您可能要为 eth0 和 eth1 使用不同的 IP 地址,没有问题。但是,您必须将 eth1(存储网络)配置为与 racnode1 和 racnode2 上的 eth1 位于同一子网中:
eth0:
- 取消选中 [Configure using DHCP] 选项
- 选中 [Activate on boot]
- IP 地址:192.168.1.195
- 子网掩码:255.255.255.0
eth1:
- 取消选中 [Configure using DHCP] 选项
- 选中 [Activate on boot]
- IP 地址:192.168.2.195
- 子网掩码:255.255.255.0
接着,手动设置您的主机名。我使用的主机名是“openfiler1”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。
时区选择
下一个屏幕将允许您配置时区信息。为您的位置作出合适的选择。
设置根口令
选择一个根口令,然后单击 [Next] 继续。
准备安装
该屏幕本质上是一个确认屏幕。单击 [Next] 开始安装。
恭喜
大功告成。您已经成功地在网络存储服务器上安装了 Openfiler。安装程序将从 CD-ROM 驱动器中弹出 CD。取出 CD,单击 [Reboot] 重新引导系统。
如果在重新引导后一切都已成功,您现在应该看到文本登录屏幕和用于管理 Openfiler 服务器的 URL。
在 Openfiler 服务器上修改 /etc/hosts 文件
虽然并非必要,但我通常会将 /etc/hosts 文件的内容从一个 Oracle RAC 节点复制到新的 Openfiler 服务器。在测试集群网络时,这可以实现方便的名称解析。
11. 使用 Openfiler 配置 iSCSI 卷
在网络存储服务器 (openfiler1) 上执行以下配置任务。
可以使用 Openfiler Storage Control Center(一个基于浏览器的工具,通过端口 446 上的 https 连接实现)执行 Openfiler 管理。例如:
https://openfiler1.idevelopment.info:446/
从 Openfiler Storage Control Center 的主页,以管理员身份登录。Openfiler 的默认管理员登录凭证为:
Username: openfiler
Password: password
管理员看到的第一个页面是 [Status] / [System Information] 屏幕。
要将 Openfiler 用作 iSCSI 存储服务器,我们需要执行六个主要任务:设置 iSCSI 服务、配置网络访问、指定物理存储器并对其分区、创建新的卷组、创建所有逻辑卷,最后,为每个逻辑卷创建新的 iSCSI 目标。
服务
要控制服务,我们使用 Openfiler Storage Control Center 并转到 [Services] / [Manage Services]:
图 6:启用 iSCSI Openfiler 服务
要启用 iSCSI 服务,单击“iSCSI target server”服务名称后面的“Enable”链接。之后,“iSCSI target server”状态应变为“Enabled”。
ietd 程序将实现 iSCSI Enterprise Target 软件的用户级部分,以便在 Linux 上构建 iSCSI 存储系统。启用 iSCSI target 之后,我们应该能够通过 SSH 登录到 Openfiler 服务器,并且可看到 iscsi-target 服务正在运行:
[root@openfiler1 ~]# service iscsi-target status
ietd (pid 14243) is running...
网络访问配置
下一步是配置 Openfiler 中的网络访问,指定需要通过存储(专用)网络访问 iSCSI 卷的两个 Oracle RAC 节点(racnode1 和 racnode2)。注意,本节稍后将会创建 iSCSI 卷。另请注意,本步骤并不实际授予两个 Oracle RAC 节点访问 iSCSI 逻辑卷所需的相应权限。授予权限的操作将在本节稍后通过对每个新逻辑卷更新 ACL 来进行。
如同上一节,我们使用 Openfiler Storage Control Center 并转到 [System] / [Network Setup] 来完成网络访问配置。通过页面底部的“Network Access Configuration”部分,管理员可以设置网络和/或主机以允许其访问 Openfiler appliance 导出的资源。就本文而言,我们希望单独添加两个 Oracle RAC 节点,而不是允许整个 192.168.2.0 网络访问 Openfiler 资源。
输入每个 Oracle RAC 节点时,请注意“Name”域只是一个逻辑名称,仅供参考。根据输入节点的惯例,我仅使用了为该 IP 地址定义的节点名称。接下来,在“Network/Host”域中输入实际节点时,始终使用其 IP 地址,即使其主机名已经在 /etc/hosts 文件或 DNS 中定义。最后,在我们的 C 类网络中输入实际主机时,使用子网掩码 255.255.255.255。
记住,您要为集群中的每个 RAC 节点输入专用 网络 (eth1) 的 IP 地址,这一点很重要。
下图显示了添加两个 Oracle RAC 节点后的结果:
图 7:为 Oracle RAC 节点配置 Openfiler 网络访问
物理存储
在本节中,我们将创建三个 iSCSI 卷,以供集群中的两个 Oracle RAC 节点用作共享存储。这将在连接到 Openfiler 服务器的内置 73GB 15K SCSI 硬盘驱动器上执行多个步骤。
存储设备(如内置 IDE/SATA/SCSI/SAS 磁盘、存储阵列、外置 USB 驱动器、外置 FireWire 驱动器或者任何其他存储设备)可以连接到 Openfiler 服务器,并供客户端使用。如果在操作系统级发现了这些设备,就可以使用 Openfiler Storage Control Center 设置和管理所有这些存储设备。
在本例中,我们有一个 73GB 的内置 SCSI 硬盘驱动器用于满足共享存储之需。在 Openfiler 服务器上,该驱动器显示为 /dev/sdb (MAXTOR ATLAS15K2_73SCA)。要看到该驱动器并启动 iSCSI 卷的创建过程,请从 Openfiler Storage Control Center 转到 [Volumes] / [Block Devices]:
图 8:Openfiler 物理存储 — 块设备管理
对物理磁盘进行分区
我们要执行的第一步是在 /dev/sdb 内置硬盘上创建一个主分区。单击 /dev/sdb 链接,我们会看到“Edit”或“Create”选项,分别用于编辑和创建分区。由于我们将创建一个跨整个磁盘的主分区,因此可以将大多数选项保留为默认设置,唯一的修改是将“Partition Type”由“Extended partition”更改为“Physical volume”。下面是我为了在 /dev/sdb 上创建主分区而指定的值:
模式:Primary
分区类型:Physical volume
开始柱面:1
结束柱面:8924现在,大小将显示 68.36 GB。要接受该设置,单击“Create”按钮。这将在我们的内置硬盘上生成一个新的分区 (/dev/sdb1):
图 9:对物理卷进行分区
卷组管理
下一步是创建卷组。我们将创建一个名为 racdbvg 的卷组,其中包含新创建的主分区。
从 Openfiler Storage Control Center 中转到 [Volumes] / [Volume Groups]。我们将看到所有现有的卷组,或者什么也看不到(我们的情况就是这样)。在 Volume Group Management 屏幕中,输入新卷组的名称 (racdbvg),单击 /dev/sdb1 前面的复选框以选中该分区,最后单击“Add volume group”按钮。之后,我们会看到一个列表,其中显示出我们新创建的这个名为“racdbvg”的卷组:
图 10:创建了新卷组
逻辑卷
现在,我们可以在新创建的卷组 (racdbvg) 中创建三个逻辑卷。
从 Openfiler Storage Control Center 中转到 [Volumes] / [Add Volume]。我们将看到新创建的卷组 (racdbvg) 及其块存储统计信息。该屏幕底部还提供了一个选项,用于在选定的卷组中创建一个新卷 —(在“racdbvg”中创建一个卷)。使用该屏幕创建以下三个逻辑 (iSCSI) 卷。在创建每个逻辑卷之后,应用程序将转至“Manage Volumes”屏幕。然后,您需要单击后退到“Add Volume”选项卡以创建下一个逻辑卷,直至三个 iSCSI 卷全部创建完毕:
iSCSI / 逻辑卷 卷名 卷描述 所需空间 (MB) 文件系统类型 racdb-crs1
racdb - ASM CRS Volume 1 2,208 iSCSI racdb-data1
racdb - ASM Data Volume 1 33,888 iSCSI racdb-fra1
racdb - ASM FRA Volume 1 33,888 iSCSI 实际上,我们已经创建了三个 iSCSI 磁盘,现在可以将它们呈现给网络上的 iSCSI 客户端(racnode1 和 racnode2)。“Manage Volumes”屏幕应如下所示:
图 11:新的 iSCSI 逻辑卷
iSCSI 目标
现在,我们有了三个 iSCSI 逻辑卷。但是,为了使 iSCSI 客户端可以访问这些逻辑卷,首先需要为这三个卷中的每个卷创建一个 iSCSI 目标。每个 iSCSI 逻辑卷将映射 到一个特定的 iSCSI 目标,并将为两个 Oracle RAC 节点授予对该目标的相应网络访问权限。对于本文,在 iSCSI 逻辑卷和 iSCSI 目标之间将会有一一映射的关系。
创建和配置 iSCSI 目标的过程包括三步:创建一个唯一的目标 IQN(实质上是新的 iSCSI 目标的通用名称),将上一节中创建的一个 iSCSI 逻辑卷映射到新创建的 iSCSI 目标,最后,授予两个 Oracle RAC 节点访问该新 iSCSI 目标的权限。请注意,需要对上一节中创建的三个 iSCSI 逻辑卷中的每个卷都执行一次此过程。
对于本文,下表列出了新的 iSCSI 目标名称(目标 IQN)及其将映射到的 iSCSI 逻辑卷:
iSCSI 目标/逻辑卷映射 | ||
目标 IQN | iSCSI 卷名 | 卷描述 |
iqn.2006-01.com.openfiler:racdb.crs1 |
racdb-crs1 |
racdb - ASM CRS Volume 1 |
iqn.2006-01.com.openfiler:racdb.data1 |
racdb-data1 |
racdb - ASM Data Volume 1 |
iqn.2006-01.com.openfiler:racdb.fra1 |
racdb-fra1 |
racdb - ASM FRA Volume 1 |
现在我们来创建三个新的 iSCSI 目标 — 为每个 iSCSI 逻辑卷创建一个。下面举例说明通过创建 Oracle Clusterware/racdb-crs1 目标 ( iqn.2006-01.com.openfiler:racdb.crs1
) 来创建新的 iSCSI 目标时所需执行的三个步骤。这个三步过程需要对上表中列出的三个新 iSCSI 目标中的每一个都重复执行一遍。
创建新目标 IQN
从 Openfiler Storage Control Center 中转到 [Volumes] / [iSCSI Targets]。确保选择了灰色子选项卡“Target Configuration”。您可在此选项卡页中创建一个新的 iSCSI 目标。系统会自动生成一个默认值,作为新 iSCSI 目标的名称(常称为“目标 IQN”)。目标 IQN 的一个示例是“iqn.2006-01.com.openfiler:tsn.ae4683b67fd3
”:
图 12:创建新的 iSCSI 目标:默认目标 IQN
我喜欢用更具含义的字串来替换这个默认目标 IQN 最后一段。对于第一个 iSCSI 目标(Oracle Clusterware/racdb-crs1),我将这样来修改默认的目标 IQN:将字符串“tsn.ae4683b67fd3
”替换为“racdb.crs1
”,如下面的图 13 所示:
图 13:创建新的 iSCSI 目标:替换默认目标 IQN
对新的目标 IQN 满意之后,单击“Add”按钮。这将会创建一个新的 iSCSI 目标,然后会出现一个页面,您可以在该页面中修改新 iSCSI 目标的一系列设置。对于本文,无需更改新 iSCSI 目标的任何设置。
LUN 映射
创建新的 iSCSI 目标之后,下一步是将相应的 iSCSI 逻辑卷映射到该目标。在“Target Configuration”子选项卡下,验证在“Select iSCSI Target”部分中选择了正确的 iSCSI 目标。如果不是这样,使用下拉菜单选择正确的 iSCSI 目标,然后单击“Change”按钮。
接下来,单击名为“LUN Mapping”的灰色子选项卡(在“Target Configuration”子选项卡旁)。找到相应的 iSCSI 逻辑卷(本例中为 /dev/racdbvg/racdb-crs1),然后单击“Map”按钮。无需更改此页面中的任何设置。对卷 /dev/racdbvg/racdb-crs1 单击“Map”按钮后,您的屏幕应如图 14 所示:
图 14:创建新的 iSCSI 目标:映射 LUN
网络 ACL
需要先授予 iSCSI 客户端相应的权限,它才能访问新创建的 iSCSI 目标。在前面,我们已通过 Openfiler 对两个主机(Oracle RAC 节点)进行网络访问配置。这两个节点需要通过存储(专用)网络访问新的 iSCSI 目标。现在,我们需要授予这两个 Oracle RAC 节点访问新 iSCSI 目标的权限。
单击名为“Network ACL”的灰色子选项卡(在“LUN Mapping”子选项卡旁)。对当前的 iSCSI 目标,将两个主机的“Access”值由“Deny”更改为“Allow”,然后单击“Update”按钮。
图 15:创建新的 iSCSI 目标:更新网络 ACL
返回到创建新的目标 IQN 一节,对其余两个 ISCSI 逻辑卷执行这三个任务,同时替换“iSCSI 目标/逻辑卷映射”表中找到的值。
12. 在 Oracle RAC 节点上配置 iSCSI 卷
在集群中的两个 Oracle RAC 节点上配置 iSCSI 启动器。而创建分区只应在 RAC 集群的一个节点上执行。
iSCSI 客户端可以是提供 iSCSI 支持(驱动程序)的任何系统(Linux、Unix、MS Windows、Apple Mac 等)。在我们的示例中,客户端是两个 Linux 服务器(racnode1 和 racnode2),它们运行的是 Oracle Enterprise Linux 5.4。
在本节中,我们将在两个 Oracle RAC 节点上配置 iSCSI 软件启动器。Oracle Enterprise Linux 5.4 包括 Open-iSCSI iSCSI 软件启动器,该软件启动器位于 iscsi-initiator-utils RPM 中。这是对早期版本 Oracle Enterprise Linux (4.x) 的一个更改,这些早期版本中包含作为 Linux-iSCSI 项目的一部分而开发的 Linux iscsi-sfnet 软件驱动程序。所有 iSCSI 管理任务(如发现和登录)将使用 Open-iSCSI 中包含的命令行接口 iscsiadm。
iSCSI 软件启动器将配置为自动登录网络存储服务器 (openfiler1),并发现 上一节中创建的 iSCSI 卷。之后,我们将逐步使用 udev 为发现的每个 iSCSI 目标名称创建永久性本地 SCSI 设备名称(即 /dev/iscsi/crs1
)。拥有一致的本地 SCSI 设备名称及其映射到的 iSCSI 目标,有助于在配置 ASM 时能够区分三个卷。但是,在此之前,我们首先必须安装 iSCSI 启动器软件。
注:本指南使用 ASMLib 2.0,它是 Oracle Database 的自动存储管理 (ASM) 特性的一个支持库。ASMLib 将用于对本指南中所使用的所有 iSCSI 卷进行标记。默认情况下,ASMLib 已为 ASM 使用的存储设备提供了永久性路径和权限。有了该特性后,无需用存储设备路径和权限更新 udev 或 devlabel 文件。就本文来说,实际上我仍然选择使用 udev 为发现的每个 SCSI 目标名称创建永久性本地 SCSI 设备名称。这提供了一种自我文档编制的方法,有助于快速确定每个卷的名称和位置。
安装 iSCSI(启动器)服务
就 Oracle Enterprise Linux 5.4 来说,默认情况下不会安装 Open-iSCSI iSCSI 软件启动器。该软件包含在 1 号 CD 上的 iscsi-initiator-utils 程序包中。要确定该程序包是否已安装(大多数情况下没有安装),在两个 Oracle RAC 节点上执行以下命令:
[root@racnode1 ~]# rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n"| grep iscsi-initiator-utils
如果 iscsi-initiator-utils 程序包未安装,将 1 号 CD 加载到每个 Oracle RAC 节点中并执行以下命令:
[root@racnode1 ~]# mount -r /dev/cdrom /media/cdrom
[root@racnode1 ~]# cd /media/cdrom/Server
[root@racnode1 ~]# rpm -Uvh iscsi-initiator-utils-*
[root@racnode1 ~]# cd /
[root@racnode1 ~]# eject
确认 iscsi-initiator-utils 程序包现在已安装:
[root@racnode1 ~]# rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n"| grep iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.871-0.10.el5 (x86_64)
配置 iSCSI(启动器)服务
验证 iscsi-initiator-utils 程序包已经安装到两个 Oracle RAC 节点之后,启动 iscsid 服务,并使其在系统引导时自动启动。我们还将配置 iscsi 服务在系统启动时自动启动,自动登录到所需的 iSCSI 目标。
[root@racnode1 ~]# service iscsid start
Turning off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
[root@racnode1 ~]# chkconfig iscsid on
[root@racnode1 ~]# chkconfig iscsi on
现在 iSCSI 服务已经启动,下面使用 iscsiadm 命令行接口发现网络存储服务器上的所有可用目标。这应该在两个 Oracle RAC 节点上执行,以检验配置是否正常工作:
[root@racnode1 ~]# iscsiadm -m discovery -t sendtargets -p openfiler1-priv
192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.crs1
192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.fra1
192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.data1
手动登录到 iSCSI 目标
此时,iSCSI 启动器服务已经启动,每个 Oracle RAC 节点都能够从网络存储服务器中发现可用目标。下一步是手动登录每个可用目标,这可以使用 iscsiadm 命令行接口完成。这需要在两个 Oracle RAC 节点上运行。注意,我必须指定网络存储服务器的 IP 地址而非其主机名 (openfiler1-priv) — 我认为必须这么做,因为上述发现使用 IP 地址显示目标。
[root@racnode1 ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.crs1
-p 192.168.2.195 -l
[root@racnode1 ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.data1
-p 192.168.2.195 -l
[root@racnode1 ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.fra1
-p 192.168.2.195 -l
配置自动登录
下一步是确保在计算机引导(或 iSCSI 启动器服务启动/重启)时,客户端将自动登录到上面列出的每个目标。如同上面描述的手动登录过程,在两个 Oracle RAC 节点上执行以下命令:
[root@racnode1 ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.crs1
-p 192.168.2.195 --op update -n node.startup -v automatic
[root@racnode1 ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.data1
-p 192.168.2.195 --op update -n node.startup -v automatic
[root@racnode1 ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.fra1
-p 192.168.2.195 --op update -n node.startup -v automatic
创建永久性本地 SCSI 设备名称
在本节中,我们将逐步为每个 iSCSI 目标名称创建永久性本地 SCSI 设备名称。我们将使用 udev 来完成该任务。拥有一致的本地 SCSI 设备名称及其映射到的 iSCSI 目标,有助于在配置 ASM 时能够区分三个卷。尽管并未严格要求这么做(因为我们将对所有卷使用 ASMLib 2.0),这提供了一种自我文档编制的方法,有助于快速确定每个 iSCSI 卷的名称和位置。
如果任一 Oracle RAC 节点引导并且 iSCSI 启动器服务启动,它会以一种随机的方式自动登录到配置的每个目标,并将这些目标映射到下一个可用的本地 SCSI 设备名称。例如,目标 iqn.2006-01.com.openfiler:racdb.crs1 可能会映射到 /dev/sdb。实际上,我可以通过查看 /dev/disk/by-path 目录来确定所有目标的当前映射:
[root@racnode1 ~]# (cd /dev/disk/by-path; ls -l *openfiler* | awk '{FS=" ";
print $9 " " $10 " " $11}')
ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.crs1-lun-0 -> ../../sdb
ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.data1-lun-0 -> ../../sdd
ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.fra1-lun-0 -> ../../sdc
使用上述 ls 命令的输出结果,我们可以建立以下当前映射:
iSCSI 目标名称到本地 SCSI 设备名称的当前映射 | |
iSCSI 目标名称 | SCSI 设备名称 |
iqn.2006-01.com.openfiler:racdb.crs1 | /dev/sdb |
iqn.2006-01.com.openfiler:racdb.data1 | /dev/sdd |
iqn.2006-01.com.openfiler:racdb.fra1 | /dev/sdc |
但是,每次重新引导 Oracle RAC 节点时,该映射都可能有所不同。例如,重新引导之后,可能会决定将 iSCSI 目标 iqn.2006-01.com.openfiler:racdb.crs1 映射到本地 SCSI 设备 /dev/sdc。由于您无法预测重新引导后的 iSCSI 目标映射,依赖于使用本地 SCSI 设备名称是不现实的。
我们需要的是可引用的一致的设备名称(即 /dev/iscsi/crs1),该设备名称在重新引导后将始终指向相应的 iSCSI 目标。这就是引入名为 udev 的动态设备管理 工具的原因。 udev 提供了一个动态设备目录,使用一组可配置的规则通过符号链接指向实际设备。当 udev 收到设备事件(例如,客户端登录到 iSCSI 目标)时,就会根据 sysfs 中提供的可用设备属性匹配其配置好的规则以便识别设备。匹配规则可以提供其他设备信息或指定设备节点名和多个符号链接名,并指示 udev 运行其他程序(例如,一个 SHELL 脚本)作为设备事件处理过程的一部分。
第一步是创建一个新的规则文件。该文件将命名为 /etc/udev/rules.d/55-openiscsi.rules,并且只包含一行用于接收我们感兴趣事件的名称=值对。它还将定义一个调出 SHELL 脚本 (/etc/udev/scripts/iscsidev.sh),用于处理事件。
在两个 Oracle RAC 节点上创建以下规则文件 /etc/udev/rules.d/55-openiscsi.rules:
..............................................
# /etc/udev/rules.d/55-openiscsi.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",
SYMLINK+="iscsi/%c/part%n"
..............................................
现在,我们需要创建在接收该事件时将调用的 UNIX SHELL 脚本。我们首先在两个 Oracle RAC 节点上创建一个单独的目录,用于存储 udev 脚本:
[root@racnode1 ~]# mkdir -p /etc/udev/scripts
接下来,在两个 Oracle RAC 节点上创建 UNIX shell 脚本 /etc/udev/scripts/iscsidev.sh:
..............................................
#!/bin/sh
# FILE: /etc/udev/scripts/iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
[ -e /sys/class/iscsi_host ] || exit 1
file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/
targetname"
target_name=$(cat ${file})
# This is not an open-scsi drive
if [ -z "${target_name}" ]; then
exit 1
fi
# Check if QNAP drive
check_qnap_target_name=${target_name%%:*}
if [ $check_qnap_target_name = "iqn.2004-04.com.qnap" ]; then
target_name=`echo "${target_name%.*}"`
fi
echo "${target_name##*.}"
..............................................
创建 UNIX SHELL 脚本后,将其更改为可执行文件:
[root@racnode1 ~]# chmod 755 /etc/udev/scripts/iscsidev.sh
既然已经配置了 udev,下面将在两个 Oracle RAC 节点上重新启动 iSCSI 服务:
[root@racnode1 ~]# service iscsi stop
Logging out of session [sid: 6, target: iqn.2006-01.com.openfiler:racdb.crs1, portal: 192.168.2.195,3260]
Logging out of session [sid: 7, target: iqn.2006-01.com.openfiler:racdb.fra1, portal: 192.168.2.195,3260]
Logging out of session [sid: 8, target: iqn.2006-01.com.openfiler:racdb.data1, portal: 192.168.2.195,3260]
Logout of [sid: 6, target: iqn.2006-01.com.openfiler:racdb.crs1, portal: 192.168.2.195,3260]: successful
Logout of [sid: 7, target: iqn.2006-01.com.openfiler:racdb.fra1, portal: 192.168.2.195,3260]: successful
Logout of [sid: 8, target: iqn.2006-01.com.openfiler:racdb.data1, portal: 192.168.2.195,3260]: successful
Stopping iSCSI daemon: [ OK ]
[root@racnode1 ~]# service iscsi start
iscsid dead but pid file exists
Turning off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.crs1, portal: 192.168.2.195,3260]
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.fra1, portal: 192.168.2.195,3260]
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.data1, portal: 192.168.2.195,3260]
Login to [iface: default, target: iqn.2006-01.com.openfiler:racdb.crs1, portal: 192.168.2.195,3260]: successful
Login to [iface: default, target: iqn.2006-01.com.openfiler:racdb.fra1, portal: 192.168.2.195,3260]: successful
Login to [iface: default, target: iqn.2006-01.com.openfiler:racdb.data1, portal: 192.168.2.195,3260]: successful [ OK ]
下面,我们来看一下我们的辛勤工作是否得到了回报:
[root@racnode1 ~]# ls -l /dev/iscsi/*
/dev/iscsi/crs1:
total 0
lrwxrwxrwx 1 root root 9 Nov 3 18:13 part -> ../../sdc
/dev/iscsi/data1:
total 0
lrwxrwxrwx 1 root root 9 Nov 3 18:13 part -> ../../sde
/dev/iscsi/fra1:
total 0
lrwxrwxrwx 1 root root 9 Nov 3 18:13 part -> ../../sdd
上面的清单显示, udev 所做的工作正是我们所期待的!现在,我们拥有了一组一致的本地设备名称,可用于引用 iSCSI 目标。例如,我们可以安全地认为设备名称 /dev/iscsi/crs1/part 将始终引用 iSCSI 目标 iqn.2006-01.com.openfiler:racdb.crs1。现在,我们拥有了一致的 iSCSI 目标名称到本地设备名称的映射,如下表所示:
iSCSI 目标名称到本地设备名称的映射 | |
iSCSI 目标名称 | 本地设备名称 |
iqn.2006-01.com.openfiler:racdb.crs1 | /dev/iscsi/crs1/part |
iqn.2006-01.com.openfiler:racdb.data1 | /dev/iscsi/data1/part |
iqn.2006-01.com.openfiler:racdb.fra1 | /dev/iscsi/fra1/part |
在 iSCSI 卷上创建分区
现在,我们需要在每个 iSCSI 卷上创建一个占用整个卷大小的主分区。正如本文前面提到的,我将使用自动存储管理 (ASM) 存储 Oracle 集群件所需的共享文件、物理数据库文件(数据/索引文件、联机重做日志文件和控制文件),以及集群数据库的快速恢复区 (FRA)。
Oracle Clusterware 共享文件(OCR 和表决磁盘)将存储在一个名为 +CRS 的使用外部冗余 配置的 ASM 磁盘组中。集群数据库的物理数据库文件将存储在一个名为 +RACDB_DATA 的也使用外部冗余配置的 ASM 磁盘组中。最后,快速恢复区(RMAN 备份和存档重做日志文件)将存储于一个名为 +FRA 的使用外部冗余配置的第三个 ASM 磁盘组中。
下表列出了将要创建的三个 ASM 磁盘组及其将包含的 iSCSI 卷:
Oracle 共享驱动器配置 | ||||||
文件类型 | ASM 磁盘组名称 | iSCSI 目标(短)名称 | ASM 冗余 | 大小 | ASMLib 卷名 | |
OCR 和表决磁盘 | +CRS | crs1 | External | 2GB | ORCL:CRSVOL1 | |
Oracle 数据库文件 | +RACDB_DATA | data1 | External | 32GB | ORCL:DATAVOL1 | |
Oracle 快速恢复区 | +FRA | fra1 | External | 32GB | ORCL:FRAVOL1 |
如上表所示,我们需要在每个 iSCSI 卷(共三个)上创建一个 Linux 主分区。 fdisk 命令在 Linux 中用于创建(和删除)分区。对于每个 iSCSI 卷(共三个),您都可以在创建主分区时使用默认值,因为默认操作是使用整个磁盘。您可以放心地忽略任何指示设备未包含有效 DOS 分区(或 Sun、SGI 或 OSF 磁盘标签)的警告。
在本例中,我将在 racnode1 上运行 fdisk 命令,使用上一节中通过 udev 创建的本地设备名称在每个 iSCSI 目标上创建一个主分区:
/dev/iscsi/crs1/part
/dev/iscsi/data1/part
/dev/iscsi/fra1/part
注:要在每个 iSCSI 卷上创建单个分区,只能从 Oracle RAC 集群中的一个节点上进行!(如 racnode1)
# ---------------------------------------
[root@racnode1 ~]# fdisk /dev/iscsi/crs1/part
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1012, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-1012, default 1012): 1012
Command (m for help): p
Disk /dev/iscsi/crs1/part: 2315 MB, 2315255808 bytes
72 heads, 62 sectors/track, 1012 cylinders
Units = cylinders of 4464 * 512 = 2285568 bytes
Device Boot Start End Blocks Id System
/dev/iscsi/crs1/part1 1 1012 2258753 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# ---------------------------------------
[root@racnode1 ~]# fdisk /dev/iscsi/data1/part
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-33888, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-33888, default 33888): 33888
Command (m for help): p
Disk /dev/iscsi/data1/part: 35.5 GB, 35534143488 bytes
64 heads, 32 sectors/track, 33888 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/iscsi/data1/part1 1 33888 34701296 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# ---------------------------------------
[root@racnode1 ~]# fdisk /dev/iscsi/fra1/part
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-33888, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-33888, default 33888): 33888
Command (m for help): p
Disk /dev/iscsi/fra1/part: 35.5 GB, 35534143488 bytes
64 heads, 32 sectors/track, 33888 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/iscsi/fra1/part1 1 33888 34701296 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
验证新分区
在 racnode1 上创建所有需要的分区之后,现在应使用以下命令以“root”用户帐户从 Oracle RAC 集群的所有其余节点 (racnode2) 将分区更改通知给内核。注意,Openfiler 发现的 iSCSI 目标名称和本地 SCSI 设备名称的映射在两个 Oracle RAC 节点上将有所不同。不用担心,这不会导致任何问题,因为我们将使用 udev 在上一节中创建的本地设备名称而不是其他的本地 SCSI 设备名称。
在 racnode2 上运行以下命令:
[root@racnode2 ~]# partprobe
[root@racnode2 ~]# fdisk -l
Disk /dev/sda: 160.0 GB, 160000000000 bytes
255 heads, 63 sectors/track, 19452 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 19452 156143767+ 8e Linux LVM
Disk /dev/sdb: 35.5 GB, 35534143488 bytes
64 heads, 32 sectors/track, 33888 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 33888 34701296 83 Linux
Disk /dev/sdc: 35.5 GB, 35534143488 bytes
64 heads, 32 sectors/track, 33888 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 33888 34701296 83 Linux
Disk /dev/sdd: 2315 MB, 2315255808 bytes
72 heads, 62 sectors/track, 1012 cylinders
Units = cylinders of 4464 * 512 = 2285568 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 1 1012 2258753 83 Linux
最后,您应该在两个 Oracle RAC 节点上运行以下命令,以验证 udev 为每个新分区创建了新的符号链接:
[root@racnode2 ~]# (cd /dev/disk/by-path; ls -l *openfiler* | awk '{FS=" "; print $9 " " $10 " " $11}')
ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.crs1-lun-0 -> ../../sdd
ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.crs1-lun-0-part1 -> ../../sdd1
ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.data1-lun-0 -> ../../sdc
ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.data1-lun-0-part1 -> ../../sdc1
ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.fra1-lun-0 -> ../../sdb
ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.fra1-lun-0-part1 -> ../../sdb1
上面的清单显示, udev 确实为每个新分区创建了新的设备名称。在本指南稍后,当我们为 ASMlib 配置卷时,将使用这些新的设备名称。
/dev/iscsi/crs1/part1
/dev/iscsi/data1/part1