跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability 文档 / 管理指南 / 存储和数据复制 / OCFS2
适用范围 SUSE Linux Enterprise High Availability 15 SP6

21 OCFS2

Oracle Cluster File System 2 (OCFS2) 是一个自 Linux 2.6 内核以来完全集成的通用日志文件系统。OCFS2 可将应用程序二进制文件、数据文件和数据库存储到共享存储设备。群集中的所有节点对文件系统都有并行的读和写权限。用户空间控制守护程序(通过克隆资源管理)提供与 HA 堆栈的集成,尤其是与 Corosync 和分布式锁管理器 (DLM) 的集成。

21.1 功能和优势

OCFS2 可用于诸如以下场景的存储解决方案,例如:

  • 一般应用程序和工作负荷。

  • 群集中的 Xen 映像存储。Xen 虚拟机和虚拟服务器可存储于由群集服务器安装的 OCFS2 卷中。它提供了 Xen 虚拟机在各服务器之间的快速便捷的可移植性。

  • LAMP (Linux、Apache、MySQL 和 PHP | Perl | Python) 堆栈。

作为对称的高性能并行群集文件系统,OCFS2 支持以下功能:

  • 应用程序文件对群集中的所有节点均可用。用户只需在群集中的 OCFS2 上安装它一次。

  • 所有节点都可以通过标准文件系统接口直接并行读写至存储区,从而方便地管理运行于群集上的应用程序。

  • 文件访问通过 DLM 协调。DLM 控制在多数情况下都运行良好,但如果应用程序的设计与 DLM 争夺对文件访问的协调,则此设计可能会限制可伸缩性。

  • 所有后端存储上都可以使用存储备份功能。可以方便地创建共享应用程序文件的图形,它能够帮助提供有效的故障恢复。

OCFS2 还提供以下功能:

  • 元数据缓存。

  • 元数据日志。

  • 跨节点的文件数据一致性。

  • 支持多达 4 KB 的多个块大小、多达 1 MB 的群集大小,最大卷大小为 4 PB (Petabyte)。

  • 支持最多 32 个群集节点。

  • 对于数据库文件的异步和直接 I/O 支持,提高了数据库性能。

注意
注意:OCFS2 的支持

仅当与 SUSE Linux Enterprise High Availability 提供的 pcmk (Pacemaker) 堆栈搭配使用时,OCFS2 才受 SUSE 支持。与 o2cb 堆栈结合使用时,SUSE 不提供对 OCFS2 的支持。

21.2 OCFS2 软件包和管理实用程序

SUSE Linux Enterprise High Availability 15 SP6 中会自动安装 OCFS2 内核模块 (ocfs2)。要使用 OCFS2,请确保已在群集中的每个节点上安装以下软件包:ocfs2-tools 和与内核匹配的 ocfs2-kmp-* 软件包。

ocfs2-tools 软件包提供以下实用程序,用于管理 OCFS2 卷。有关语法信息,请参见其手册页。

debugfs.ocfs2

检查 OCFS2 文件系统的状态以进行调试。

defragfs.ocfs2

减少 OCFS2 文件系统的碎片。

fsck.ocfs2

检查文件系统的错误并进行选择性的修改。

mkfs.ocfs2

在某个设备上创建 OCFS2 文件系统,通常是共享物理或逻辑磁盘上的某个分区。

mounted.ocfs2

检测并列出群集系统上所有的 OCFS2 卷。检测并列出已经安装了 OCFS2 设备的系统上的所有节点或列出所有的 OCFS2 设备。

tunefs.ocfs2

更改 OCFS2 文件系统参数,包括卷标、节点槽号、所有节点槽的日志大小和卷大小。

21.3 配置 OCFS2 服务和 STONITH 资源

创建 OCFS2 卷之前,必须先将 DLM 和 STONITH 资源配置为群集中的服务。

以下过程使用 crm 外壳配置群集资源。或者,您也可以按第 21.6 节 “使用 Hawk2 配置 OCFS2 资源”中所述,使用 Hawk2 来配置资源。

过程 21.1︰ 配置 STONITH 资源
注意
注意:需要 STONITH 设备

