大文件树是指大约 20 万个文件,并且一直在增长。但是,在任何给定的小时内更改的文件数量相对较少。
双向我的意思是更改可能发生在任一服务器上并且需要推送到另一台服务器,因此 rsync 似乎不合适。
遥远的意思是服务器都在数据中心,但在地理上彼此相距遥远。目前只有 2 个服务器,但随着时间的推移可能会扩展。
实时地,同步之间有一点延迟是可以的,但是每 1-2 分钟运行一次 cron 似乎是不对的,因为在任何给定的小时内,很小的一部分文件可能会发生变化,更不用说分钟了。
编辑:这是在 VPS 上运行的,所以我可能会限制我可以做的内核级别的事情。此外,VPS 的资源并不丰富,所以我会回避需要大量内存的解决方案(比如 Gluster?)。
完成这项工作的最佳/最“被接受”的方法是什么?这似乎是一个普遍的需求,但我还没有找到一种普遍接受的方法,这令人惊讶。(我正在寻求群众的安全。:)
我遇到过lsyncd在文件系统更改级别触发同步。这看起来很聪明,虽然不是很常见,但我对各种 lsyncd 方法有点困惑。只是将 lsyncd 与 rsync 一起使用,但似乎这对于双向性来说可能很脆弱,因为 rsync 没有内存概念(例如,要知道 A 上已删除的文件是否应在 B 上删除,或者它是否是 B 上的新文件应该复制到 A)。 唇形看起来只是一个lsyncd + rsync的实施,对不对?
然后将 lsyncd 与csync2一起使用,如下所示:https : //icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ ...我倾向于这种方法,但是csync2 有点古怪,但我确实对它进行了成功的测试。我最担心的是我找不到很多社区对此方法的确认。
这里的人似乎很喜欢 Unison,但它似乎不再处于积极开发状态,并且不清楚它是否具有像 lsyncd 这样的自动触发器。
我已经看到Gluster提到过,但也许对我需要的东西来说太过分了?
更新:仅供参考 - 我最终采用了我提到的原始解决方案:lsyncd+csync2。它似乎工作得很好,而且我喜欢让服务器非常松散地连接的架构方法,这样每个服务器都可以无限期地独立运行,而不管它们之间的链接质量如何。
对于我们的 Web 堆栈,我们正在从 Windows Server 迁移到 CentOS。为了促进开发,我们使用 Vagrant 在本地运行 CentOS 虚拟机。我们正在使用 Vagrant 的同步文件夹功能来允许开发人员在他们的主机上使用他们最喜欢的 IDE,但我们发现此设置中缺少一个关键功能:文件系统区分大小写。
VM 内的同步文件夹显然具有主机文件系统的属性,因此如果我是从 Windows 机器甚至 OSX 开发的,文件系统不区分大小写。这是一个大问题,因为我们的生产服务器将是纯 CentOS,其文件系统将区分大小写。
区分大小写是我们想要拥有本地 VM 的主要原因之一。我们想防止“它在我的机器上工作!”
我们考虑或尝试过的一些解决方法:
有没有更好的办法?请注意,我们有使用 Windows、OS X 和 Ubuntu 的开发人员,并且该解决方案需要适用于任何地方。
我有 2 个网络服务器,在此过程中可能不得不添加更多服务器。现在我使用 lsyncd + csync2 使这些服务器保持同步。它在性能方面运行良好,因为所有文件都在两台服务器上(无需网络访问即可在本地打开文件),但在其他情况下效果不佳。
一个例子是,如果我删除了服务器 1 上的一个文件,并立即将一个新文件上传到服务器 1,该文件具有相同的名称。然后该文件将同时从服务器 2 中删除,导致服务器 1 上新上传的文件被删除,因为服务器 2 将删除事件发送到服务器 1 以完成“更新循环”。
我不禁想到必须有更好的方法来保持服务器同步。我一直在研究 GlusterFS,我发现不鼓励将所有文件复制到所有服务器的设置。但是,我在这些服务器上运行了像 Drupal 这样的 CMS 系统。这样的 CMS 系统通常会打开相当多的文件,我担心太多的网络流量无法获取这些文件会减慢请求速度。
考虑将 lsyncd + csync2 替换为设置为将所有文件复制到所有节点的 GlusterFS 是一个想法,还是一个坏主意?
同步正在运行的生产服务器的大量数据的最佳方法是什么?
我们的服务器在 100 万个目录中存储了超过 2000 万个文件(10k 的小文件和高达 50MB 的更大文件)。所有数据的大小约为 5 TB(稳步增加)。
是否可以使用 lsyncd 同步数据以及有哪些限制(尤其是 inotify)?lsyncd 需要多少额外空间?负载(CPU 和内存)和实时时间如何?
另一种解决方案是 GlusterFS。是否可以在没有停机或停机时间最短的生产中使用 GlusterFS?GlusterFS 在 x-attributes 文件中存储了大量魔法数据,存储量比没有 GlusterFS 的系统大 15% 到 20%。好像浪费了很多……?负载呢?
至少 rsync 和 cronjobs 可以完成这项工作。rsync 只会在从属服务器上运行......所以主服务器上不需要额外的空间,但是每次 cron 运行时 rsync 必须读取完整的目录树......
lsyncd ×4
csync2 ×2
glusterfs ×2
linux ×2
cluster ×1
replication ×1
vagrant ×1
virtualbox ×1
web-server ×1