documentation.suse.com / SUSE Linux Enterprise High Availability 文档 / 管理指南 / 存储和数据复制 / GFS2
适用范围 SUSE Linux Enterprise High Availability 15 SP7

26 GFS2

全局文件系统 2 或称 GFS2 是适用于 Linux 计算机群集的共享磁盘文件系统。GFS2 允许所有节点直接同时访问同一个共享块存储。GFS2 不提供断开连接操作模式,也没有客户端角色或服务器角色。GFS2 群集中的所有节点以对等体的形式运行。GFS2 最多支持 32 个群集节点。在群集中使用 GFS2 需要通过硬件来访问共享存储设备,并需要通过一个锁管理器来控制对存储空间的访问。

26.1 GFS2 软件包和管理实用程序

要使用 GFS2,请确保群集的每个节点上均已安装适用于您的内核的 gfs2-utils 和匹配的 gfs2-kmp-* 软件包。

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

fsck.gfs2

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

gfs2_jadd

将其他日记添加到 GFS2 文件系统。

gfs2_grow

产生 GFS2 文件系统。

mkfs.gfs2

在设备上创建 GFS2 文件系统,这通常是一个共享设备或分区。

tunegfs2

用于查看和调整 GFS2 文件系统参数,例如 UUIDlabellockprotolocktable

26.2 配置 GFS2 服务和 STONITH 资源

在创建 GFS2 卷之前,必须先配置 DLM 和 STONITH 资源。

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

您需要配置屏蔽设备。如果未实施 STONITH 机制(如 external/sbd),配置将会失败。

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

  2. 过程 17.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 配置资源的细节,请参见第 24.2 节 “配置 DLM 群集资源”

26.3 创建 GFS2 卷

第 26.2 节 “配置 GFS2 服务和 STONITH 资源”中所述将 DLM 配置为群集资源后,将系统配置为使用 GFS2 并创建 GFS2 卷。

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

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

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

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

锁定协议名称 (-p)

要使用的锁定协议的名称。可接受的锁定协议包括 lock_dlm(用于共享存储);如果您将 GFS2 用作本地文件系统(只有 1 个节点),则可以指定 lock_nolock 协议。如果未指定此选项,将采用 lock_dlm 协议。

锁定表名称 (-t)

与您正在使用的锁定模块对应的锁定表字段。其为 clustername:fsnameclustername 值必须与群集配置文件 /etc/corosync/corosync.conf 中的值匹配。只允许此群集的成员使用此文件系统。fsname 值是唯一的文件系统名称(1 到 16 个字符),用于将此 GFS2 文件系统与创建的其他文件系统区分开。

日志数量 (-j)

要为 gfs2_mkfs 创建的日志数量。要挂载该文件系统的每台计算机至少需要一个日志。如果未指定此选项,将创建一个日志。

过程 26.2︰ 创建并格式化 GFS2 卷

仅在群集的一个节点上执行以下步骤。

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

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

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

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

    # mkfs.gfs2 -t hacluster:mygfs2 -p lock_dlm -j 32 /dev/disk/by-id/DEVICE_ID

    hacluster 名称与文件 /etc/corosync/corosync.conf 中的 cluster_name 项相关(这是默认设置)。

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

26.4 挂载 GFS2 卷

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

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

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

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

警告
警告:手动挂载的 GFS2 设备

如果您为了进行测试手动挂载了 GFS2 文件系统,在开始将其作为群集资源使用前,请务必将其卸载以恢复原状。

过程 26.4︰ 使用群集管理器挂载 GFS2 卷

要使用高可用性软件挂载 GFS2 卷,请在群集中配置 OCF 文件系统资源。以下过程使用 crm 外壳配置群集资源。或者,您可以使用 Hawk2 配置资源。

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

  2. 运行 crm configure

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

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

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

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

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

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

26.5 从 OCFS2 迁移到 GFS2

SUSE Linux Enterprise High Availability 15 SP7 中已弃用 OCFS2。未来的版本将不再支持该功能。

注意
注意:GFS2 不支持 reflink

与 OCFS2 不同,GFS2 支持 reflink 功能。

下面的过程介绍了从 OCFS2 迁移到 GFS2 的一种方法。该方法假定您有一个 OCFS2 卷,并且该卷是 g-storage 组的一部分。

准备新的块存储设备和备份数据的步骤取决于具体设置。如需更多详细信息,请参见相关文档。

您只需在群集的一个节点上执行以下过程。

警告
警告:请先测试该过程

在生产环境中执行此过程之前,请先在测试环境中进行全面测试。

过程 26.5︰ 从 OCFS2 迁移到 GFS2
  1. 为 GFS2 卷准备一个块设备。

    要检查所需磁盘空间,请在 OCFS2 挂载点上运行 df -h。例如:

    # df -h /mnt/shared/
    Filesystem     Size  Used Avail Use% Mounted on
    /dev/sdb        10G  2.3G  7.8G  23% /mnt/shared

    记下 Filesystem 下方的磁盘名称。这将有助于稍后检查迁移是否成功。

    注意
    注意:OCFS2 磁盘的使用

    由于某些 OCFS2 系统文件可能会保留磁盘空间,而不是将其返回给全局位图文件,因此实际磁盘使用量可能小于 df -h 输出中显示的数量。

  2. 在群集中的所有节点上安装 GFS2 软件包。您可以使用以下命令同时在所有节点上执行此操作:

    # crm cluster run "zypper install -y gfs2-utils gfs2-kmp-default"
  3. 使用 mkfs.gfs2 实用程序创建并格式化 GFS2 卷。有关此命令的语法的信息,请参见 mkfs.gfs2 手册页。

    提示
    提示:mkfs.ofs2mkfs.gfs2 的主要区别
    • OCFS2 使用 -C 指定群集大小,使用 -b 指定块大小。GFS2 也使用 -b 指定块大小,但没有群集大小设置,因此不会使用 -C

    • OCFS2 通过 -N 指定节点数。GFS2 通过 -j 指定节点数。

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

    # mkfs.gfs2 -t CLUSTERNAME:mygfs2 -p lock_dlm -j 32 /dev/disk/by-id/DEVICE_ID

    CLUSTERNAME 必须与文件 /etc/corosync/corosync.conf 中的 cluster_name 相同。默认值为 hacluster

    对于在群集节点之间共享的设备,始终使用稳定的设备名称。

  4. 将群集置于维护模式:

    # crm maintenance on
  5. 备份 OCFS2 卷的数据。

  6. 以交互模式启动 crm 外壳:

    # crm configure
  7. 删除 OCFS2 资源:

    crm(live)# delete ocfs2-1
  8. 使用 OCFS2 文件系统所用的相同挂载点,在群集中的每个节点上挂载 GFS2 文件系统:

    crm(live)# primitive gfs2-1 ocf:heartbeat:Filesystem \
    params device="/dev/disk/by-id/DEVICE_ID" directory="/mnt/shared" fstype="gfs2" \
    op monitor interval="20" timeout="40" \
    op start timeout="60" op stop timeout="60" \
    meta target-role="Started"
  9. 将 GFS2 原始资源添加到 g-storage 组:

    crm(live)# modgroup g-storage add gfs2-1
  10. 使用 show 查看所做的更改。

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

  12. 使群集退出维护模式:

    # crm maintenance off
  13. 查看群组状态,了解组 g-storage 的详细信息:

    # crm status detail

    该组现在应包含原始资源 gfs2-1

  14. 在挂载点上运行 df -h,确保磁盘名称已更改:

    # df -h /mnt/shared/
    Filesystem     Size  Used Avail Use% Mounted on
    /dev/sdc        10G  290M  9.8G   3% /mnt/shared

    如果输出中未显示正确磁盘,可能是因为新的 gfs2-1 资源正在重启动。如果您稍作等待后再次运行该命令,这个问题应该会自行解决。

  15. 将备份中的数据恢复到 GFS2 卷。

    注意
    注意:GFS2 磁盘的使用

    即使恢复数据以后,GFS2 卷使用的磁盘空间也可能没有 OCFS2 卷多。

  16. 为确保数据正确显示,请检查挂载点的内容。例如:

    # ls -l /mnt/shared/

    您也可以在其他节点上运行此命令,以确保正确共享数据。

  17. 如果需要,现在可以去除 OCFS2 磁盘。

Documentation survey