您需要配置屏蔽设备。没有一个适当的 STONITH 机制(如 external/sbd),则配置会失败。

  1. 启动外壳,并以 root 用户或同等身份登录。

  2. 过程 13.3 “初始化 SBD 设备”中所述,创建 SBD 分区。

  3. 运行 crm configure.

  4. external/sbd 配置为屏蔽设备:

    crm(live)configure# primitive sbd_stonith stonith:external/sbd \
      params pcmk_delay_max=30 meta target-role="Started"
  5. 使用 show 查看所做的更改。

  6. 如果所有设置均正确无误,请使用 commit 提交更改,然后使用 quit 退出 crm 实时配置。

有关为 DLM 配置资源的细节,请参见第 20.2 节 “配置 DLM 群集资源”

21.4 创建 OCFS2 卷

根据第 21.3 节 “配置 OCFS2 服务和 STONITH 资源”中所述配置 DLM 群集资源后,请将系统配置为使用 OCFS2,并创建 OCFs2 卷。

注意
注意:用于存储应用程序和数据文件的 OCFS2 卷

我们建议您通常将应用程序文件和数据文件存储在不同的 OCFS2 卷上。如果应用程序卷和数据卷具有不同的装入要求,则必须将它们存储在不同的卷上。

开始之前要准备计划用于 OCFS2 卷的块设备。将这些设备留作可用空间。

然后,按过程 21.2 “创建并格式化 OCFS2 卷”中所述使用 mkfs.ocfs2 创建并格式化 OCFS2 卷。下面列出了此命令最重要的参数。有关详细信息和命令语法,请参见 mkfs.ocfs2 手册页。

卷标签 (-L)

卷的描述性名称能够在不同节点上安装卷时唯一标识它。使用 tunefs.ocfs2 实用程序根据需要修改该卷标。

群集大小 (-C)

分配给文件以保存数据的最小空间单元。要了解可用的选项和建议,请参见 mkfs.ocfs2 手册页。

节点槽数 (-N)

可以同时安装卷的最大节点数。OCFS2 将为每个节点创建单独的系统文件(如日志)。访问卷的节点可以是小端体系结构(如 AMD64/Intel 64)和大端体系结构(如 S/390x)的组合。

节点特定的文件称为本地文件。节点槽号附加到该本地文件。例如:journal:0000 属于指派到槽号 0 的所有节点。

根据预期有多少个节点并行挂载卷,在创建卷时设置每个卷的最大节点槽数。使用 tunefs.ocfs2 实用程序根据需要增加节点槽数。该值不能减小,并且一个节点槽大约会占用 100 MiB 磁盘空间。

如果未指定 -N 参数,系统会根据文件系统的大小确定节点槽数。有关默认的值,请参见 mkfs.ocfs2 手册页。

块大小 (-b)

文件系统可寻址的最小空间单元创建卷时请指定块大小。要了解可用的选项和建议,请参见 mkfs.ocfs2 手册页。

打开/关闭特定功能 (--fs-features)

可以提供功能标志的逗号分隔列表,mkfs.ocfs2 会尝试根据此列表创建具有这些功能的文件系统。要打开某功能,请将其加入列表。要关闭某功能,请在其名称前加 no

有关所有可用标志的概述,请参见 mkfs.ocfs2 手册页。

预定义功能 (--fs-feature-level)

用于从一组预定义文件系统功能中进行选择。有关可用选项的信息,请参见 mkfs.ocfs2 手册页。

如果使用 mkfs.ocfs2 创建和格式化卷时未指定任何功能,默认会启用以下功能:unwrittenbackup-supermetaeccsparseindexed-dirsinline-dataxattr

过程 21.2︰ 创建并格式化 OCFS2 卷

只在群集节点之上执行以下步骤。

  1. 打开终端窗口并以 root 用户身份登录。

  2. 使用命令 crm status 检查群集是否已上线。

  3. 使用 mkfs.ocfs2 实用程序创建并格式化卷。有关此命令的语法的信息,请参见 mkfs.ocfs2 手册页。

    例如,要创建最多支持 32 个群集节点的新 OCFS2 文件系统,请输入以下命令:

    # mkfs.ocfs2 -N 32 /dev/disk/by-id/DEVICE_ID

    始终使用稳定的设备名称(例如 /dev/disk/by-id/scsi-ST2000DM001-0123456_Wabcdefg)。

