使用 rsync 在两台服务器之间同步目录(或其他同步目录的方法)

使用 rsync 在两台服务器之间同步目录(或其他同步目录的方法)

我有两台虚拟机,它们在这个目录中应该有相同的文件:

/var/www/owncloud/data/admin/files/

我最初认为可以使用 rsync 和 cron 每两分钟复制一次文件:

在 VM1 上:

*/2 * * * * rsync -auz --delete-after /var/www/owncloud/data/admin/files root@VM2:/var/www/owncloud/data/admin

在 VM2 上

*/2 * * * * rsync -auz --delete-after /var/www/owncloud/data/admin/files root@VM1:/var/www/owncloud/data/admin

我遇到的问题是,如果我将文件上传到 VM1,两分钟后,VM2 上的 cronjob 会覆盖 VM1 上的目录,并删除该文件。

我之所以从 VM1->VM2 和 VM2->VM1 进行复制,是因为我有一个非常基本的故障转移设置。如果 VM1 发生故障,并且文件从 VM2 添加/删除,我希望这些更改在 VM1 上重复;如果 VM1 启动,并且文件被添加/删除,我希望这些更改在 VM2 上重复。

可以使用 rsync 来实现吗?我的命令错了吗?我可以使用其他替代方法吗?

答案1

看一下 unison,它允许双向同步:http://www.cis.upenn.edu/~bcpierce/unison/

答案2

您可以阻止 rsync 从您的目标中删除任何文件。我不确定哪个标志可以做到这一点。也许
man rsync
应该可以帮助您?

答案3

如果您尝试使用 rsync - 最好的方法是避免使用选项“--delete-after”。但是如果您这样做,可能会出现文件在一个或另一个节点上重新创建的情况。在进行一些双向同步练习后(通过csync2和这个文档对 lsyncd 配置进行一些修改后),我发现最好的选择是一些共享 FS(用于测试的 NFS、GFS 等)

相关内容