集群文件系统在多个方面完善了Oracle RAC的数据库集群功能。 以下是它们的比较情况。
群集通常是一组作为单个系统运行的服务器(PC或工作站)。 但这一定义的外延不断显著扩大; 集群技术目前不仅是动态领域,各种APP应用程序也在不断吸收新的特性。 另外,无论是开源还是专有,集群文件系统技术在其功能方面都迅速统一。
很多人对群集APP应用程序和其中使用的文件系统软件的看法完全一样。 更确切地说,大多数群集包括两个主要组件:通过高速网络连接共享存储介质的服务器和充当软件“粘合剂”并保持群集节点协作的文件系统。
在《Linux文件系统精通指南》的文章中,我们介绍了文件系统的方法和数据结构如何为硬盘分区物理结构提供用户级的视角。 虽然因项目而异,但群集文件系统对群集的多个节点执行的任务是相同的。 这意味着所有节点看起来都是单个系统的一部分,并且群集的所有节点都可以同时读写。
以下文章从较高的角度介绍了群集文件系统之间的总体差异,以及Oracle实际使用群集(RAC )环境的某些特性。 刚接触群集、Linux文件系统或Oracle RAC的数据库或系统管理员发表这篇文章很有教育意义。
集群APP应用程序概述
集群APP应用程序具有不同级别的成熟度和功能。 包括以下内容:
高性能集群也称为并行集群或计算集群,通常用于支持大量计算处理的系统。 在这些群集中,并行文件系统在节点之间分配处理资源,因此每个节点可以通过同时读写同时访问同一文件。 美国航空航天局在20世纪90年代初期开发的Beowulf Linux集群是最常见的例子。
高可用性(HA )群集专为容错或冗馀而设计。 由于这些群集通常使用一个或多个服务器进行处理,因此如果一个或多个服务器停止工作,这些服务器可以负责处理其他服务器。
负载平衡或负载平衡群集在多个服务(通常是web服务)之间尽可能均匀地分配负载。
存储群集用于SAN和具有不同操作系统的服务器之间,提供对公共存储介质上数据块的共享访问。
数据库群集以Oracle RAC为平台,在APP应用程序本身中部署许多群集文件系统特性。
这些群集APP应用程序具有重复的特性,其中一个或多个特性通常位于一个群集APP应用程序,特别是HA和负载平衡群集。 例如,您可以在HA集群文件系统上安装Oracle RAC,以将数据库集群的优点应用于HA集群APP应用程序,例如:
共享资源(如数据、存储、硬盘和元数据)使多个节点看起来像单个文件系统。 允许群集的所有成员同时读写文件系统。
将存储设备合并到单个磁盘卷中,无需复制数据,从而提高了性能
可扩展容量、带宽和连接性
为所有节点提供相同数据视图的单个系统映像。
现在,我们来看看可选的Linux文件系统,以支持启用集群的Oracle RAC,以及如何改进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 Server 2.1、Red Hat Enterprise Linux 3 和 Novell SUSE (United Linux) 上的 OCFS 第 1 版中的 Oracle 数据库,该数据库需要从可下载的二进制文件进行安装。如果您自己对其进行重新编译,则 Oracle 不提供支持。
有三种不同的 rpm 程序包:
OCFS 内核模块,针对 Red Hat 和 United Linux 的分发版本各不相同。请认真验证您的内核版本:
$ uname -a
Linux linux 2.4.18-4GB #1 Wed Mar 27 13:57:05 UTC 2002 i686 unknown
OCFS 支持程序包
OCFS 工具程序包。
当您下载了这些 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
install /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 版