主题
附录 D 练习题答案
第一部分 基础篇
第 1 章
什么是单点故障?为什么存储系统需要消除单点故障?
- 单点故障是指系统中某个组件故障会导致整个系统不可用。存储系统需要消除单点故障以保证数据持续可访问。
3 副本策略的存储利用率是多少?它有什么优缺点?
- 存储利用率约为 33%。优点是可靠性高、恢复快;缺点是存储利用率低、写性能受影响。
CAP 定理中,GlusterFS 复制卷更偏向哪两个特性?
- 更偏向 AP(可用性和分区容错性)。
对比传统 NAS 和分布式存储。
- 传统 NAS 部署简单但存在单点故障;分布式存储可扩展、无单点,但架构更复杂。
第 2 章
NFSv4 相比 NFSv3 有哪些改进?
- 单一端口 2049、集成锁管理、有状态协议、更好安全性。
hard 和 soft 挂载的区别?
- hard 挂载在服务器不可用时持续重试;soft 挂载超时后返回错误。生产环境推荐 hard 以避免数据损坏。
FSAL 的作用?
- FSAL 是文件系统抽象层,让 NFS-Ganesha 可以导出不同后端存储。
为什么内核 NFS 不适合直接做多节点高可用?
- 因为每台服务器导出本地文件系统,多节点需要共享存储,配置复杂。
第 3 章
brick 和 volume 的关系?
- brick 是存储基本单元,volume 是由多个 brick 组成的逻辑卷。
为什么使用弹性哈希算法?
- 无需中央元数据服务器,定位文件速度快,扩展时迁移量小。
AFR translator 的作用?
- 实现自动文件复制,提供副本冗余。
peer 是什么?
- GlusterFS 集群中的节点。使用
gluster peer status查看。
- GlusterFS 集群中的节点。使用
第 4 章
NFS-Ganesha 的优势?
- 用户态实现、可导出多种后端、适合多节点高可用。
本书使用哪种 FSAL?
- GLUSTER FSAL。
Ganesha 通过什么访问 GlusterFS?
- 通过 libgfapi 直接访问,避免 FUSE 开销。
Export_Id、Path、Pseudo 的区别?
- Export_Id 是唯一标识;Path 是实际导出路径;Pseudo 是 NFSv4 伪路径。
第 5 章
VRID、VIP、Priority 的含义?
- VRID 是虚拟路由标识;VIP 是虚拟 IP;Priority 是优先级,越高越优先成为 Master。
健康检查脚本返回什么表示成功?
- 返回 0。
如何不让 Master 恢复后抢回 VIP?
- 在配置中设置
nopreempt。
- 在配置中设置
为什么推荐 hard 挂载?
- 避免 soft 挂载超时返回错误导致数据不一致。
第二部分 部署篇
第 6 章
为什么 GlusterFS 建议奇数节点?
- 便于仲裁,避免脑裂。
时间同步为什么重要?
- 日志分析、数据一致性、集群状态判断都依赖准确时间。
为什么分离业务流量和复制流量?
- 避免复制流量影响客户端 IO 性能。
XFS 的优势?
- 大文件性能好、扩展属性丰富、适合高并发。
第 7 章
peer probe 的作用?
- 将节点加入 GlusterFS 集群。
如何查看 peer 数量?
gluster peer status。
glusterd 日志位置?
/var/log/glusterfs/glusterd.log。
peer probe 失败如何排查?
- 检查服务、防火墙、hosts、网络连通性。
第 8 章
3 副本卷可容忍几个节点故障?
- 1 个。
brick 数量必须是 3 的倍数吗?
- 对于 replica 3 卷,是的。
扩容复制卷注意什么?
- 需要成组增加 brick,每组 3 个。
performance.cache-size 作用?
- 设置缓存大小,提升读性能。
第 9 章
GLUSTER FSAL 如何访问 GlusterFS?
- 通过 libgfapi。
Pseudo 的作用?
- NFSv4 伪文件系统路径。
No_Root_Squash 和 Root_Squash 区别?
- No_Root_Squash 保持 root 权限;Root_Squash 将 root 映射为匿名用户。
为什么所有节点要同步 Ganesha 配置?
- 保证所有节点导出一致,避免客户端访问不同节点时行为不一致。
第 10 章
virtual_router_id 的作用?
- VRRP 实例标识,同一广播域内必须唯一。
weight -50 含义?
- 健康检查失败时优先级降低 50。
如何验证 VIP 漂移?
- 在 Backup 节点查看
ip addr。
- 在 Backup 节点查看
多 VIP 优势?
- 可实现负载分担,分散客户端连接。
第 11 章
_netdev 的作用?
- 告诉系统这是网络文件系统,网络就绪后再挂载。
NFSv4 是否需要 nolock?
- 不需要,NFSv4 已内置锁管理。
ReadWriteMany 要求?
- 底层存储支持多节点同时读写,NFS 天然支持。
如何设计 VIP 漂移测试?
- 客户端持续写入,停止 Master Ganesha,观察写入是否短暂中断后恢复。
第三部分 进阶篇
第 12 章
分布式卷和复制卷区别?
- 分布式卷无冗余,复制卷有冗余。
分布式复制卷优势?
- 容量和性能可扩展,同时保持冗余。
纠删码冗余度参数?
redundancy参数。
业务数据适合哪种卷?(开放性问题)
第 13 章
如何定位性能瓶颈?
- 监控 CPU、内存、磁盘、网络,使用 iostat、fio 等工具。
io-thread-count 影响?
- IO 处理线程数,影响并发 IO 能力。
TCP 缓冲区为什么影响 NFS?
- NFS 基于 TCP,缓冲区大小影响吞吐和延迟。
随机写 fio 命令?
bashfio -directory=/mnt/nfs-ha -rw=randwrite -bs=4k -size=1G -numjobs=8 -runtime=60 -group_reporting -name=rand-write
第 14 章
自愈机制是什么?
- 自动修复离线恢复后与其他副本不一致的数据。
脑裂如何产生?
- 网络分区时多个分区同时写入。
3 副本为什么能避免 1 节点分区写入?
- 写入需要多数副本成功,1 节点分区无法获得多数。
脑裂如何修复?
- 使用
gluster volume heal ... split-brain命令选择正确副本。
- 使用
第 15 章
Root_Squash 和 No_Root_Squash 区别?
- 见第 9 章答案。
如何限制特定网段访问?
- Ganesha CLIENT 块或防火墙规则。
auth.allow 作用?
- 限制可以挂载 GlusterFS 卷的 IP。
TLS 优缺点?
- 优点是安全;缺点是 CPU 开销增加。
第 16 章
高可用和备份区别?
- 高可用保证服务连续;备份用于数据恢复。
快照限制?
- 需要 LVM thin pool,不适合长期异地备份。
异地备份方案?(开放性问题)
为什么定期演练?
- 验证备份可恢复,熟悉恢复流程,明确 RTO/RPO。
第四部分 运维篇
第 17 章
监控覆盖层次?
- 基础设施、GlusterFS、Ganesha、Keepalived、业务层。
Node Exporter 端口?
- 9100。
如何自定义 Ganesha 指标?
- 编写自定义 exporter 暴露 Prometheus 格式指标。
最重要告警规则?(开放性问题)
第 18 章
日常巡检检查项?
- 见第 18 章巡检清单。
主要日志文件?
- glusterd.log、brick 日志、ganesha.log、keepalived journal。
挂载超时排查?
- 检查 VIP、Ganesha、导出、防火墙、fstab。
VIP 不漂移原因?
- Keepalived 未运行、VRRP 被拦截、健康检查失败、VRID 冲突。
第 19 章
为什么逐节点升级?
- 避免集群整体不可用。
为什么 rebalance?
- 重新分布数据到新 brick。
在线迁移数据流程?
- 加入新节点、扩容、rebalance、移除旧 brick。
如何减少 Ganesha 升级影响?
- 在非 VIP 节点先升级,或主动切换 VIP。
第 20 章
为什么分离复制流量和业务流量?
- 避免相互影响。
生产环境内存建议?
- 至少 8GB,大缓存场景 16GB+。
变更管理流程步骤?
- 测试、方案、备份、执行、验证、记录。
应急预案?(开放性问题)