一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何采用svnsync进行双向同步搭建异地容灾SVN版本库

时间:2026-06-20 10:08:46 编辑:袖梨 来源:一聚教程网

svnsync仅支持单向主从同步,不可用于双向场景;其正确用法是构建只读镜像库,通过初始化、定时增量同步及手动接管实现异地容灾。

svnsync 本身不支持真正的双向同步,它是一个单向、只读复制工具,设计初衷是构建主从式备份(master-slave),即从源库(source)向目标库(destination)单向推送变更。强行“双向”会引发版本历史冲突、修订版本号(revision)错乱、svn:sync-* 属性污染等问题,Subversion 官方明确不推荐也不保障双向场景。

但若目标是异地容灾(即主站点故障时快速切换至备用站点,并保持数据尽可能一致),可采用 “主备切换 + 单向同步 + 手动接管” 的可靠方案。以下是实用、可落地的搭建逻辑:

一、明确主备角色与网络可达性

选一台稳定服务器作为主库(Production),另一台异地机房机器作为备库(DR Site)。两者需满足:

  • 主库能通过网络访问备库(HTTP/HTTPS 或 svn:// 协议);
  • 备库能反向访问主库(仅用于故障后手动回切或验证,非实时同步所需);
  • 主备库 SVN 版本建议一致(≥1.4),避免属性兼容问题。

二、在备库初始化只读镜像

备库必须是全新空库,且配置专用钩子允许 svnsync 写入元数据:

  • 创建空库:svnadmin create /path/to/backup_repo
  • 进入 hooks/ 目录,将 pre-revprop-change.tmpl 复制为 pre-revprop-change(Linux)或 pre-revprop-change.bat(Windows);
  • 编辑该文件,确保最后一行是 exit 0(Linux)或 exit /b 0(Windows),禁止任何条件判断;
  • 赋予执行权限:chmod a+x pre-revprop-change(Linux)或确认 bat 文件可被 svn 进程调用(Windows)。

三、建立单向同步链路

所有操作在备库所在机器上执行:

  • 初始化同步关系:
    svnsync init http://dr-server:8080/svn/backup_repo svn://master-server/svn/main_repo
    (会提示输入主库读账号、备库写账号;建议使用独立低权限账号,如 sync_reader / sync_writer
  • 首次全量同步:
    svnsync sync http://dr-server:8080/svn/backup_repo
  • 后续增量同步(可定时运行):
    svnsync sync --non-interactive http://dr-server:8080/svn/backup_repo --username sync_writer --password xxx

四、实现容灾切换能力

备库默认只读(因 svnsync 不开放提交入口),切换前需人工干预**:

  • 停掉主库服务,确认无新提交;
  • 在备库 hooks 中临时移除或重命名 pre-revprop-change(防止意外属性修改干扰);
  • 修改备库 conf/authzconf/passwd,启用正常开发用户写权限;
  • 更新客户端工作副本 URL 指向备库地址(svn switch --relocate 或重新 checkout);
  • (可选)用 svnadmin dump + load 将主库最后若干 revision 补充到备库,确保零丢失。

五、避免常见陷阱

以下错误几乎都源于权限或钩子配置不当:

  • “DAV request failed; pre-revprop-change hook failed” → 检查备库 pre-revprop-change 是否存在、是否可执行、是否返回 0;
  • 同步卡在 rev 0 或报 auth 失败 → 确认主库提供读权限、备库提供写权限,且账号密码未被 svn cache 缓存干扰(加 --no-auth-cache);
  • 备库无法提交 → 正常现象,svnsync 镜像库默认禁写;切换时才开放,勿提前开启;
  • 时间不同步导致 propset 失败 → 主备服务器系统时间误差应

不复杂但容易忽略:容灾价值不在“自动双向”,而在“可控、可验证、可回退”的单向镜像 + 明确切换流程。真正可靠的异地容灾,靠的是定期演练切换,而不是依赖工具自动兜底。

热门栏目