Linux 集群文件系统简介


集群应用程序简介

集群应用程序具有各种级别的成熟度和功能。它们包括:
  • 高性能 集群也称为并行集群或计算集群,通常用于那些支持大量计算处理的系统。在这些集群中,并行文件系统在节点间分配处理资源,因而允许每个节点通过并发的读写同时访问同一文件。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 的推荐顺序,它们依次为:

  1. Oracle 自动存储管理
  2. Oracle 集群文件系统
  3. 网络文件系统
  4. 原始设备。
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 数据库实例的区别表现在以下几方面:
  1. 尽管可以使用几个 V$ 视图来获得关于 ASM 实例的信息,但没有数据字典:V$ASM_DISKGROUP、V$ASM_CLIENT、V$ASM_DISK、V$ASM_FILE、V$ ASM_TEMPLATE、V$ASM_ALIAS 和 V$ASM_OPERATION。
  2. 您只能以 SYSDBA 或 SYSOPER 连接 ASM 实例。
  3. 有五个初始化参数用于 ASM 实例,其中 INSTANCE_TYPE 是必要的,并应该设置如下:INSTANCE_TYPE = ASM。
在 ASM 实例中,DBA 可以使用 SQL 语法或 Enterprise Manager 来:
  1. 使用一个或多个磁盘为存储池定义一个磁盘组
  2. 在磁盘组中添加和删除磁盘
  3. 定义一个故障组 来增加数据冗余保护。通常这是磁盘组中一系列需要不间断运行的磁盘,它们共享一种共用资源,如控制器。
可以通过 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 程序包后,执行以下安装步骤:
  1. 在下载了 rpm 程序包的目录中执行 rpm -Uhv ocfs*.rpm 命令安装这些程序包。
  2. 确认已启用引导时自动挂载。
  3. 自动使用 ocfstool 在集群中的每个节点上配置 OCFS。还可以使用手动配置方法,详情请见 OCFS 用户指南。这一步骤的最后结果是创建了 /etc/ocfs.conf 文件,用于配置 OCFS。
  4. 运行 ocfs load_ocfs,确保在启动时加载 OCFS。
  5. 使用 ocfstool 命令和 GUI 环境或 mkfs.ocfs 来格式化 OCFS 分区。
  6. 手动挂载 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 上的共享存储器。


相关内容