![跨多个 Linux 服务器实时同步数百万个文件和目录](https://linux22.com/image/686679/%E8%B7%A8%E5%A4%9A%E4%B8%AA%20Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%9E%E6%97%B6%E5%90%8C%E6%AD%A5%E6%95%B0%E7%99%BE%E4%B8%87%E4%B8%AA%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95.png)
同步正在运行的生产服务器的大量数据的最佳方法是什么?
我们的服务器有超过 2000 万个文件(10k 的小文件和最大 50MB 的大文件),存储在 100 万个目录中。所有数据的大小约为 5 TB(稳步增加)。
是否可以使用 lsyncd 同步数据,有哪些限制(尤其是 inotify)?lsyncd 需要多少额外空间?负载(CPU 和内存)和实时时间如何?
另一个解决方案是 GlusterFS。是否有可能在生产中使用 GlusterFS 而没有停机时间或停机时间最少?GlusterFS 在 x-attributes 文件中存储了大量魔法数据,存储量比没有 GlusterFS 的系统大约大 15% 到 20%。这似乎是一个巨大的浪费……?负载呢?
并且至少 rsync 和 cronjobs 可以完成这项工作。rsync 只能在从属服务器上运行...因此主服务器上不需要额外的空间,但是 rsync 必须在每次 cron 运行时读取完整的目录树...
答案1
我强烈建议使用类似 ZFS 的文件系统。
ZFS 快照和 ZFS 发送/接收等内置工具允许您对文件系统进行块级快照并将其发送到第二台服务器。
一些第三方工具如萨尼德/合流可以设置文件系统从一个主机到另一个主机的自动管理/修剪和同步。
这是在块设备级别完成的,因此您可以避免 rsync 校验和/库存过程。
答案2
如果您无法更改生产服务器上的文件系统,我会将文件放在另一台服务器上并使用 NFS 挂载它们。如果人工成本低廉,我会使用 Linux 和 ZFS,也许某种家庭 NAS 发行版,甚至家庭 NAS(两者都可能基于 ZFS)一切价格昂贵和你可以找到一个具有专业级冗余的产品,或者如果与可靠性和支持相比,钱不是问题的话,可以找到一个 NetApp 或 IBM Spectrum Scale。
一旦您将文件放置在具有专业级冗余的真正的全功能文件服务器上,您就可以将备份服务器直接指向主 NFS IP(如果配置了故障转移)或者指向备份 NFS 服务器。