我在相当广泛的区域有几个不同的位置,每个位置都有一个存储公司数据的Linux服务器。这些数据每天在不同的位置以不同的方式变化。我需要一种方法来使这些数据保持最新并在所有这些位置之间同步。
例如:
在某个位置,有人将一组图像放在本地服务器上。在另一个位置,其他人在其本地服务器上放置一组文档。第三个位置将少量图像和文档添加到其服务器。在其他两个位置,根本不会对其本地服务器进行任何更改。到第二天早上,我需要所有五个位置的服务器都拥有所有这些图像和文档。
我的第一直觉是使用rsync和一个cron作业来进行夜间同步(凌晨1点到早上6点左右),这时我们所在位置的所有带宽都没有被使用。在我看来,最好让一台服务器成为“中央”服务器,首先从其他服务器中提取所有文件。然后它会将这些更改推回到每个远程服务器?或者是否有另一种更好的方法来执行此功能?
答案 0 :(得分:3)
我的方式(在Debian / Ubuntu盒子上):
dpkg --get-selections
获取已安装的软件包dpkg --set-selections
从创建的列表中安装这些包答案 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,NFS,版本控制
的场景通过提供的信息,IMO版本控制将最适合您。
如果两个人上传具有相同名称的不同文件,则Rsync / scp可能会出现问题。 多个位置的NFS需要完美地构建
为什么不拥有单个/多个存储库,每个存储库只提交到这些存储库。 您需要做的就是保持存储库同步。 如果数据很大并且更新频繁,那么您的存储库服务器将需要大量的RAM和良好的I / O子系统