集群文件系统如何避免可能出现的大量竞争条件?
我正在尝试掌握如何在主-主架构中使用集群文件系统。我特别考虑的是 GlusterFS,因此欢迎提供其实现细节,但我希望得到一个一般性的答案。
答案1
GlusterFS 进程由堆叠的模块化功能单元(称为“转换器”)组成。锁定转换器作为服务器堆栈的一部分加载,可能出现竞争的操作由该转换器同步。
默认情况下,gluster CLI 会生成包含“features/locks”转换器的配置,作为 GlusterFS 服务器堆栈的一部分。
答案2
不同的集群文件系统以不同的方式处理此问题。从根本上讲,这个问题就像在并发访问场景中处理任何其他共享数据结构(例如线程安全结构)。与存储在 RAM 中的数据相比,磁盘访问的数据延迟和访问速度要慢几个数量级(带宽更少)。因此,用于处理集群文件系统中的并发性的算法将进行适当调整。
像 VERTIAS 集群文件系统这样的“传统”集群文件系统使用锁管理器和主/从进程(带有隔离机制)来处理保持磁盘元数据的一致性。
就我个人而言,我没有使用过 GlusterFS,也不能说我对该架构足够熟悉,因此无法做出明智的评论。从我阅读的内容来看,GlusterFS 似乎更像是一种奇特的机制,用于将各个存储节点上的底层非集群文件系统“粘合在一起”,而不是“传统”集群文件系统(其中多个客户端直接访问相同的块设备)。您可以在此处获得一些很好的详细信息(尽管我不知道这些详细信息在最新版本中是否保持最新):http://www.raidinc.com/pdf/whitepapers/wp-gfs-architecture.pdf