7.4. 集群
集群的存储可为集群中的所有服务器提供一致的文件系统映像,让服务读取和写入单一文件或者共享的文件系统。这样可以通过限制类似在一个文件系统中安装和为程序打补丁的方法简化集群管理。集群范围内的文件系统还不需要程序数据的冗余副本,这样也简化了备份和系统恢复的过程。
红帽高可用性附加组件除提供红帽全局文件系统 2(单行存储附加组件)外还提供集群的存储。
7.4.1. 全局文件系统 2
全局文件系统 2 是自带的文件系统,可直接与 Linux 内核文件系统互动。它可允许多台计算机(节点)同时分享集群中的同一存储设备。GFS2 文件系统一般采用自我调节,但也可以手动调整。本小节列出了尝试手动调节性能时应注意的事项。
红帽企业版 Linux 6.4 引进了 GFS2 中改进文件系统碎片管理的方法。在红帽企业版 Linux 6.3 或者之前的版本中生成文件时,多个进程同时写入多个文件很容易造成碎片化。这个碎片化可让系统运行缓慢,特别是在有超大文件的负载时。而使用红帽企业版 Linux 6.4,同时写入的结果是产生较少的文件碎片,并籍此获得更好的性能。
虽然红帽企业版 Linux 中没有用于 GFS2 的碎片清除工具,您可以使用 filefrag 工具,通过文件碎片工具识别它们,将其复制到临时文件中,并重新命名该临时文件以替换原始文件,这样就可以清除碎片。(只要写入是按顺序进行的,这个步骤还可以用于红帽企业版 Linux 6.4 以前的版本。)
因为 GFS2 使用全局锁定机制,可能会需要集群中节点间的通讯,当将您的系统设计成可避免这些节点间文件和目录竞争时即可获得最佳性能。这些可避免竞争的方法为:
- 在可能的情况下使用
fallocate
预分配文件和目录以便优化分配过程并避免锁定资源页。 - 尽量减小多节点间共享的文件系统区域以便尽量减小跨节点缓存失效并提高性能。例如:如果多个节点挂载同一文件系统,但访问不同的子目录,则您可以通过将一个子目录移动到独立的文件系统中而获得更好的性能。
- 选择可选资源组大小和数量。这要依赖传统文件大小以及系统中的可用空间,并可能在多个节点同时尝试使用同一资源组时产生影响。资源组过多可延缓块分配,尽管已定位分配空间,而资源组过少也可在取消分配时造成锁竞争。通常最好是测试多种配置以便确定您负载的最佳方案。
但竞争并不是可影响 GFS2 文件系统性能的唯一问题。其他可提高总体性能的最佳实践为:
- 根据集群节点的预期 I/O 模式和文件系统的性能要求选择存储硬件。
- 在可以减少查询时间的地方使用固态存储。
- 为您的负载创建适当大小的文件系统,并保证该文件系统不会超过容量的 80%。较小的文件系统的备份时间会根据比例缩短,且需要较少时间和内存用于文件系统检查,但如果相对负载过小,则很有可能生成高比例的碎片。
- 为频繁使用元数据的负载设定较大的日志,或者或者记录到日志中的数据正在使用中。虽然这样会使用更多内存,但它可以提高性能,因为在写入前有必要提供更多可用日志空间以便存储数据。
- 请保证 GFS2 节点中的时钟同步以避免联网程序问题。我们建议您使用 NTP(网络时间协议)。
- 除非文件或者目录访问次数对您的程序操作至关重要,请使用
noatime
和nodiratime
挂载选项。注意
红帽强烈推荐您在 GFS2 中使用noatime
选项。 - 如果您需要使用配额,请尝试减少配额同步传送的频率,或者使用模糊配额同步以便防止常规配额文件更新中的性能问题。
注意
模糊配额计算可允许用户和组稍微超过其配额限制。要尽量减少此类问题,GFS2 会在用户或者组接近其配额限制时动态减少同步周期。
有关 GFS2 性能调整各个方面的详情请参考 《全局文件系统 2 指南》,网址为 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/。