Skip to content

附录 D 练习题答案

第一部分 基础篇

第 1 章

  1. 什么是单点故障?为什么存储系统需要消除单点故障?

    • 单点故障是指系统中某个组件故障会导致整个系统不可用。存储系统需要消除单点故障以保证数据持续可访问。
  2. 3 副本策略的存储利用率是多少?它有什么优缺点?

    • 存储利用率约为 33%。优点是可靠性高、恢复快;缺点是存储利用率低、写性能受影响。
  3. CAP 定理中,GlusterFS 复制卷更偏向哪两个特性?

    • 更偏向 AP(可用性和分区容错性)。
  4. 对比传统 NAS 和分布式存储。

    • 传统 NAS 部署简单但存在单点故障;分布式存储可扩展、无单点,但架构更复杂。

第 2 章

  1. NFSv4 相比 NFSv3 有哪些改进?

    • 单一端口 2049、集成锁管理、有状态协议、更好安全性。
  2. hard 和 soft 挂载的区别?

    • hard 挂载在服务器不可用时持续重试;soft 挂载超时后返回错误。生产环境推荐 hard 以避免数据损坏。
  3. FSAL 的作用?

    • FSAL 是文件系统抽象层,让 NFS-Ganesha 可以导出不同后端存储。
  4. 为什么内核 NFS 不适合直接做多节点高可用?

    • 因为每台服务器导出本地文件系统,多节点需要共享存储,配置复杂。

第 3 章

  1. brick 和 volume 的关系?

    • brick 是存储基本单元,volume 是由多个 brick 组成的逻辑卷。
  2. 为什么使用弹性哈希算法?

    • 无需中央元数据服务器,定位文件速度快,扩展时迁移量小。
  3. AFR translator 的作用?

    • 实现自动文件复制,提供副本冗余。
  4. peer 是什么?

    • GlusterFS 集群中的节点。使用 gluster peer status 查看。

第 4 章

  1. NFS-Ganesha 的优势?

    • 用户态实现、可导出多种后端、适合多节点高可用。
  2. 本书使用哪种 FSAL?

    • GLUSTER FSAL。
  3. Ganesha 通过什么访问 GlusterFS?

    • 通过 libgfapi 直接访问,避免 FUSE 开销。
  4. Export_Id、Path、Pseudo 的区别?

    • Export_Id 是唯一标识;Path 是实际导出路径;Pseudo 是 NFSv4 伪路径。

第 5 章

  1. VRID、VIP、Priority 的含义?

    • VRID 是虚拟路由标识;VIP 是虚拟 IP;Priority 是优先级,越高越优先成为 Master。
  2. 健康检查脚本返回什么表示成功?

    • 返回 0。
  3. 如何不让 Master 恢复后抢回 VIP?

    • 在配置中设置 nopreempt
  4. 为什么推荐 hard 挂载?

    • 避免 soft 挂载超时返回错误导致数据不一致。

第二部分 部署篇

第 6 章

  1. 为什么 GlusterFS 建议奇数节点?

    • 便于仲裁,避免脑裂。
  2. 时间同步为什么重要?

    • 日志分析、数据一致性、集群状态判断都依赖准确时间。
  3. 为什么分离业务流量和复制流量?

    • 避免复制流量影响客户端 IO 性能。
  4. XFS 的优势?

    • 大文件性能好、扩展属性丰富、适合高并发。

第 7 章

  1. peer probe 的作用?

    • 将节点加入 GlusterFS 集群。
  2. 如何查看 peer 数量?

    • gluster peer status
  3. glusterd 日志位置?

    • /var/log/glusterfs/glusterd.log
  4. peer probe 失败如何排查?

    • 检查服务、防火墙、hosts、网络连通性。

第 8 章

  1. 3 副本卷可容忍几个节点故障?

    • 1 个。
  2. brick 数量必须是 3 的倍数吗?

    • 对于 replica 3 卷,是的。
  3. 扩容复制卷注意什么?

    • 需要成组增加 brick,每组 3 个。
  4. performance.cache-size 作用?

    • 设置缓存大小,提升读性能。

第 9 章

  1. GLUSTER FSAL 如何访问 GlusterFS?

    • 通过 libgfapi。
  2. Pseudo 的作用?

    • NFSv4 伪文件系统路径。
  3. No_Root_Squash 和 Root_Squash 区别?

    • No_Root_Squash 保持 root 权限;Root_Squash 将 root 映射为匿名用户。
  4. 为什么所有节点要同步 Ganesha 配置?

    • 保证所有节点导出一致,避免客户端访问不同节点时行为不一致。

