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/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/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 上的共享存储器。


如何选择合适的集群文件系统


集群文件系统的选择有很多种,但是要想把每种系统的优劣性能都弄清楚,是需要花费不少时间和精力的。我们在此为大家介绍一些常用的集群文件系统,让读者朋友对此有一个了解,在选择上有一个参考。 


集群文件系统基础架构


有些读者也许希望装配一组可以并行访问同一个文件系统的服务器,而另一些读者可能想复制存储器并提供并行访问和冗余。有两种方法可以实现多服务器访问同一个磁盘,一种方法是让那些服务器都可以看到那个磁盘,另一种方法则是通过复制。


共享磁盘结构在光纤通道SAN和iSCSI领域是最常见的结构。配置存储系统相当简单,这样多个服务器就可以看到同一个逻辑块设备或LUN,但是如果没有群集文件系统,那么当多个服务器同时想使用那个逻辑块设备时就会出现混乱。 这个问题与使用群集文件系统有关,我们将在下文中详细介绍。


一般而言,共享磁盘系统有个弱点,那就是存储系统。但是情况也并非总是如此,因为利用现在的技术是很难理解共享盘的概念的。 SAN、NAS设备和基于Linux系统的商品硬件可以将所有的基础磁盘实时复制到另一个存储节点,从而提供一个模拟共享盘环境。基础模块设备被复制之后,那些节点就可以访问相同的数据,也可以运行同一个群集文件系统了,但是这种复制超出了传统共享盘的定义。


相反,不共享才是共享盘的问题所在。连接着不同存储设备的节点会在每个模块被写入数据时将变化通知给主服务器。 现在,不共享架构仍存在于Hadoop那样的文件系统之中,那些文件系统可以在许多节点故意建立多个数据副本,从而提高性能和冗余。而且,在不同存储设备或节点之间利用自己的存储设备进行复制的群集也可以做到不共享。


集群文件系统设计选择


正如我们所说的,你不能通过多个服务器访问同一个模块设备。你听说过文件系统锁定,因此普通的文件系统并不能实现这一点就有些奇怪了。


在文件系统级别上,文件系统本身会将文件锁定以保证数据不会出错。但是在操作系统级别上,文件系统启动程序完全可以访问基础模块设备,它们可以在基层模块设备之间自由的漫游。大部分文件系统都会认为它们被分配了一个模块设备,而且那个模块设备也只是它们自己所有。


为了解决这个问题,集群文件系统采用了一种并行控制机制。有些集群文件系统将把元数据保存在共享设备的一个分区里,另一些集群文件系统则会使用集中式元数据服务器来保存元数据。 不管采用哪种方案,集群中的所有节点都可以看到文件系统的状态,从而保证安全的并行访问。然而,如果你想保证系统的高利用率和消除单点故障问题,那么采用集中式元数据服务器的解决方案就要略逊一筹了。


另一个注意事项:集群文件系统要求在节点发生故障时迅速做出反应。如果某个节点写入错误数据或由于某种原因停止关于元数据变化的通信,其他节点必须能够将它隔离出去。隔离可以通过多种方式来实现,最常用的方法是利用断电管理来实现。健康的节点可以在发现问题时第一时间关闭另一个节点电源(STONITH)以保全数据。


集群文件系统词典


GFS:全局文件系统


GFS是应用最广泛的集群文件系统。它是由红帽公司开发出来的,允许所有集群节点并行访问。元数据通常会保存在共享存储设备或复制存储设备的一个分区里。


OCFS:甲骨文集群文件系统


从概念上来说,OCFS与GFS非常相似,现在OCFS 2已经被应用于Linux系统之中。


VMFS:VMware的虚拟计算机文件系统


VMFS是ESX服务器用来允许多个服务器访问同一个共享存储设备的集群文件系统。这样就可以实现虚拟机在不同服务器之间的无缝迁移,因为源服务器和目标服务器都可以访问同一个存储设备。日志是分布式的,ESX服务器之间也不会出现单节点故障。


Lustre:Sun的集群分布式文件系统。


Lustre是专门用于包含数千个节点的大型集群的分布式文件系统。Lustre已经支持Linux系统,但是高速计算环境之外的应用程序是有限的。


Hadoop:一个象谷歌那样使用的分布式文件系统。


这不是一个集群文件系统,但是却是一个分布式文件系统。我们将Hadoop收录进来是因为它的应用越来越广泛,而且利用Hadoop的存储架构设计决策的组合很多。但是默认配置下,你会在3个不同的节点上拥有3个数据副本。一旦数据发生变化,每个数据副本都会更新,因此,从某种意义上来说,它也可以被看做是集群文件系统。然而,Hadoop存在一个故障点隐患,即跟踪记录所有文件系统级数据的命名节点。


做出最好选择


有太多选择并不是坏事。你可以根据执行目标选择使用合适的集群文件系统以及存储架构。 只要有计划地使用,所有这些文件系统都可以发挥出应有的作用。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值