问题概述。我有一个使用 SVN 的网站,并在 2 个不同的服务器上签出以实现负载平衡。这是一个 drupal 网站,除了资产和文件目录之外的所有内容都在服务器上本地签出。
现在,在更新时,我必须手动更新两个本地签出。(svn up)这很容易出错,如果我们决定在轮换中添加另一个网络服务器,将提供更多的开销。
简而言之:我必须找到一种方法来自动保持 2 个本地结帐同步,这样我只需要在 1 台服务器上更新,所有内容都会同步。
我尝试过的事情:
使用 find 命令对服务器 1 上的目录和通过 SSH 在服务器 2 上的目录(不包括 .svn 目录)进行 md5 求和,然后使用 diff 的结果作为参数在服务器 2 上执行 svn ups。它总是给我相同的不同文件。
ssh $TARGET "cd "$SVN_TARGET" && 查找 . -name .svn -prune -o -type f -print0 | xargs -0 md5sum" >> /tmp/server2.sums
cd $SVN_SOURCE && find . -name .svn -prune -o -type f -print0 | xargs -0 md5sum >> /tmp/server1.sums
diff /tmp/server1.sums /tmp/server2.sums | cut -d"." -f2 | xargs -i ssh $TARGET "su www-data -c'svn up /dir/to/svn/repo/{} --username \"******\" --password \"******\"'"
使用 svn info,然后使用 svn diff 和主要修订版本来获取所有更改的文件。问题是,即使它是最新的,本地修订版本 ID 也不等于 SVN 服务器上的主要修订版本 ID。
任何帮助都非常感谢,并且对冗长的文字表示歉意:)
答案1
那么,每五分钟在每个主机上设置一个 crontab 条目来运行一个脚本怎么样?该脚本可以更新 svn 存储库并执行任何必要的后期处理……
或者您可以使用 Subversion 中的提交后钩子来触发对两个客户端的部署……
答案2
如何在其中一个主机上的 crontab 中运行控制作业,该作业执行 svn info 来确定修订版本,然后对该修订版本执行 svn update,并同时在另一台主机上运行 ssh svn update 到同一修订版本?
答案3
如果你在 Linux 操作系统上运行,你可以使用DRBD在块级别同步两个 SVN 服务器之间的数据,而不必担心 Subversion。