我想知道是否有可能镜像两台服务器,就像你可以上传文件到一台服务器,他们会推到另一台服务器等。我更加好奇的文件镜像,它不必镜像包pipe理和设置(但那也太酷了!)
这很大程度上取决于手头的工作。
为什么你需要文件镜像。 你是否想要更新像网站或内容存储库的地方,通常可以定期更新。 或者你需要实时同步数据?
对于定期对文件进行asynchronous镜像,通常有足够的上传所有数据的临时区域。 并从你的地方分发到服务器。 在你的情况下 – 用两台服务器 – 你可以在srv1上创build一些临时文件共享,以便传输数据(通过FTP,NFS,DAV,SFTP等),然后使用cronjob rsync将文件传输到“live”目录srv1和srv2。 在这种情况下使用rsync最简单的方法是生成一个ssh密钥对,您将使用它来进行数据传输,并在群集中的所有服务器上进行授权。
例:
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/ =====
这应该给你一个基本的想法。 当然,你会想在一些脚本中包装rsync调用,并实现一个适当的locking,以防止同步时间超过5分钟等两次运行。此外,不言而喻,暂存区不是强制性的。 你也可以直接同步srv1:production到srv2:production。 只有srv2可能会显示比srv1早5分钟的数据。 这可能是一个问题,取决于你如何平衡两者之间。
另一种asynchronous分发文件的方法是将它们打包为rpm或放在你的case deb文件中。 把这些放在一个中央仓库,让他们安装/更新通过类似cfengine,猴子或一些基于diy消息总线的解决scheme。 这对已部署的数据进行版本控制具有很好的副作用,但仅适用于您自己生成和部署的较小数据量(如自己的软件版本)。 你不希望分发TB数据,也不适合镜像高频变化的内容,就像每隔一分钟左右一样。
如果您需要近乎实时地复制数据,但不一定要同步,而不是每隔一段时间调用一次cron,则可以使用一些基于inotify的方法,如前面提到的incron调用同步脚本。 另一个可能性是使用Gamin(如果它在内核中也使用inotify)并编写你自己的小同步守护进程。 最后但并非最不重要的一点,如果所有的文件都通过SFTP上传到一台服务器上,你可以检查你的SFTP服务器是否允许你定义在特定事件之后被调用的钩子,比如file upload。 这样你可以告诉你的服务器触发你的同步脚本,每当新的数据上传。
如果您需要实时同步镜像数据,则可能需要集群文件系统。 DRDB已经被命名。 在块级别上进行复制非常好,通常用于高可用的MySQL设置。 你可能也想看看GFS2,OCFS2,Lustre和GlusterFS。 尽pipeLustre和GlusterFS并不适合双服务器安装。
基本上你有三种可能性:
cron + rsync = 镜像目录/文件
根据您的具体使用情况 – 您可以使用与DRBD类似的东西http://www.drbd.org/
如果你正在尝试在这里build立一个备份解决scheme(我亲自做了几乎相同的设置),那就太好了。 有很多不同的threes,你需要备份,其中一个(可以说是最大的是accedental删除 – 任何现场复制系统将只复制删除,并提供不安全。 对于这个每日复制的作品,但是是一个相当薄弱的答案。 试试RSnapshot。
Unison可能会为你工作,但我没有任何个人经验。
使用aproprate标志在两个方向运行Rsync都可以工作,但是如何处理已删除的文件却没有特别的问题,它只是恢复文件,如果你永远不删除像我这样的东西,否则很差。 如果文件被移动,它也会做一些奇怪的事情。
无论你在做什么,如果任何情况都可能出现在文件可以被同时编辑的地方,你就有问题。 唯一的解决办法就是我所知道的唯一的解决办法,甚至可以让人满意。
如果是单向的(我的意思是,总是从一台服务器到另一台服务器,但不能反过来),你可以使用incron 。 这就像cron,但基于文件系统事件。
每次创build或更改文件时,都会触发另一台服务器的scp或rsync。
双向有循环的问题:)。
这取决于你的需求…..我有一个非常“便宜,简单”的群集Web服务器设置。
我只是有一个“文件服务器”(NFS),所有的networking服务器挂载以下目录:
/etc/apache/sites-enabled /etc/apache2/sites-avaliable /var/www
死了简单,工作
clonezilla还可以查看哪些使用rsync