集群应用程序简介 集群应用程序具有各种级别的成熟度和功能。它们包括:
- 高性能 集群也称为并行集群或计算集群,通常用于那些支持大量计算处理的系统。在这些集群中,并行文件系统在节点间分配处理资源,因而允许每个节点通过并发的读写同时访问同一文件。NASA 在二十世纪九十年代初期开发的 Beowulf 集群就是最常见的示例。
- 高可用性 (HA) 集群专门为容错或冗余而设计。因为这些集群通常使用一个或多个进行处理,所以当一个或多个服务器停机时,这些服务器能够承担其他服务器的处理职责。
- 负载平衡 或负载均衡 集群在多个服务器(通常是 web 服务器)间尽可能平均地分配负载。
- 存储 集群用于 SAN 和具有不同的服务器之间,提供对通用存储介质上的数据块的共享访问。
- 数据库 集群将 RAC 作为平台,把许多集群文件系统特性引入到应用程序本身中。
这些集群应用程序具有重叠的特性,其中一个或多个特性通常可在单个集群应用程序中找到 — 尤其是在 HA 和负载均衡集群中。例如,Oracle RAC 可以安装在 HA 集群文件系统上,从而将数据库集群的优点引入 HA 集群应用程序,如:- 共享资源 — 包括数据、存储器、硬盘和元数据 — 从而使多个节点看上去就像单一文件系统。它们允许集群的所有成员同时读写文件系统。
- 将存储设备集合到单个磁盘卷中,从而因无需进行数据复制而提高了性能
- 可伸缩的容量、带宽和连接性
- 单个系统映像,为所有节点提供相同的数据视图。
现在让我们来看一些可以选用的支持 Oracle RAC 并具有集群感知的 Linux 文件系统,以及它们如何完善 Oracle RAC 的功能。 可以运行 Oracle 的集群文件系统 Oracle RAC 技术已经提供了诸如负载均衡、冗余、故障切换、可伸缩性、高速缓存和锁定等特性,因此当 Oracle 数据文件位于安装有传统 Linux 文件系统(如 ext2/ext3)的块设备上时会出现功能的重复。在这种情况下性能降低了,因为 Oracle 和文件系统的高速缓存消耗了内存资源。到写本文时为止,除了第三方集群文件系统之外,还有四种可选用的运行 Oracle RAC 的文件系统。按 Oracle 的推荐顺序,它们依次为:
- Oracle 自动存储管理
- Oracle 集群文件系统
- 网络文件系统
- 原始设备。
Oracle 自动存储管理 (ASM) Oracle 的一个特点就是,无论它在哪种环境中运行,一旦您获得一个 Oracle API,则所有的外观、体验和操作都相同。Oracle ASM是 Oracle 数据库 10g 的一个特性,它将这种一致的环境扩展到存储管理方面,使用 SQL 语句、Oracle Enterprise Manager 控制或数据库助手程序来创建和管理存储内容和元数据。将 ASM 用于 Oracle 数据库 10g 数据文件存储被认为是最佳方法。 ASM 中的基本是磁盘组,它由一个或多个磁盘组成。在该语境中,“磁盘”可以是一个、一个完整的磁盘、一个级联磁盘、一个存储设备的分区或者一个完整的存储设备。一定要认识到,ASM 并非通用集群文件系统。相反,ASM 是一个具有集群感知的文件系统,专门为处理 Oracle 数据库文件、控制文件和而设计。ASM 不应与逻辑卷管理器 (LVM) 共用,这是因为后者会使 ASM 无法识别磁盘。
ASM 执行以下功能:- 通过磁盘头中的 ASM ID 识别磁盘。
- 在磁盘组中的所有存储器间动态分配数据,提供可选的冗余保护,并且具有集群感知能力。
- 允许在 Oracle 数据库处于完全运转状态时进行主要的存储操作 — 无需停机即可添加、删除、甚至将磁盘组移到新的(尽管少见)
- 当添加或删除磁盘时,进行自动负载均衡和重新均衡
- 通过使用故障组,提供额外的冗余保护
- 优化存储资源的使用。
当安装在原始设备或者安装在 Oracle 所推荐的那些使用 ASM 库驱动程序的块设备上时,ASM 自身作为实例来运行,该实例先于数据库实例启动。它使 DBA 能够创建、扩展和缩小磁盘,并将这些变化映射到共享访问这些组的其他节点上的磁盘组。数据库实例能够在集群的多个节点间共享存储器的集群池。 ASM 由 Oracle 通用安装程序安装。如果将 ASM 添加到一个现有的数据库中,则要确保将数据库设置为从属于 ASM 实例,以便在启动时 ASM 实例先于所从属数据库启动。例如: $ srvctl modify instance -d O10G -i O10G1 -s +ASM1使 o10G1 实例从属于 +ASM1 实例。 ASM 实例与 Oracle 数据库实例的区别表现在以下几方面:- 尽管可以使用几个 V$ 视图来获得关于 ASM 实例的信息,但没有数据字典:V$ASM_DISKGROUP、V$ASM_CLIENT、V$ASM_DISK、V$ASM_FILE、V$ ASM_TEMPLATE、V$ASM_ALIAS 和 V$ASM_OPERATION。
- 您只能以 SYSDBA 或 SYSOPER 连接 ASM 实例。
- 有五个初始化参数用于 ASM 实例,其中 INSTANCE_TYPE 是必要的,并应该设置如下:INSTANCE_TYPE = ASM。
在 ASM 实例中,DBA 可以使用 SQL 语法或 Enterprise Manager 来:- 使用一个或多个磁盘为存储池定义一个磁盘组
- 在磁盘组中添加和删除磁盘
- 定义一个故障组 来增加数据冗余保护。通常这是磁盘组中一系列需要不间断运行的磁盘,它们共享一种共用资源,如控制器。
可以通过 Enterprise Manager 或通过 V$ASM 视图监视 ASM 磁盘组的状态。您还可以在结构时在一个数据库实例中引用它们来分配存储器。 当您创建表空间、重做日志、归档日志文件和控制文件时,通过在初始化参数或者在 DDL 中指定磁盘组,您可以从数据库实例中引用 ASM 磁盘组。 有关 ASM 的更多详细信息,请参见 Lannes Morris-Murphy 的 OTN 文章“自动的存储”、Arup Nanda 的“Oracle 数据库 10g:为 DBA 提供的最重要的 20 个特性”中的 ASM 部分以及 Oracle 指南 10g 第 1 版 (10.1) 的第 12 章。Oracle 集群文件系统 (OCFS) OCFS 专门为支持 Oracle RAC 应用程序的数据和磁盘共享而设计。它在 RAC 集群的服务器节点间提供一致的文件系统映像,充当原始设备的替身。除了简化集群数据库管理外,它还在保持原始设备性能优势的同时克服了原始设备的局限性。
OCFS 第 1 版支持 Oracle 数据文件、spfile、控制文件、仲裁磁盘文件、归档日志、以及 Oracle 集群 (OCR) 文件(Oracle 数据库 10g 中的新文件)。设计它不是为了使用其他文件系统的文件,甚至不是为了使用那些必须在集群每个节点上安装的 Oracle 软件 — 除非您使用第三方。此外,OCFS 不提供诸如 I/O 分配(分割)等 LVM 功能,也不提供冗余功能。
Oracle 支持用于 32 位和 64 位发行版本的 Red Hat Advanced 2.1、Red Hat Enterprise Linux 3 和 Novell SUSE (United Linux) 上的 OCFS 第 1 版中的 Oracle 数据库,该数据库需要从可下载的二进制文件进行安装。如果您自己对其进行重新编译,则 Oracle 不提供支持。
有三种不同的 rpm 程序包:
当您下载了这些 rpm 程序包后,执行以下安装步骤:- 在下载了 rpm 程序包的目录中执行 rpm -Uhv ocfs*.rpm 命令安装这些程序包。
- 确认已启用引导时自动挂载。
- 自动使用 ocfstool 在集群中的每个节点上配置 OCFS。还可以使用手动配置方法,详情请见 OCFS 用户指南。这一步骤的最后结果是创建了 /etc/ocfs.conf 文件,用于配置 OCFS。
- 运行 ocfs load_ocfs,确保在启动时加载 OCFS。
- 使用 ocfstool 命令和 GUI 环境或 mkfs.ocfs 来格式化 OCFS 分区。
- 手动挂载 OCFS 分区,或者在 /etc/fstab 中添加一项来实现自动挂载。
因为 OCFS 第 1 版没有编写成符合 POSIX 标准,所以诸如 cp、dd、tar 和 textutils 等文件命令需要 coreutils 提供一个 O_DIRECT 开关。该开关使这些命令能够如同预期那样用于 Oracle 数据文件,即使 Oracle 正在对这些相同的文件进行操作(只有当您运行第三方软件进行份时才会出现问题)。使用 RMAN 可以完全避免这个问题。如果您仍然需要使用这些功能来完成各种维护任务;可以从 oss.oracle.com/projects/coreutils/files 下载能够实现这些命令的 OCFS 工具。相反,OCFS 第 2 版(到 2005 年 3 月时仍为测试版)符合 POSIX 标准,并且支持 Oracle 数据库软件,它可以安装在一个节点上并在集群的其他节点间共享。除了共享的 ORACLE_HOME 外,OCFS 第 2 版的其他新特性还包括改进的元数据数据高速缓存、空间分配和锁定。此外还有改进的日志和节点恢复功能。
网络文件系统 (NFS) 虽然 ASM 和 OCFS 是 Oracle RAC 的首选文件系统,但 Oracle 还支持经过认证的网络文件服务器上的 NFS。NFS 是分布式文件系统,本文不对其作全面讨论。有关更多信息,请访问 NFS 主页。
原始设备 过去有一段时间内,原始设备是运行 Oracle RAC 的唯一选择。原始设备就是一个没有安装文件系统的磁盘驱动器,可以被分成多个原始分区。原始设备允许绕过文件系统缓冲区高速缓存直接访问硬件分区。
要让 Oracle RAC 使用原始设备,必须在安装 Oracle 软件之前通过 Linux raw 命令将一个块设备绑定到该原始设备:
# raw /dev/raw/raw1 /dev/sda
/dev/raw/raw1:bound to major 8, minor 0
# raw /dev/raw/raw2 /dev/sda1
/dev/raw/raw2:bound to major 8, minor 1
# raw /dev/raw/raw3 /dev/sda2
/dev/raw/raw3:bound to major 8, minor 2
在绑定后,您可以使用 raw 命令来查询所有原始设备。# raw -qa
/dev/raw/raw1:bound to major 8, minor 0
/dev/raw/raw2:bound to major 8, minor 1
/dev/raw/raw3:bound to major 8, minor 2
major 和 minor 数值确定了该内核的设备位置和驱动程序。major 数值确定了总的设备类型,而 minor 数值确定了属于该设备类型的设备数量。在上述示例中,major 8 是 SCSI 磁盘 /dev/sda 的设备类型。请注意,设备不需要处于可访问状态即可运行上述命令。当我为了演示而运行上述命令时,我的系统没有连接任何 SCSI 磁盘。这些命令的效果在我下一次重新启动后将会消失,除非我将这些命令放在类似 /etc/init.d/boot.local 或 /etc/init.d/dbora 的引导脚本中,每当我的系统引导时,就会运行这些脚本。
在将块设备映射到原始设备后,您仍然需要确保原始设备属于 oracle 用户和 oinstall 组。
# ls -l /dev/raw/raw1
crw-rw---- 1 root disk 162, 1 Mar 23 2002 /dev/raw/raw1
# chown oracle:oinstall /dev/raw/raw1
# ls -l /dev/raw/raw1
crw-rw---- 1 oracle oinstall 162, 1 Mar 23 2002 /dev/raw/raw1
然后您可以在 Oracle 数据文件与原始设备之间使用符号链接,以便使事情更易于管理。Linux 内核 2.4 版中的原始设备限制中包括每分区一个原始设备的限制和每系统 255 个原始设备的限制。Novell SUSE Enterprise Linux 带有 63 个原始设备文件,但可以使用mknod 命令(需要有根权限)创建最多 255 个原始设备。
# ls /dev/raw/raw64
ls:/dev/raw/raw64:No such file or directory
# cd /dev/raw
linux:/dev/raw # mknod raw64 c 162 64
# ls /dev/raw/raw64
/dev/raw/raw64
以上的 mknod 命令需要设备名、设备类型以及 major 和 minor 数值。本示例中的设备名是“raw64”,设备类型是“c”(表示它是一个字符设备)。该新设备的 major 和 minor 数值分别是 162 和 64。另外,Novell SUSE 通过运行 orarun rpm 来安装这些设备。使用原始设备的其他缺点包括:
- 一个磁盘的原始分区数量限制为 14。
- 不支持 Oracle 管理文件 (OMF)。
- 无法重新调整原始设备分区的大小,因此如果空间不足,则必须创建另一个分区来添加数据库文件。
- 原始设备显示为未使用空间,这可能导致其他应用程序将其覆盖。
- 向原始设备进行写操作的唯一方法是使用低级命令 dd,该命令在设备或文件之间传输原始数据。但是,您需要格外小心,确保恰当协调内存和磁盘上的 I/O 操作。
- 一个原始分区只能拥有一个数据文件、一个控制文件或一个重做日志等等。如果您不使用 ASM,则您需要为每个与表空间关联的数据文件提供一个独立的原始设备。但是,一个表空间可以在不同的原始设备分区中拥有多个数据文件。
结论Oracle RAC 提供了一个文件系统(集群的或非集群的)所具有的很多功能,最大程度地减轻了文件系统本身的工作。如前所述,所需要的只是一个对 Oracle RAC 现有的、内在的数据库集群功能进行补充的文件系统。尽管 OCFS、NFS 和原始设备也可能是可行的方法,但在大多数情况下,ASM 会最大程度地实现这一目的,从而被视为 Oracle 的最佳实践。还可以将 ASM 用于数据文件,OCFS 用于表决磁盘、OCR 和 Oracle 主目录,以及在 NFS 存储器上使用 ASM。
将来我们还可以期待另一个方法,就是 OCFS 第 2 版能够使用共享的 Oracle 主目录,从而完善 ASM 上的共享存储器。