我的任务是创建两台 CentOS 7 服务器,其中不仅要复制数据库,还要复制文件。现在我的问题是,如果不是一百万个大小从几 KB 到 ~ 1 GB 的文件,那么可能会有几十万个文件。
我读过关于
- 铭文
- lysncd
- git-附件
- ChironFS
现在,如果您一直在使用它或目前正在使用它,我想询问您对其中任何一种的体验。关于复制和删除的文件更改的性能如何?我非常害怕使用任何 rsync,因为我的经验是它对于很多小文件不是很快,因此我不能真正将它用于实时文件复制。还是我错了?请证明我错了。:)
或者也许我需要第三台和第四台服务器作为文件服务器?如果是,那么问题仍然存在:如何在两台服务器之间实时复制文件?
干杯!
如果您的服务器在同一个 LAN 上,那么集群文件系统(即:GlusterFS)或共享存储解决方案(即:通过 NFS)应该是更好的选择。
如果您的服务器位于不同的位置,并且只有 WAN 连接,则上述解决方案将无法正常工作。在这种情况下,如果您只需要单向复制(即:从活动服务器到备份服务器),
lsyncd
是一个很好的解决方案。另一种解决方案是csync2
. 最后,另一种可能是使用DRBD + DRBD Proxy
(请注意,它的代理组件是一个商业插件)。最后,如果您的服务器只有 WAN 连接并且您需要双向复制(即:两台服务器同时处于活动状态),则基本上不存在灵丹妙药。我将列出一些可能性,但我远不推荐类似的设置:
unison
使用它的实时插件psync
,我正是为解决类似问题而写的(但请注意,它有自己的特质,我不提供支持)syncthing
使用它的实时插件(但它有很大的限制,即它不保留 ACL 也不保留文件的所有者/组)我使用 ZFS 文件系统并使用 zfs 发送/接收框架来利用其块级复制。
我使用名为syncoid的便捷脚本以 15 秒到每小时或每天的间隔执行文件系统的定期同步,具体取决于要求。
对于您所说的数据集,块级复制将比 rsync 更清洁、更准确。
根据我的经验,分布式文件系统为应用程序提供了简单的复制机制。但是,它们的性能很差,尤其是当目录变得非常大且包含太多小文件时。这是意料之中的,因为他们需要处理来自多个位置/机器的锁定/共享访问。
在某些情况下,类似 Rsync 的方式提供了可接受的复制,但有一些延迟。它们在读取/写入复制文件夹时不会影响应用程序性能。
我认为更好的解决方案是提供可从一台服务器访问的共享存储(如果负担得起)。当第一台服务器宕机时,另一台备用服务器已准备好挂载共享文件夹。无需在服务器之间复制任何数据。
为这些想法喝彩。我已经检查并测试了它们,我坚持使用 lsyncd。
原因: