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 文件系统参数,例如
UUID
、label
、lockproto
和locktable
。
26.2 配置 GFS2 服务和 STONITH 资源 #
在创建 GFS2 卷之前,必须先配置 DLM 和 STONITH 资源。
您需要配置屏蔽设备。如果未实施 STONITH 机制(如 external/sbd
),配置将会失败。
启动外壳,并以
root
用户或同等身份登录。如过程 17.3 “初始化 SBD 设备”中所述,创建 SBD 分区。
运行
crm configure
。将
external/sbd
配置为屏蔽设备:crm(live)configure#
primitive sbd_stonith stonith:external/sbd \ params pcmk_delay_max=30 meta target-role="Started"
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
有关为 DLM 配置资源的细节,请参见第 24.2 节 “配置 DLM 群集资源”。
26.3 创建 GFS2 卷 #
按第 26.2 节 “配置 GFS2 服务和 STONITH 资源”中所述将 DLM 配置为群集资源后,将系统配置为使用 GFS2 并创建 GFS2 卷。
我们建议您通常应将应用程序文件和数据文件存储在不同的 GFS2 卷上。如果应用程序卷和数据卷具有不同的装入要求,则必须将它们存储在不同的卷上。
开始之前要准备计划用于 GFS2 卷的块设备。将这些设备留作可用空间。
然后按过程 26.2 “创建并格式化 GFS2 卷”中所述,使用 mkfs.gfs2
创建并格式化 GFS2 卷。下面列出了此命令最重要的参数。有关详细信息和命令语法,请参见 mkfs.gfs2
手册页。
- 锁定协议名称 (
-p
) 要使用的锁定协议的名称。可接受的锁定协议包括 lock_dlm(用于共享存储);如果您将 GFS2 用作本地文件系统(只有 1 个节点),则可以指定 lock_nolock 协议。如果未指定此选项,将采用 lock_dlm 协议。
- 锁定表名称 (
-t
) 与您正在使用的锁定模块对应的锁定表字段。其为 clustername:fsname。clustername 值必须与群集配置文件
/etc/corosync/corosync.conf
中的值匹配。只允许此群集的成员使用此文件系统。fsname 值是唯一的文件系统名称(1 到 16 个字符),用于将此 GFS2 文件系统与创建的其他文件系统区分开。- 日志数量 (
-j
) 要为 gfs2_mkfs 创建的日志数量。要挂载该文件系统的每台计算机至少需要一个日志。如果未指定此选项,将创建一个日志。
仅在群集的一个节点上执行以下步骤。
打开终端窗口并以
root
用户身份登录。使用命令
crm status
检查群集是否已上线。使用
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 卷”中所述使用群集管理器挂载。
打开终端窗口并以
root
用户身份登录。使用命令
crm status
检查群集是否已上线。使用
mount
命令从命令行挂载卷。
如果您为了进行测试手动挂载了 GFS2 文件系统,在开始将其作为群集资源使用前,请务必将其卸载以恢复原状。
要使用高可用性软件挂载 GFS2 卷,请在群集中配置 OCF 文件系统资源。以下过程使用 crm
外壳配置群集资源。或者,您可以使用 Hawk2 配置资源。
启动外壳,并以
root
用户或同等身份登录。运行
crm configure
。配置 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"
将
gfs2-1
原始资源添加到您在过程 24.1 “配置 DLM 的基础组”中创建的g-storage
组。crm(live)configure#
modgroup g-storage add gfs2-1
受限于基础组的内部共置和顺序约束,
gfs2-1
资源仅可在已有dlm
资源在运行的节点上启动。使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
26.5 从 OCFS2 迁移到 GFS2 #
SUSE Linux Enterprise High Availability 15 SP7 中已弃用 OCFS2。未来的版本将不再支持该功能。
与 OCFS2 不同,GFS2 不支持 reflink 功能。
下面的过程介绍了从 OCFS2 迁移到 GFS2 的一种方法。该方法假定您有一个 OCFS2 卷,并且该卷是 g-storage
组的一部分。
准备新的块存储设备和备份数据的步骤取决于具体设置。如需更多详细信息,请参见相关文档。
您只需在群集的一个节点上执行以下过程。
在生产环境中执行此过程之前,请先在测试环境中进行全面测试。
为 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
输出中显示的数量。在群集中的所有节点上安装 GFS2 软件包。您可以使用以下命令同时在所有节点上执行此操作:
#
crm cluster run "zypper install -y gfs2-utils gfs2-kmp-default"
使用
mkfs.gfs2
实用程序创建并格式化 GFS2 卷。有关此命令的语法的信息,请参见mkfs.gfs2
手册页。提示:mkfs.ofs2
和mkfs.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
。对于在群集节点之间共享的设备,始终使用稳定的设备名称。
将群集置于维护模式:
#
crm maintenance on
备份 OCFS2 卷的数据。
以交互模式启动 crm 外壳:
#
crm configure
删除 OCFS2 资源:
crm(live)#
delete ocfs2-1
使用 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"
将 GFS2 原始资源添加到
g-storage
组:crm(live)#
modgroup g-storage add gfs2-1
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。使群集退出维护模式:
#
crm maintenance off
查看群组状态,了解组
g-storage
的详细信息:#
crm status detail
该组现在应包含原始资源
gfs2-1
。在挂载点上运行
df -h
,确保磁盘名称已更改:#
df -h /mnt/shared/
Filesystem Size Used Avail Use% Mounted on /dev/sdc 10G 290M 9.8G 3% /mnt/shared如果输出中未显示正确磁盘,可能是因为新的
gfs2-1
资源正在重启动。如果您稍作等待后再次运行该命令,这个问题应该会自行解决。将备份中的数据恢复到 GFS2 卷。
注意:GFS2 磁盘的使用即使恢复数据以后,GFS2 卷使用的磁盘空间也可能没有 OCFS2 卷多。
为确保数据正确显示,请检查挂载点的内容。例如:
#
ls -l /mnt/shared/
您也可以在其他节点上运行此命令,以确保正确共享数据。
如果需要,现在可以去除 OCFS2 磁盘。