我有一个每小时执行一次的 cron 作业,将大约 40GB 的数据从源文件夹复制到新文件夹中,并在末尾附加小时数。
完成后,该作业会删除超过 24 小时的所有数据。这些数据在工作时间内经常更改,并且位于 Samba 文件共享中。文件夹结构如下:
\服务器\版本.1
\服务器\版本.2
\服务器\版本.3
...
\服务器\版本.24
由于这是一项按小时计算的工作,因此每个新文件夹的内容与上一个文件夹相比通常不会有太大变化。
现在你可能会认为我是个白痴,竟然会想出这个主意。事实是,我刚刚才发现。它实际上已经使用了很多年,而且非常简单,任何人都可以删除整个 40GB 共享(想象一下对话框启动...删除成千上万个文件),而且通过将最新副本移回源来恢复实际上比删除要快。
杰出的!
现在,最重要的是,我需要通过 WAN 链路将这 960GB 的“大部分相似”数据有效地复制到远程服务器,并且复制尽可能接近实时 - 考虑热备用、灾难恢复等。
我首先想到的是 rsync。
彻底失败。
Rsync 发现它删除了 24 小时前的文件夹,并添加了一个包含 30GB 数据的新文件夹以进行同步!我还查看了 rdiff-backup 和 unison,它们似乎都使用类似的算法,并且没有保留足够的元数据来智能地执行此操作。
我能找到的最好的“开箱即用”的东西是使用“远程差分压缩”的 Windows Server“分布式文件系统复制”——在阅读了关于其工作原理的背景信息后,它实际上看起来正是我需要的。
问题:两台服务器都运行 Linux。哎呀!我正在研究的一种解决方法是,假设现在是凌晨 5 点,cron 作业已完成:
- 新的 Version.5 文件夹到达本地服务器
- SSH 到远程服务器并将 Version.4 复制到 Version.5
- 在本地服务器上运行 rsync,将更改推送到远程服务器。Rsync 最终知道在 Version.4 和 Version.5 之间进行差异复制
有没有更智能的方式可以尽可能接近实时地复制 Samba 共享?
有什么东西可以在 Linux 上执行“远程差分压缩”吗?
答案1
你应该认真考虑DRBD。DRBD 是一款基于 TCP-IP 的 RAID1 软件。它会实时地通过任何链路复制块设备。每次修改 HD 块时,它都会复制该块。
它与 FS 无关,因此您可以将任何 FS 放在其上。它还将与心跳协同工作,这样您就可以在原始节点死亡后立即启动热备用。