Subversion 镜像写代理的配置注意事项
可以用 Subversion 镜像的方式实现容灾,一般无需配置复杂的写代理(Write-through proxy)
- 在镜像端提供相同授权的访问
- 禁止除了同步管理员帐号之外的写权限,通过 ReadonlySvnMirror 设定即可
- 为了提高读取速度,通过镜像实现各个异地团队拥有相同的本地读取速度
- 但只能在一个版本库写,因此只有有一个团队用本地的速度写版本库 实际上因为提交后还要进行异地版本库同步,因此写本地版本库速度也会有延迟。延迟出现在提交后的远程同步。
- 另外的团队要设置写代理,这样使用读取本地镜像时相同的 URL 实现版本库的写操作
要为 HTTPS 虚拟机打开 SSLProxyEngine
如果要使用 https 协议代理提交,就需要打开 https 协议的 Apache 虚拟主机配置,启用 SSLProxyEngine 设置。SSLEngine on SSLProxyEngine on
Subversion写代理的配置不能使用 SVNParentPath
SVNParentPath 是管理员最喜欢用的指令,只要设定为版本库的根,不必在为新建版本库设置 <Location> 配置小节。 但是对于 Subversion 写代理,必须使用 SVNPath 来版本库的实际部署路径,这是因为:- 写代理需要配置 SVNMasterURI,但是 SVNMasterURI 只能设置一个 URL
- 即 SVNMasterURI 要可 SVNPath 配对使用,而不能和 SVNParentPath 一起使用。
- 因此需要为需要进行写代理的版本库逐一进行设置。
基于 SVNParentPath 的版本库和单独配置的写代理版本库不能在有重叠的 location 中混搭
考虑是否可以使用如下有重叠的Location中进行混搭,既方便本地主版本库的维护,又方便同样域名和路径前缀的写代理版本库?<Location /svn/> DAV svn SVNParentPath /opt/svn/svnroot ... </Location> <Location /svn/myrepos> SVNPath /opt/svn/svnroot/myrepos SVNMasterURI https://svn2.sun.moon.ossxp.com/svn/myrepos ... </Location>不幸的是,上面的配置无法正确运行。虽然 Location 可以重叠,但是重叠的 Location 的配置会传递和覆盖。 上一个的 SVNParentPath 传递的下面不允许配置 SVNParentPath 的写代理的配置中,破坏了写代理的正确运行。反之亦然。
Subversion的镜像版本库要提供两套 URL!
如果镜像版本库只有一个 URL,那么向该 URL 写的时候,代理提交到主版本库。但是主版本库到镜像版本库同步时,又该如何呢? 因此需要提供两个 URL:- 一个可以直接写(通过 ReadonlySvnMirror 钩子可以限制只有特定同步管理员可写)
- 另外一个不能直接写,而是通过代理。即用 SVNMasterURI 指令设置真正要写到的版本库地址