第 10 章

  1. virtual_router_id 的作用?

    • VRRP 实例标识,同一广播域内必须唯一。
  2. weight -50 含义?

    • 健康检查失败时优先级降低 50。
  3. 如何验证 VIP 漂移?

    • 在 Backup 节点查看 ip addr
  4. 多 VIP 优势?

    • 可实现负载分担,分散客户端连接。

第 11 章

  1. _netdev 的作用?

    • 告诉系统这是网络文件系统,网络就绪后再挂载。
  2. NFSv4 是否需要 nolock?

    • 不需要,NFSv4 已内置锁管理。
  3. ReadWriteMany 要求?

    • 底层存储支持多节点同时读写,NFS 天然支持。
  4. 如何设计 VIP 漂移测试?

    • 客户端持续写入,停止 Master Ganesha,观察写入是否短暂中断后恢复。

第三部分 进阶篇

第 12 章

  1. 分布式卷和复制卷区别?

    • 分布式卷无冗余,复制卷有冗余。
  2. 分布式复制卷优势?

    • 容量和性能可扩展,同时保持冗余。
  3. 纠删码冗余度参数?

    • redundancy 参数。
  4. 业务数据适合哪种卷?(开放性问题)

第 13 章

  1. 如何定位性能瓶颈?

    • 监控 CPU、内存、磁盘、网络,使用 iostat、fio 等工具。
  2. io-thread-count 影响?

    • IO 处理线程数,影响并发 IO 能力。
  3. TCP 缓冲区为什么影响 NFS?

    • NFS 基于 TCP,缓冲区大小影响吞吐和延迟。
  4. 随机写 fio 命令?

    bash
    fio -directory=/mnt/nfs-ha -rw=randwrite -bs=4k -size=1G -numjobs=8 -runtime=60 -group_reporting -name=rand-write

第 14 章

  1. 自愈机制是什么?

    • 自动修复离线恢复后与其他副本不一致的数据。
  2. 脑裂如何产生?

    • 网络分区时多个分区同时写入。
  3. 3 副本为什么能避免 1 节点分区写入?

    • 写入需要多数副本成功,1 节点分区无法获得多数。
  4. 脑裂如何修复?

    • 使用 gluster volume heal ... split-brain 命令选择正确副本。

第 15 章

  1. Root_Squash 和 No_Root_Squash 区别?

    • 见第 9 章答案。
  2. 如何限制特定网段访问?

    • Ganesha CLIENT 块或防火墙规则。
  3. auth.allow 作用?

    • 限制可以挂载 GlusterFS 卷的 IP。
  4. TLS 优缺点?

    • 优点是安全;缺点是 CPU 开销增加。

第 16 章

  1. 高可用和备份区别?

    • 高可用保证服务连续;备份用于数据恢复。
  2. 快照限制?

    • 需要 LVM thin pool,不适合长期异地备份。
  3. 异地备份方案?(开放性问题)

  4. 为什么定期演练?

    • 验证备份可恢复,熟悉恢复流程,明确 RTO/RPO。

第四部分 运维篇

第 17 章

  1. 监控覆盖层次?

    • 基础设施、GlusterFS、Ganesha、Keepalived、业务层。
  2. Node Exporter 端口?

    • 9100。
  3. 如何自定义 Ganesha 指标?

    • 编写自定义 exporter 暴露 Prometheus 格式指标。
  4. 最重要告警规则?(开放性问题)

第 18 章

  1. 日常巡检检查项?

    • 见第 18 章巡检清单。
  2. 主要日志文件?

    • glusterd.log、brick 日志、ganesha.log、keepalived journal。
  3. 挂载超时排查?

    • 检查 VIP、Ganesha、导出、防火墙、fstab。
  4. VIP 不漂移原因?

    • Keepalived 未运行、VRRP 被拦截、健康检查失败、VRID 冲突。

第 19 章

  1. 为什么逐节点升级?

    • 避免集群整体不可用。
  2. 为什么 rebalance?

    • 重新分布数据到新 brick。
  3. 在线迁移数据流程?

    • 加入新节点、扩容、rebalance、移除旧 brick。
  4. 如何减少 Ganesha 升级影响?

    • 在非 VIP 节点先升级,或主动切换 VIP。

第 20 章

  1. 为什么分离复制流量和业务流量?

    • 避免相互影响。
  2. 生产环境内存建议?

    • 至少 8GB,大缓存场景 16GB+。
  3. 变更管理流程步骤?

    • 测试、方案、备份、执行、验证、记录。
  4. 应急预案?(开放性问题)