我有两台服务器,分别位于荷兰和法国的数据中心。两台服务器都运行 Debian Wheezy。我需要在它们之间共享 /home,并保持良好的性能。服务器上有 300 多个用户,其中大约 30 个应该能够在给定时间在给定服务器上拥有活动进程,每个进程每秒读取 50 kbit 和写入 20 kbit,读取的短峰值约为 2000 kbit/s。使用本地存储上的 iotop 进行测量。我有很多小文件,总共约 500000 个,需要尽可能低的延迟。服务器之间的 Ping 为 17 毫秒,使用 scp 和 wget 时连接能够达到约 20-30 MB/s。似乎应该有足够的带宽可供它工作,但是...
我目前所尝试过的:sshfs:似乎它的性能比 nfs 更好,但它随机将文件的权限更改为 root,从而导致应用程序崩溃。
nfs:太慢了,尝试了 noatime 和许多其他选项,但它仍然运行缓慢,即使只有少数进程处于活动状态。
drbd:经过 5 个小时的无谓工作,我才意识到自己无法在两个系统上实际挂载文件系统 :-(
glusterfs:拥有所有数据的本地副本确实听起来很有希望,但随机文件访问确实很慢,运行一段时间后,它变得难以置信的慢,几乎挂起。noatime 没有帮助。
nfs 再次:仍然迟缓。
对着键盘哭泣:一点进步都没有。
下一步该尝试什么?上周,每次失败的尝试都花费了一个晚上甚至更长时间,我真的很希望下一个方法可行。是的,文件系统在两台服务器之间共享至关重要。
感谢您对这个问题的任何新想法。
答案1
对此有一些可能的解决方案:
您可以选择复制块存储,如 DRBD(或如上所述的 MARS),但您需要在块存储之上设置集群文件系统。此类文件系统可以是 GFS2 或 OCFS2,据我所知,这两种文件系统在 Debian 内核中都可用。DRBD 可以处理主/主,您可以同时将其安装在两台服务器上。但是,如果您使用标准文件系统执行此操作,则一台服务器不知道另一台服务器,您将在几秒钟内破坏您的文件系统。顶部的集群文件系统将处理通信和锁定,以便两个节点都可以写入同一个块。
对 /home 使用分布式文件系统。您可以在以下位置找到此类文件系统的列表:http://en.wikipedia.org/wiki/Comparison_of_distributed_file_systems。但要小心谨慎地选择。它们都不能发挥神奇的作用,而且都有缺点。Gluster 就是这样一种文件系统。对于某些系统,您可能需要的不仅仅是两个节点。
如果不需要实时复制,并且近乎实时的文件同步就足够了,那么请查看 BitTorrent Sync(http://www.getsync.com/)、Dropbox 或其他替代方案。每台服务器都有自己的 /home,但更改会根据文件复制到另一台服务器。