Linux集群文件系统简介
集群文件系统在多个方面完善了 Oracle RAC 的数据库集群功能。以下是它们的对比情况。
通常,集群只是一组作为单一系统运行的服务器(PC 或者工作站)。但是,这个定义的外延不断显着扩大;集群技术现在不但是一个动态领域,而且其各种应用程序正不断吸收新的特性。此外,集群文件系统技术(无论是开放源代码的还是专有的)在其功能方面正在迅速趋同。
很多人谈到集群应用程序和其中所使用的文件系统软件时,就象它们完全是一回事似的。更准确地说,大多数集群包含两个主要组件:通过快速网络连接共享存储介质的服务器和充当软件"粘合剂"使集群节点保持协作的文件系统。
在"Linux 文件系统精通指南"一文中,我解释了文件系统方法和数据结构如何提供硬盘分区物理结构的用户级视角。虽然各项目之间有所不同,但集群文件系统为集群的多个节点所做的工作是相同的:它们使所有节点看上去都象是单一系统的一部分,同时允许集群的所有节点进行并发的读写操作。
在本篇后续文章中,我们将从较高角度来介绍集群文件系统之间的总体差别以及 Oracle 真正应用集群 (RAC) 环境的某些特性。刚接触集群、Linux 文件系统或 Oracle RAC 的数据库管理员或系统管理员会发该文很有教育意义。
集群应用程序简介
集群应用程序具有各种级别的成熟度和功能。它们包括:
高性能 集群也称为并行集群或计算集群,通常用于那些支持大量计算处理的系统。在这些集群中,并行文件系统在节点间分配处理资源,因而允许每个节点通过并发的读写同时访问同一文件。NASA 在二十世纪九十年代初期开发的 Beowulf Linux 集群就是最常见的示例。
高可用性 (HA) 集群专门为容错或冗余而设计。因为这些集群通常使用一个或多个服务器进行处理,所以当一个或多个服务器停机时,这些服务器能够承担其他服务器的处理职责。
负载平衡 或负载均衡 集群在多个服务器(通常是 web 服务器)间尽可能平均地分配负载。
存储 集群用于 SAN 和具有不同操作系统的服务器之间,提供对通用存储介质上的数据块的共享访问。
数据库 集群将 Oracle 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 集群的服务器节点间提供一致的文件系统映像,充当原始设备的替身。除了简化集群数据库管理外,它还在保持原始设备性能优势的同时克服了原始设备的局限性。BT无线网络破解教程
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 -aLinux linux 2.4.18-4GB #1 Wed Mar 27 13:57:05 UTC 2002 i686 unknown
OCFS 支持程序包BT4
OCFS 工具程序包。
当您下载了这些 rpm 程序包后,执行以下安装步骤:
在下载了 rpm 程序包的目录中执行 rpm -Uhv ocfs*.rpm 命令安装这些程序包。
确认已启用引导时自动挂载。
自动使用 ocfstool 在集群中的每个节点上配置 OCFS.还可以使用手动配置方法,详情请见 OCFS 用户指南。这一步骤的最后结果是创建了 /etc/nf 文件,用于配置 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 可以完全避免这个问题。如果您仍然需要使用这些功能来完成各种维护任务;可以从 /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/raw1crw-rw---- 1 root disk 162, 1 Mar 23 2002 /dev/raw/raw1# chown oracle:oinstall /dev/raw/raw1# ls -l /dev/raw/raw1crw-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/raw64ls:/dev/raw/raw64:No such file or directory# cd /dev/rawlinux:/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 上的共享存储器。
Linux集群应用的新挑战
Linux集群计算已经改变了高性能计算领域的组成结构:低价的Linux集群系统正在取代那些昂贵的、传统意义上的超级计算机,开始被应用于解决那些更富挑战性的高性能计算问题。
为了充分发挥Linux集群系统的潜在性能,我们需要一种新的存储机制,基于对象的集群存储技术应运而生。基于对象的集群存储技术是一种新存储系统的基础,无论是在存储容量还是在存取性能方面,它都有着良好的可扩展性。这些使得该技术可以满足功能强大的Linux集群系统对存储方面的需求。
近年来,在科学研究和工程计算等领域,高性能集群计算技术的卓越成就大家有目共睹。高性能集群技术已逐渐占据了高性能计算的主导地位,这一点从2003年11月公布的世界高性能计算机排行榜中体现无疑。在该排行榜前500台的超级计算机里,有208台采用了集群系统,集群系统已是当前高性能计算机最流行的体系结构。
现在,这种流行趋势正由科学工程计算领域向商用领域蔓延。地质学家们正致力于研究更强大的地震分析技术,以获取地球结构更精细的图片,从而用来指导油田的钻探和开发;制药公司正在海量的基因库中努力寻求对人类疾病更深入的理解和认识,从而可以开发出更有效的药物或治疗方法;而我们熟知的一些门户网站,如Yahoo和Google,则需要对因特网上浩如烟海的数据进行检索和分类,从而提供给世界各地的人们使用。所有这些领域,都成为Linux集群计算系统大显身手的地方。同时,不得不看到,Linux集群计算的广泛应用也带来了新的挑战。
对共享存储性能的需求不断增长
除了对高性能计算方面的需求外,上述各商业应用还有着一个共同的特点:它们都需要高性能的I/O支持。确保集群系统得到高效使用的必备条件是,它可以对TB(1TB=1000GB,1GB=1000MB)量级的共享数据进行快速访问。没有这一点,集群系统的性能将会大幅降低。为了简化应用系统的开发和维护,这些共享数据必须对计算集群上的所有进程都可用。随着集群系统的规模越来越大、节点越来越多,为实现各个节点对共享数据的高效访问,对存储系统的要求也越来越高,传统的、基于网络的存储系统已经不能提供满足这种共享访问所必需的性能。
例如,在动画生成应用中(这方面最早和最有名的例子是电影《泰坦尼克号》的特效生成,它使用了一个包含160个节点的Linux集群系统),需要将场景生成任务分发到上百个计算节点上,其中每个节点负责生成最终场景中一个单独的部分。共享的场景和人物信息,以及每一帧的渲染指令必须能够为每一个参与计算的节点所访问,而每个节点计算一帧会产生大约50MB的输出。最后各个单独的帧依次组合,得到完整的一幅画面。这样的流程是许多集群计算应用过程中常见的数据访问情形。
传统的共享存储方法的缺点
集群计算的开发者们自然地采用了能够被集群系统中所有节点访问的共享存储系统。让我们先来简单审视一下现有的这种共享存储系统。
首先是文件服务器。它将磁盘阵列(RAID)直接连接到网络系统中的服务器上,这种形式的网络存储结构称为DAS(Direct Attached Storage)。这种结构中,各类存储设备通过IDE或SCSI等I/O总线与文件服务器相连。集群节点的数据访问必须通过文件服务器,然后经过I/O总线访问相应的存储设备。当连结节点数增多时,I/O总线将会成为一个潜在的瓶颈,因此这种存储方式只适用于小规模的集群系统,大一些的集群需要更具扩展性的存储系统。
存储区域网(SAN,Storage-Area Networks)和优化后的直接网络存储,或者网络附加存储(NAS,Network-Attached Storage)结构被用于中等规模的集群系统。SAN是一种类似于普通局域网的高速存储网络,通常由RAID阵列连接光纤通道组成。SAN和集群节点的数据通信通常是由SCSI命令,而不是网络协议实现(如图1所示)。
在NAS存储结构中,存储系统不再通过I/O总线附属于某个特定的服务器或客户机,而是通过网络接口与网络直接相连,集群节点通过网络协议(如TCP/IP)对共享数据进行访问。
然而,当集群变得庞大时,这些结构都存在着严重的缺陷。面对众多集群计算应用系统的高并发性和单节点高吞吐需求,无论是SAN还是NAS结构都显得力不从心。由于这两方面的局限,在实际应用中,人们不得不采用数据“搬家”的策略。首先将数据从共享存储系统搬到计算节点上进行处理,处理结束后,再将计算结果从计算节点搬回共享存储系统。在大规模的集群系统上,很多应用程序为了这样的搬家需要花费几个小时甚至更多时间。
一个新兴的标准:基于对象的存储
对众多的集群计算用户来说,一种基于对象的存储技术正作为构建大规模存储系统的基础而悄然兴起。它利用现有的处理技术、网络技术和存储组件,可以通过一种简单便利的方式来获得前所未有的可扩展性和高吞吐量。
这种体系结构的核心是对象,对象是容纳了应用数据和一个可扩展的存储属性的基本容器。传统的文件被分解为一系列存储对象,并分发到一个或多个“智能磁盘”上,这种磁盘被称为基于对象的存储设备(OSD,Object-based Storage Devices)。每一个OSD具备本地处理功能、用于数据和属性缓存的本地内存和本地的网络连接。OSD构成了分布式存储结构的核心,它将许多传统的存储分配行为从文件系统层转移,从而解决了当前存储系统的一个瓶颈问题。
对象属性包括了安全信息和使用状况统计信息,这些信息被用于基于安全认证的访问、服务质量控制,以及为实现OSD间负载均衡所需的数据动态分配。对象存储技术采用了和集群计算系统类似的可扩展结构,当存储容量增加时,它提供的均衡模型能够保证网络带宽和处理能力也同步增长,从而确保系统的可扩展性。
存储网络工业协会(SNIA)和T10标准技术委员会中的联合技术小组正在制定一个关于OSD的标准。标准包括了一个针对iSCSI协议的命令集,它在原有的SCSI命令集中增添了对象扩展功能。同时,对象规范和命令集的制定促使了一种新的智能存储设备的出现,这种智能存储设备可以集成到基于IP的、高性能、大规模并行存储环境中去。目前多个业内领先的存储设备公司都参与了这项工作,其中包括EMC、惠普、IBM、Intel、希捷及Veritas软件公司等。
共享存储的实现
对象存储结构提供了新一代网络存储系统的基础。在新兴的应用中,它和一种可扩展的、为应用程序提供文件系统接口的元数据管理层结合在一起。这一层负责管理诸如目录隶属关系和文件所有权限这样的信息。它同样负责将跨OSD的存储对象(每个存储对象是文件的一部分)联接成一个文件,以确保数据的可靠和可用。集群节点向这一层提出请求,例如打开或关闭文件,通过认证后,接受它能够访问OSD所必需的信息,此后集群节点可以直接对文件进行读写操作,而和元数据管理层无关。
对象存储结构作为可扩展集群文件系统的一部分被实现后,就能够为数以百计的客户端提供高容量的总带宽。简而言之,对象存储技术可以为高性能Linux集群系统提供高性价比的共享存储。