保持多台Linux服务器同步的最佳方法是什么?

时间:2008-09-24 21:02:07

标签: linux rsync

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

例如:

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

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

8 个答案:

答案 0 :(得分:3)

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

  • 使用dpkg --get-selections获取已安装的软件包
  • 使用dpkg --set-selections从创建的列表中安装这些包
  • 使用源代码管理解决方案来管理配置文件。我以集中的方式使用git,但颠覆也可以轻松使用。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

如果rsync不是最适合您的解决方案,则Unison。 Unison在Windows下工作,它有一些功能可以在双方都有变化时进行处理(不一定需要选择一个服务器作为主服务器,如你所建议的那样)。

根据任务的复杂程度,可能有效。

答案 3 :(得分:2)

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

您可以运行脚本,该脚本将注册以接收特定树上的事件。然后,您的脚本可以查看目录,然后在每个服务器上发生更改时更新所有其他服务器。

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

这样的系统理论上可以从一台机器到另一台机器实现一种有限的“文件系统复制”。这是一个很好的想法,但你可能需要自己编写代码。

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

rsync将是您的最佳选择。但您需要仔细考虑如何解决不同站点上相同数据更新之间的冲突。如果site-1已更新 'customers.doc'和site-2对同一个文件有不同的更新,你打算怎么解决它?

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

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

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

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

所有都取决于是否使用rsync,NFS,版本控制

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

通过提供的信息,IMO版本控制将最适合您。

如果两个人上传具有相同名称的不同文件,则Rsync / scp可能会出现问题。 多个位置的NFS需要完美地构建

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