21.5 挂载 OCFS2 卷

可以手动挂载 OCFS2 卷,也可以按过程 21.4 “使用群集资源管理器挂载 OCFS2 卷”中所述使用群集管理器挂载。

要挂载多个 OCFS2 卷,请参见过程 21.5 “使用群集资源管理器挂载多个 OCFS2 卷”

过程 21.3︰ 手动挂载 OCFS2 卷
  1. 打开终端窗口并以 root 用户身份登录。

  2. 使用命令 crm status 检查群集是否已上线。

  3. 使用 mount 命令从命令行挂载卷。

提示
提示:在单个节点上挂载现有的 OCFS2 卷

您可以在单个节点(不具有功能完备的群集堆栈)上挂载 OCFS2 卷,例如,用于快速访问备份文件中的数据。要执行此操作,请使用 mount 命令(带 -o nocluster 选项)。

警告

此挂载方法缺少针对整个群集的保护能力。为了避免损坏文件系统,您必须确保仅将其挂载到一个节点上。

过程 21.4︰ 使用群集资源管理器挂载 OCFS2 卷

要使用 High Availability 软件挂载 OCFS2 卷,请在群集中配置 OCFS2 文件系统资源。以下过程使用 crm 外壳配置群集资源。或者,您也可以按第 21.6 节 “使用 Hawk2 配置 OCFS2 资源”中所述,使用 Hawk2 来配置资源。

  1. root 或同等身份登录节点。

  2. 运行 crm configure.

  3. 配置 Pacemaker 以在群集中的每个节点上挂载 OCFS2 文件系统:

    crm(live)configure# primitive ocfs2-1 ocf:heartbeat:Filesystem \
      params device="/dev/disk/by-id/DEVICE_ID" directory="/mnt/shared" fstype="ocfs2" \
      op monitor interval="20" timeout="40" \
      op start timeout="60" op stop timeout="60" \
      meta target-role="Started"
  4. ocfs2-1 原始资源添加到您在过程 20.1 “配置 DLM 的基础组”中创建的 g-storage 组。

    crm(live)configure# modgroup g-storage add ocfs2-1

    受限于基础组的内部共置和顺序约束,ocfs2-1 资源仅可在已有 dlm 资源在运行的节点上启动。

    重要
    重要:不要为多个 OCFS2 资源使用组

    将多个 OCFS2 资源添加到一个组中会在 OCFS2 卷之间创建依赖关系。例如,如果使用 crm configure group g-storage dlm ocfs2-1 ocfs2-2 创建了一个组,那么停止 ocfs2-1 也会停止 ocfs2-2,启动 ocfs2-2 也会启动 ocfs2-1

    要在群集中使用多个 OCFS2 资源,请按过程 21.5 “使用群集资源管理器挂载多个 OCFS2 卷”中所述使用共置和顺序约束。

  5. 使用 show 查看所做的更改。

  6. 如果所有设置均正确无误,请使用 commit 提交更改,然后使用 quit 退出 crm 实时配置。

过程 21.5︰ 使用群集资源管理器挂载多个 OCFS2 卷

要在群集中挂载多个 OCFS2 卷,请为每个卷配置一个 OCFS2 文件系统资源,并将其与您在过程 20.2 “配置独立的 DLM 资源”中创建的 dlm 资源共置。

重要

不要使用 DLM 将多个 OCFS2 资源添加到一个组中。这会在 OCFS2 卷之间创建依赖关系。例如,如果 ocfs2-1ocfs2-2 在同一个组中,那么停止 ocfs2-1 也会停止 ocfs2-2

  1. root 或同等身份登录节点。

  2. 运行 crm configure

  3. 为第一个 OCFS2 卷创建原始资源:

    crm(live)configure# primitive ocfs2-1 Filesystem \
      params directory="/srv/ocfs2-1" fstype=ocfs2 device="/dev/disk/by-id/DEVICE_ID1" \
      op monitor interval=20 timeout=40 \
      op start timeout=60 interval=0 \
      op stop timeout=60 interval=0
  4. 为第二个 OCFS2 卷创建原始资源:

    crm(live)configure# primitive ocfs2-2 Filesystem \
      params directory="/srv/ocfs2-2" fstype=ocfs2 device="/dev/disk/by-id/DEVICE_ID2" \
      op monitor interval=20 timeout=40 \
      op start timeout=60 interval=0 \
      op stop timeout=60 interval=0
  5. 克隆 OCFS2 资源,使其可以在所有节点上运行:

    crm(live)configure# clone cl-ocfs2-1 ocfs2-1 meta interleave=true
    crm(live)configure# clone cl-ocfs2-2 ocfs2-2 meta interleave=true
  6. 为两个 OCFS2 资源添加共置约束,使其只能在正在运行 DLM 的节点上运行:

    crm(live)configure# colocation col-ocfs2-with-dlm inf: ( cl-ocfs2-1 cl-ocfs2-2 ) cl-dlm
  7. 为两个 OCFS2 资源添加顺序约束,使其只能在 DLM 运行后才能启动:

    crm(live)configure# order o-dlm-before-ocfs2 Mandatory: cl-dlm ( cl-ocfs2-1 cl-ocfs2-2 )
  8. 使用 show 查看所做的更改。

  9. 如果所有设置均正确无误,请使用 commit 提交更改,然后使用 quit 退出 crm 实时配置。

21.6 使用 Hawk2 配置 OCFS2 资源

除了使用 crm 外壳为 OCFS2 手动配置 DLM 和文件系统资源以外,您还可以使用 Hawk2 设置向导中的 OCFS2 模板。

重要
重要:手动配置与使用 Hawk2 的区别

设置向导中的 OCFS2 模板包括 STONITH 资源的配置。如果使用该向导,仍需在共享存储设备上创建 SBD 分区,并根据过程 21.1 “配置 STONITH 资源”中所述配置一个 STONITH 资源。

使用 Hawk2 设置向导中的 OCFS2 模板还会导致资源配置与过程 20.1 “配置 DLM 的基础组”过程 21.4 “使用群集资源管理器挂载 OCFS2 卷”中所述的手动配置略有不同。

过程 21.6︰ 使用 Hawk2 的向导配置 OCFS2 资源
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左侧导航栏中,选择向导

  3. 展开文件系统类别,然后选择 OCFS2 File System

  4. 按照屏幕指导执行操作。如果需要有关某个选项的信息,在 Hawk2 中单击它即可显示简短帮助文本。完成最后的配置步骤后,校验您所输入的值。

    向导会显示将应用于 CIB 的配置代码片段以及任何其他更改(如果需要)。

    摘要屏幕,显示要应用于 OCFS2 资源的 CIB 的更改。
    图 21.1︰ 显示 OCFS2 CIB 更改的 Hawk2 摘要屏幕
  5. 检查建议的更改。如果一切都符合您的预期,请应用更改。

    如果操作成功,屏幕上会显示一条消息。

21.7 在 OCFS2 文件系统上使用配额

要在 OCFS2 文件系统上使用配额,请分别使用适当的配额功能或挂载选项创建和挂载文件系统:ursquota(用于单独用户的配额)或 grpquota(用于组的配额)。这些功能也可以稍后使用 tunefs.ocfs2 在未挂载的文件系统上启用。

文件系统启用了相应的定额功能后,它会跟踪其元数据,查看每个用户(或组)使用的空间和文件数。由于 OCFS2 将配额信息视为文件系统内部元数据,因此您无需运行 quotacheck(8) 程序。所有功能都内置到 fsck.ocfs2 和文件系统驱动程序中。

要实施强加于每个用户或组的限制,请如同在任何其他文件系统上一样运行 quotaon(8)。

由于性能原因,每个群集节点都会在本地执行配额会计,并每 10 秒将此信息与通用中央存储设备同步一次。此间隔可使用 tunefs.ocfs2、选项 usrquota-sync-intervalgrpquota-sync-interval 进行调整。因此,配额信息可能不会始终都准确,因而在几个群集节点上并行操作时,用户或组可以稍微超出其配额限制。

21.8 更多信息

有关 OCFS2 的更多信息,请参见以下链接:

https://ocfs2.wiki.kernel.org/

OCFS2 项目主页。

https://oss.oracle.com/projects/ocfs2/

Oracle 上的原 OCFS2 项目主页。

https://oss.oracle.com/projects/ocfs2/documentation

项目的原文档主页。