我倾向于建议与数据无关的复制,例如drbd。大量的文件将导致运行在比“块存储”更高的级别上的所有文件都花费大量时间在树上行走-正如您使用rsync或创建inotify监视表所发现的那样。
我个人故事的简短版本支持这一点:我没有使用过Ceph,但基于与Gluster的相似性,我很确定这不是他们的主要市场目标。但是,过去几年来,我一直在尝试使用Gluster实施这种解决方案。大部分时间它都已经启动并运行了,尽管有几个主要的版本更新,但是我没有遇到任何问题。如果您的目标是冗余而不是性能,那么Gluster可能不是一个好的解决方案。尤其是如果您的使用模式有很多stat()调用,则Gluster在复制方面做得不好。这是因为对复制卷的stat调用会到达所有复制节点(实际上是“砖”,但是每个主机可能只有一块砖)。例如,如果您有2向复制,客户端的每个stat()等待两个模块的响应,以确保它正在使用当前数据。然后,如果您使用本机gluster文件系统进行冗余(而不是使用Gluster作为后端,而NFS作为协议和自动挂载程序进行冗余,则仍然存在FUSE开销,并且缺少缓存),由于stat()原因,这仍然很糟糕) 。但是,Gluster对于大型文件确实非常有效,您可以在其中将数据分布在多个服务器上。数据条带化和分发效果很好,因为这确实是它的目的。而且,较新的RAID10类型复制的性能要优于较旧的直接复制卷。但是,根据我猜测的是您的使用模型,我建议您不要使用它。然后,如果您使用本机gluster文件系统进行冗余(而不是使用Gluster作为后端,而NFS作为协议和自动挂载程序进行冗余,则仍然存在FUSE开销,并且缺少缓存),由于stat()原因,这仍然很糟糕) 。但是,Gluster对于大型文件确实非常有效,您可以在其中将数据分布在多个服务器上。数据条带化和分发效果很好,因为这确实是它的目的。而且,较新的RAID10类型复制的性能要优于较旧的直接复制卷。但是,根据我猜测的是您的使用模型,我建议您不要使用它。然后,如果您使用本机gluster文件系统进行冗余(而不是使用Gluster作为后端,而NFS作为协议和自动挂载程序进行冗余,则仍然存在FUSE开销,并且缺少缓存),由于stat()原因,这仍然很糟糕) 。但是,Gluster对于大型文件确实非常有效,您可以在其中将数据分布在多个服务器上。数据条带化和分发效果很好,因为这确实是它的目的。而且,较新的RAID10类型复制的性能要优于较旧的直接复制卷。但是,根据我猜测的是您的使用模型,我建议您不要使用它。由于stat()的原因仍然很糟糕)。但是,Gluster对于大型文件确实非常有效,您可以在其中将数据分布在多个服务器上。数据条带化和分发效果很好,因为这确实是它的目的。而且,较新的RAID10类型复制的性能要优于较旧的直接复制卷。但是,根据我猜测的是您的使用模型,我建议您不要使用它。由于stat()的原因仍然很糟糕)。但是,Gluster对于大型文件确实非常有效,您可以在其中将数据分布在多个服务器上。数据条带化和分发效果很好,因为这确实是它的目的。而且,较新的RAID10类型复制的性能要优于较旧的直接复制卷。但是,根据我猜测的是您的使用模型,我建议您不要使用它。
请记住,您可能必须找到一种在计算机之间进行主选举或实现分布式锁定的方法。共享块设备解决方案需要具有多主机感知能力的文件系统(例如GFS),或者仅需要一个节点以读写方式安装文件系统。通常,文件系统不喜欢在其下方的块设备级别更改数据。这意味着您的客户将需要能够分辨出哪个是主服务器,并在那里直接写请求。事实证明,这可能是一个很大的麻烦。如果可以选择GFS及其所有支持的基础结构,则在多主机模式下的drbd(它们称为“双主”)可以很好地工作。 https://www.drbd.org/en/doc/users-guide-83/s-dual-primary-mode了解更多信息。
无论您选择什么方向,都容易发现,在不给SAN公司带来大量资金的情况下,进行实时操作仍然是一个很大的难题。