![文件服务器复制选项](https://linux22.com/image/556152/%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%A4%8D%E5%88%B6%E9%80%89%E9%A1%B9.png)
我正在尝试在基于 centos 的 linux 服务器上的不同地理位置设置文件服务器。目前我计划现在拥有两台这样的服务器,并将在不久的将来将其扩展到其他地区。当在任何位置添加文件时,文件服务器应该镜像自身(我还没有制定删除策略,但只是认为应该允许在从主服务器删除文件时删除文件)。目前我正在考虑使用 apache“目录列表”和 rsync 来完成这项工作。我只是想知道是否有更好的工具可以完成上述工作。此外,我想听听关于更好的目录列表脚本(基于 php/python)的一些建议。如果这个工具有一些搜索功能、上传文件的选项等就好了(我要求太多了吗?;))。
注意:当前服务器还托管了 subversion 复制。我还考虑过将所有文件提交到 subversion 并在辅助位置将其签出。但我觉得空间会是一个限制,因为我会不断删除一些不需要的文件,这样我就可以控制磁盘空间,但这是不可能的,因为 svn 的版本历史记录将保存数据
提前致谢。
答案1
在一般情况下,这是一个难以解决的问题。地理分布、多主复制文件系统是一个你可以获得博士学位的主题,即使你不解决整个问题,因此 PHP 或 Python 的一小段代码不太可能起到很大作用。
如果您只处理文件添加(不处理修改)并且不存在文件名冲突的可能性,那么问题就会变得容易得多,您只需使用一个小型 shell 脚本即可。但请注意,这不是一种常见情况——您现在可能认为这是常见的情况,但我敢打赌用户的想法会有所不同。
我的建议:找一个了解这类事情的人,给他们一些钱,让他们进行彻底的需求分析,并提出解决方案。
答案2
如果“文件服务器”意味着用户通过 Samba 或 NFS 之类的东西将驱动器映射到此服务器,那么这就是 Womble 描述的非常困难的问题。我见过一些系统接近这一点,但它们不涉及挂载卷;它们在复制方案中涉及的每个目录树上使用特定的客户端,并使用一些复杂的冲突检测算法来确保不会发生冲突。而像 Access 数据库这样的多打开文件在这种情况下根本无法正常工作。
如果“文件服务器”指的是动态网站的静态文件服务器,那就简单多了。DRBD 和 Rsync 就是为这种工作负载而设计的。不过,你不得不做大量的手动操作,这表明可能还有其他事情发生。
答案3
GlusterFS 对于 WAN 来说不是一个好的解决方案。
我只能推荐 DRBD(需要购买 DRBD 代理),或者查看 csync2。
我相信您可以使用类似 inotify 的东西来触发 csync2 或使用 lsyncd。
高血压
布伦特