srv1:/data/staging/ <= is where you upload your data
srv1:/data/production/ <= is where your servers get their production data from
srv2:/data/production/
srv1$ cat /etc/cron.d/syncdata.cron
=====
*/5 * * * * syncuser rsync -a --delete /data/staging/ /data/production/
*/5 * * * * syncuser rsync -az --delete -e ssh /data/staging/ srv2:/data/production/
=====
这在很大程度上取决于手头的工作。
为什么需要文件镜像。您是否要更新网站或内容存储库之类的内容,通常可以定期更新。还是您需要实时同步数据?
对于文件的定期异步镜像,通常有一个将所有数据上传到的暂存区就足够了。并从您将其分发到服务器的位置。在您的情况下 - 使用两台服务器 - 您可以在 srv1 上创建一些暂存文件共享到您将数据传输到的位置(通过 FTP、NFS、DAV、SFTP 等),然后让 cronjob 将文件同步到“实时”目录srv1 和 srv2。在这种情况下使用 rsync 的最简单方法是生成一个 ssh 密钥对,您将使用该密钥对进行数据传输,并且在集群中的所有服务器上都已授权该密钥对。
例子:
这应该给你一个基本的想法。当然,您可能希望将 rsync 调用包装在某些脚本中并实施适当的锁定,以便在同步时间超过 5 分钟等情况下它不会运行两次。此外,暂存区不是强制性的,这是不言而喻的。您不妨将 srv1:production 直接同步到 srv2:production。仅 srv2 可能会显示比 srv1 早 5 分钟的数据。这可能是一个问题,这取决于您如何在两者之间取得平衡。
异步分发文件的另一种方法是将它们打包为 rpm 或在您的情况下为 deb 文件。将它们放在一个中央存储库中,并让它们通过 cfengine、monkey 或一些基于 diy 消息总线的解决方案等方式安装/更新。这具有对已部署数据进行版本控制的良好副作用,但仅适用于您自己生成和部署的少量数据(例如您自己的软件的版本)。你不想用它来分发 TB 的数据,而且它也不适合镜像高频变化的内容,比如每隔一分钟左右。
如果您需要近乎实时地复制数据但不一定是同步的,而不是经常调用 cron,您可以使用一些基于 inotify 的方法,例如已经提到的 incron 来调用您的同步脚本。另一种可能性是使用 Gamin(如果存在于内核中,它也使用 inotify)并编写自己的小同步守护程序。最后但同样重要的是,如果所有文件都通过例如 SFTP 上传到一台服务器,您可能会检查您的 SFTP 服务器是否允许您定义在某些事件(如文件上传)后调用的挂钩。这样你就可以告诉你的服务器在上传新数据时触发你的同步脚本。
如果您需要数据的实时同步镜像,则可能需要使用集群文件系统。DRDB 已经被命名。它非常适合块级别的复制,通常用于高可用性 MySQL 设置。您可能还想看看 GFS2、OCFS2、Lustre 和 GlusterFS。尽管 Lustre 和 GlusterFS 并不真正适合两个服务器设置。
基本上你有3种可能性:
cron + rsync =镜像目录/文件
根据您的具体用例 - 您可以使用类似于 DRBD http://www.drbd.org/的东西
如果您尝试在这里构建备份解决方案(我个人在几乎相同的设置中完成),请小心。您需要备份许多不同的东西,其中一个(可以说是最大的)是附带删除 - 任何实时复制系统都只会复制删除,并且不提供安全性。对于这种日常复制工作,但这是一个非常薄弱的答案。试试 RSnapshot。
Unison 可能很适合你,但我没有个人经验。
使用适当的标志在两个方向上运行 Rsync 可以工作,但它有一个相当棘手的问题,即如何处理已删除的文件,没有特殊的处理,它只是恢复文件,如果你从不删除像我这样的东西,这很好,但有点否则很差。如果移动文件,它也会做一些奇怪的事情。
无论您在做什么,如果出现任何可以在两端同时编辑文件的情况,那么您就有问题了。unison 是我所知道的唯一可以处理这个甚至接近令人满意的解决方案。
如果它是单向的(我的意思是,总是从一台服务器到另一台服务器,但不是相反),你可以使用
incron
. 它类似于 cron,但基于文件系统事件。每次创建或更改文件时,它都会触发 scp 或 rsync 到另一台服务器。
双向存在循环问题:)。
这取决于您的需求.....我为集群网络服务器设置了一个非常“便宜且简单”的设置。
我只有一个“文件服务器”(NFS),所有网络服务器都安装以下目录:
死简单和工作
clonezilla 还可以查看哪些使用 rsync