2008-09-24 88 views
2

我在相当广泛的区域有几个不同的位置,每个位置都有一个存储公司数据的Linux服务器。这些数据每天都会以不同的方式在每个不同的位置改变。我需要一种方法来保持这些数据在所有这些位置之间保持最新和同步。保持多台Linux服务器同步的最佳方式是什么?

例如:

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

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

+0

这可能是一个太开放的问题,应该属于unix.stackexchange.com。只要提到它,即使我认为它不值得被掠夺。 – lindhe 2015-05-02 22:26:13

回答

2

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

2

如果rsync不是最适合您的解决方案,那么您可以选择Unison。 Unison在Windows下工作,当双方发生变化时(不一定需要按照您的建议选择一台服务器作为主服务器),它有一些功能可供处理。

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

1

我不知道这是多么实际,但一个源代码管理系统可能在这里工作。在某个时间点(也许每个小时?),一个cron作业运行一次提交,并在一夜之间,每台机器运行一次结账。在结账需要运行时,您可能会遇到长时间未完成提交的问题,而且rsync基本上可以做同样的事情。

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

0

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

2

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

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

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

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

0

我必须同意Matt McMinn,尤其是因为它是公司数据,我会使用源代码管理,并且根据更改率更频繁地运行它。

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

2

我这样做(在Debian/Ubuntu的箱)的方式:

  • 使用dpkg --get-selections让你安装的软件包
  • 使用dpkg --set-selections安装从创建
  • 使用源代码控制列表的包解决方案来管理配置文件。我以集中的方式使用git,但颠覆可以很容易地使用。
0

取决于以下 *需要同步多少台服务器/计算机? **如果服务器太多,使用rsync会成为问题 **您可以使用线程并同时或一个接一个地同步到多个服务器。 那么,你是在给定的时间点在后一种情况下,看着在服务器上的源机器或一致的数据高负荷(集群)

  • 需要的文件夹的大小来进行同步以及如何它经常变化

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

    • 如果文件的数量都很大,特别是如果他们是小文件的rsync将再次采取了很多的时间

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

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

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

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

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

相关问题