2

我在相当广阔的区域内有几个不同的位置,每个位置都有一个存储公司数据的 Linux 服务器。这些数据每天在每个不同的位置以不同的方式变化。我需要一种方法来使这些数据保持最新并在所有这些位置之间同步。

例如:

在一个位置,有人将一组图像放在他们的本地服务器上。在另一个位置,其他人将一组文档放在他们的本地服务器上。第三个位置将少量图像和文档添加到他们的服务器。在另外两个位置,根本没有对其本地服务器进行任何更改。到第二天早上,我需要所有五个地点的服务器来保存所有这些图像和文档。

我的第一直觉是使用 rsync 和 cron 作业在夜间(凌晨 1 点到 6 点左右)进行同步,此时我们所在位置的带宽都没有被使用。在我看来,最好让一台服务器成为“中央”服务器,首先从其他服务器中提取所有文件。然后它将这些更改推送回每个远程服务器?还是有另一种更好的方法来执行此功能?

4

8 回答 8

3

我这样做的方式(在 Debian/Ubuntu 盒子上):

  • 用于dpkg --get-selections获取已安装的软件包
  • 用于dpkg --set-selections从创建的列表中安装这些包
  • 使用源代码控制解决方案来管理配置文件。我以集中方式使用 git,但 subversion 也可以很容易地使用。
于 2008-09-25T00:28:57.027 回答
2

如果 rsync 对您来说不是最佳解决方案,另一种选择是Unison。Unison 在 Windows 下工作,当双方都发生变化时,它具有一些处理功能(不一定需要选择一台服务器作为主要服务器,正如您所建议的那样)。

根据任务的复杂程度,任何一个都可能有效。

于 2008-09-24T21:16:40.623 回答
2

AFAIK,rsync 是您的最佳选择,它支持部分文件更新以及各种其他功能。一旦设置它是非常可靠的。您甚至可以使用带时间戳的日志文件设置 cron,以跟踪每次运行中更新的内容。

于 2008-09-24T21:12:38.777 回答
2

您可以(理论上)做的一件事是使用 Python 或其他东西和 inotify 内核功能(pyinotify例如,通过包)创建一个脚本。

您可以运行脚本,该脚本注册以接收某些树上的事件。然后,您的脚本可以监视目录,然后随着每个服务器的变化而更新所有其他服务器。

例如,如果有人上传spreadsheet.doc到服务器,脚本会立即看到;如果文档在 5 分钟内没有被修改或删除,脚本可以将其复制到其他服务器(例如通过 rsync)

这样的系统理论上可以实现一种从一台机器到另一台机器的有限“文件系统复制”。有点好主意,但您可能必须自己编写代码。

于 2008-09-25T00:10:34.093 回答
1

我不知道这有多实用,但源代码控制系统可能在这里工作。在白天的某个时间点(也许每个小时?),一个 cron 作业运行一次提交,而一夜之间,每台机器运行一次结帐。当需要运行结帐时,您可能会遇到长时间提交未完成的问题,并且基本上可以通过 rsync 完成相同的事情。

我想我在想的是中央服务器会使您的同步操作更容易 - 冲突可以在中央处理一次,然后推送到其他机器。

于 2008-09-24T21:16:42.637 回答
0

rsync 将是您的最佳选择。但是您需要仔细考虑如何解决不同站点上相同数据更新之间的冲突。如果站点 1 更新了“customers.doc”并且站点 2 对同一文件进行了不同的更新,您将如何解决它?

于 2008-09-25T00:03:46.557 回答
0

我必须同意 Matt McMinn 的观点,特别是因为它是公司数据,所以我会使用源代码控制,并且根据变化的速度,更频繁地运行它。

我认为中央票据交换所是个好主意。

于 2008-09-25T00:15:14.627 回答
0

取决于以下 * 需要同步多少台服务器/计算机?** 如果使用 rsync 的服务器太多,就会出现问题 ** 您要么使用线程并同时同步到多个服务器,要么一个接一个地同步到多个服务器。因此,在后一种情况下,您正在查看源机器上的高负载或服务器(集群中)在给定时间点上的不一致数据

  • 需要同步的文件夹大小以及更改频率

    • 如果数据很大,那么 rsync 将需要时间。
  • 文件数

    • 如果文件数量很大,特别是如果它们是小文件,rsync 将再次花费大量时间

所以一切都取决于场景是否使用 rsync , NFS , 版本控制

  • 如果服务器较少且数据量很小,那么每小时运行一次 rysnc 是有意义的。如果数据偶尔发生变化,您还可以将内容打包到 RPM 中

有了所提供的信息,IMO 版本控制将最适合您。

如果两个人上传同名的不同文件,rsync/scp 可能会出现问题。多个位置的 NFS 需要完美架构

为什么不拥有一个/多个存储库,而每个存储库都只是提交到这些存储库。您需要做的就是保持存储库同步。如果数据量很大并且更新频繁,那么您的存储库服务器将需要大量的 RAM 和良好的 I/O 子系统

于 2013-02-22T07:59:04.370 回答