精读笔记(RHCA 英文教材)· RH436 Chapter 11 Providing Storage with the GFS2 Cluster File System
精读笔记(RHCA 英文教材)· RH436 Chapter 11 Providing Storage with the GFS2 Cluster File System
教材原文:RHCA 官方英文教材(PDF 第 363~388 页)(OCR 整书版已从本站移除,本页为章节精读) 关联知识:Ch10(共享 VG/LV 是 GFS2 唯一受支持底座)、Ch4(Filesystem 资源);本章=GFS2 集群文件系统全流程(概念→mkfs.gfs2→加日志/扩容)。 结构:3 个 Section(11.1 概念+Quiz;11.2 创建+GE gfs-create;11.3 管理+GE gfs-manage)+ 章末 Lab(lab: gfs-review)。
Chapter Goal / Objectives(原文+译)
- GOAL: Provide tightly coupled shared storage that multiple nodes can access simultaneously, using the GFS2 cluster file system.(用 GFS2 提供多节点可同时访问的紧耦合共享存储。)
- OBJECTIVES: ① 描述 GFS2 关键概念与适用场景;② 在 HA 集群里创建 GFS2 文件系统;③ 扩容现有 GFS2 并创建多个 journal。
11.1 Describing GFS2 Concepts
- GFS2(Global File System 2):可在多个集群节点同时以读写方式挂载的集群文件系统;支持 POSIX ACL、扩展属性、quota、符号链接、SELinux。通常留给集群感知应用 / active-active(多节点同时访问同一数据)用。
- 并发协调:依赖 HA 集群基础设施(监控+fence 节点)+ DLM 控制文件/目录锁。
- journal 机制:每个挂载节点一个独立 journal;节点故障→fence 后由另一节点**重放(replay)**该失败节点 journal。创建 FS 时分配 journal,事后可用
gfs2_jadd补。 - 支持边界(Quiz 考点):
- 不支持单节点用 GFS2;x86_64 集群最多 16 节点同时挂载;只在 LVM 共享逻辑卷上受支持(Red Hat 只支持这种建法)。
- 只单点挂载就别用 GFS2(XFS 更简单、性能通常更好)。
- 理论最大 8 EiB(纯 64 位),Red Hat 支持上限 100 TiB。
- 建议拆多个小 GFS2 而非一个大卷:大卷
fsck.gfs2很慢且吃内存。 - GFS2 属 Resilient Storage Add-On(Quiz:不是 High Availability / Scalable File System Add-On)。
- 生产大集群建议先找 Red Hat 做架构评审(架构设计是否可支持)。
11.2 Creating a GFS2 Cluster File System
前置要求
- 带可用 fence 的 HA 集群;LVM 共享 VG + 共享 LV(LV 须在全节点激活,见 Ch10);时间同步(chrony/NTP)——GFS2 要求节点时钟一致。
建 FS 前收集信息
- 集群节点数(=初始 journal 数;未来要加节点可多建);集群名(
pcs status第一行Cluster name:);FS 名(集群内唯一、≤16 字符);共享 LV 设备路径。
建 FS
# 1) 全节点装包
yum install gfs2-utils
# 2) 关键集群属性:失 quorum 时 freeze 而不是 stop
# 默认 no-quorum-policy=stop:失 quorum 会尝试停 GFS2→DLM 在无 quorum 下停不掉→整个集群卡死
pcs property set no-quorum-policy=freeze
# 3) 任一台执行(-t <集群名>:<FS名>,-j journal 数,-J 每个 journal MiB)
mkfs.gfs2 -t examplecluster:examplegfs2 -j 3 -J 128 /dev/lvmsharedvg/lv1-J:最小 8 MiB、最大 1 GiB;不写由 mkfs 按 FS 大小算;推荐 ≥128 MiB。- ⚠️ 严禁手
mount挂载后直接关机/重启(可能 shutdown 卡死);永不把 GFS2 写进 /etc/fstab——要让 Pacemaker 用 Filesystem 资源管挂载/卸载。
用集群资源挂载(依赖链:DLM/lvmlockd 克隆组 → LVM 共享 LV 激活克隆组 → Filesystem)
pcs resource create clusterfs Filesystem device=/dev/sharedvg/sharedlv1 \
directory=/srv/data fstype=gfs2 op monitor interval=10s on-fail=fence \
--group=LVMshared # 加进已有的 LVMshared 克隆组,随 LV 一起全节点挂11.2 GE(lab: gfs-create)
- 三节点
yum install gfs2-utils。 - nodea:
lvs确认 sharedvg/sharedlv1(5G);pcs status抄集群名(cluster1)。 - nodea:
mkfs.gfs2 -j 4 -t cluster1:gfsdata /dev/sharedvg/sharedlv1(4 journal=每节点 1 个;输出含Locking protocol: "lock_dlm"、Lock table: "cluster1:gfsdata")。 - nodea:
pcs property set no-quorum-policy=freeze→pcs resource create clusterfs Filesystem device=/dev/sharedvg/sharedlv1 directory=/srv/data fstype=gfs2 op monitor interval=10s on-fail=fence --group=LVMshared。 pcs status --full见三节点 LVMshared 克隆组各含 sharedlvm1+clusterfs;mount | grep gfs2三节点都挂/srv/data。- 验证并发:nodea 写
echo Hello world > /srv/data/test.txt→ nodebcat能读到。
11.3 Managing a GFS2 Cluster File System
加 journal(挂载节点数不能超过 journal 数)
gfs2_edit -p journals /dev/lvmsharedvg/lv1 # 查现有 journal(块号/大小/clean)
gfs2_jadd -j 3 -J 256 /dev/lvmsharedvg/lv1 # 加 3 个 256MiB journal(默认 -J 128)gfs2_jadd只能在已挂载的 FS 上跑(把空闲空间转成 journal,须留够空间);单节点跑即可。
扩容(LV 先扩,再扩 FS)
lvextend -L +10G /dev/lvmsharedvg/lv1 # 先扩 LVM(共享锁,其他主机可能需 refresh)
gfs2_grow -T /dev/lvmsharedvg/lv1 # -T=测试模式(演练不改盘)
gfs2_grow /dev/lvmsharedvg/lv1 # 真扩(挂载中可跑)
df -h <挂载点> # 验证修复与改锁表
- 平时不需手工修复:节点挂→fence→他节点重放 journal。存储设备故障等导致 dirty/损坏时才
fsck(自动调fsck.gfs2)。 - ⚠️
fsck.gfs2前必须从所有节点卸载:集群资源管理时先pcs resource disable <r>让全节点卸载,修完再 enable。 - 查看超级块:
tunegfs2 -l /dev/lvmsharedvg/lv1(Lock protocol: lock_dlm、Lock table: 集群:FS);改名:tunegfs2 -o locktable=newcluster:examplegfs2 <dev>(同样要求全节点卸载)。
11.3 GE(lab: gfs-manage)
三节点 5GiB GFS2 已挂 /srv/data,为将来扩到第 4 节点做准备:
gfs2_edit -p journals /dev/mapper/sharedvg-sharedlv1→ 只有 journal0~2(3 个)。gfs2_jadd -j 1 -J 32 /dev/mapper/sharedvg-sharedlv1→ Old 3 / New 4(可能耗时数分钟,勿中断)。df -h /srv/data见 5.0G →lvextend -L +2G /dev/mapper/sharedvg-sharedlv1(7.00 GiB)→gfs2_grow /dev/mapper/sharedvg-sharedlv1→ 再df -h见 7.0G。
Lab 概要(lab: gfs-review)
两节点集群(nodec/noded),共享 LV /dev/webdata/logs:两机装 gfs2-utils → nodec mkfs.gfs2 -j 4 -J 128 -t cluster2:webfs /dev/webdata/logs(为将来 4 节点预留 journal)→ pcs property set no-quorum-policy=freeze → 建 Filesystem 资源 gfs2fs(device=/dev/webdata/logs directory=/var/log/web fstype=gfs2)加进 sharedVG 组 → 两节点 mount | grep gfs2 都见 /var/log/web → lab grade gfs-review。
命令速查表
| 用途 | 命令 | | 装 GFS2 工具 | yum install gfs2-utils | | 建 GFS2 | mkfs.gfs2 -t <集群>:<FS名≤16字符> -j <journal数> -J <MiB> <共享LV> | | 查 journal | gfs2_edit -p journals <dev> | | 加 journal | gfs2_jadd -j <个数> -J <MiB> <dev\|挂载点>(须已挂载) | | 扩 LV 再扩 FS | lvextend -L +<size> <LV>;gfs2_grow [-T] <dev\|挂载点> | | 修复 | 全节点卸载后 fsck.gfs2 <dev>(fsck 会自动调) | | 看/改锁表 | tunegfs2 -l <dev>;tunegfs2 -o locktable=<集群>:<FS> <dev> | | 集群属性 | pcs property set no-quorum-policy=freeze | | 挂载资源 | pcs resource create <r> Filesystem device=<LV> directory=<dir> fstype=gfs2 op monitor interval=10s on-fail=fence --group=<共享LV组> | | 实验/评分 | lab start gfs-create\|gfs-manage\|gfs-review;lab grade gfs-review |
词汇表
| 英文 | 中文 | 速记 |
|---|---|---|
| GFS2 | 全局文件系统 2 | 多节点同时读写挂载 |
| cluster file system | 集群文件系统 | 靠 DLM 协调锁 |
| journal | 日志 | 每挂载节点一个;故障后他节点重放 |
| lock table / lock space | 锁表/锁空间 | -t 集群名:FS名;FS 名≤16 字符 |
| no-quorum-policy=freeze | 失仲裁策略=冻结 | 失 quorum 不动作,等恢复;防 GFS2 卡死 |
| fsck.gfs2 | 文件系统检查 | 全节点卸载后才能跑 |
| gfs2_jadd | 加 journal | 仅已挂载 FS 可跑 |
| gfs2_grow | 扩容 FS | 挂载中可跑;-T 测试 |
| tunegfs2 | 改超级块 | 改 lock table 等,须卸载 |
| Resilient Storage Add-On | 弹性存储附加组件 | GFS2/共享 VG 的归属 |
| DLM | 分布式锁管理器 | GFS2 文件/目录锁基础 |
| replay | 重放日志 | 恢复失败节点未完成写 |
自测 10 题
- GFS2 最多几个 x86_64 节点同时挂?(16)
- 受支持的最大 FS 大小?(100 TiB;理论上限 8 EiB)
- GFS2 必须在什么底座上建?(LVM 共享逻辑卷)
- 单节点挂载适合用 GFS2 吗?(不适合,XFS 更简单快)
- 失 quorum 时为何要设 freeze?(默认 stop 会试图停 GFS2→无 quorum DLM 停不掉→集群卡死)
- mkfs.gfs2 的 -t 参数格式?(集群名:文件系统名,FS 名≤16 字符)
- 每节点挂载需什么?(一个 journal;不够用 gfs2_jadd 加)
- 为什么不能把 GFS2 写进 /etc/fstab 或手工挂载后直接重启?(关机可能挂起;应由 Pacemaker 管理)
- gfs2_grow 之前要做什么?(lvextend 扩 LV)
- fsck.gfs2 前必须做什么?(全节点卸载,集群资源先 disable)
