保持多个Linux服务器同步的最佳方法是什么?
我在相当大的范围内有几个不同的位置,每个位置都有一个用于存储公司数据的Linux服务器。这些数据每天在每个不同的位置以不同的方式更改。我需要一种方法来使这些数据保持最新状态,并在所有这些位置之间进行同步。
例如:
在一个位置,有人将一组图像放置在其本地服务器上。在另一个位置,其他人将一组文档放在其本地服务器上。第三个位置将少量图像和文档添加到其服务器。在其他两个位置,根本不更改其本地服务器。到第二天早上,我需要所有五个位置的服务器都具有所有这些图像和文档。
我的第一个直觉是使用rsync和cron作业在整个晚上(凌晨1点至凌晨6点左右)进行同步,而此时我们所在位置的带宽均未使用。在我看来,最好将一台服务器作为"中央"服务器,首先从另一台服务器提取所有文件。然后,将这些更改推回每台远程服务器吗?还是有另一种更好的方法来执行此功能?
解决方案
AFAIK,rsync是最佳选择,它支持多种其他功能中的部分文件更新。一旦设置,它是非常可靠的。我们甚至可以使用带有时间戳的日志文件来设置cron,以跟踪每次运行中更新的内容。
如果rsync不是最适合解决方案,则可以选择Unison。 Unison在Windows下工作,并且具有一些功能,可以在双方都有更改时进行处理(不必像我们建议的那样选择一台服务器作为主要服务器)。
根据任务的复杂程度,两者都可能起作用。
我不知道这有多实用,但是源代码控制系统可能在这里起作用。在一天中的某个时间点(可能是每小时?),cron作业会运行一次提交,而在一夜之间,每台计算机都会运行结帐。当需要运行结帐时,我们可能会遇到无法完成长时间提交的问题,并且rsync基本上可以完成相同的事情。
我想我想的是中央服务器可以使同步操作更容易,而冲突只需在中央服务器上处理一次,然后再推送到其他计算机上即可。
rsync将是最佳选择。但是,我们需要仔细考虑如何解决不同站点上对相同数据的更新之间的冲突。如果site-1已更新
'customers.doc'和site-2对同一文件的更新不同,我们将如何解决它?
我们可以做(理论上)的一件事是使用Python或者其他东西以及inotify内核功能(例如,通过pyinotify
软件包)创建脚本。
我们可以运行脚本,该脚本进行注册以接收某些树上的事件。然后,脚本可以监视目录,然后在每台服务器发生更改时更新所有其他服务器。
例如,如果有人将" spreadsheet.doc"上传到服务器,则脚本会立即看到该文件。如果文档在5分钟内没有被修改或者删除,则脚本可以将其复制到其他服务器(例如,通过rsync)
这样的系统理论上可以实现从一台机器到另一台机器的有限的"文件系统复制"。有点好主意,但是我们可能必须自己编写代码。
我必须同意马特·麦克明(Matt McMinn)的观点,尤其是因为它是公司数据,因此我将使用源代码控制,并根据更改的速度更频繁地运行它。
我认为中央票据交换所是个好主意。
我的操作方式(在Debian / Ubuntu机器上):
- 使用
dpkg --get-selections
来获取已安装的软件包 - 使用
dpkg --set-selections
从创建的列表中安装那些软件包 - 使用源代码管理解决方案来管理配置文件。我以集中方式使用git,但可以轻松使用subversion。