/
2010-09-25-1982.html
62 lines (56 loc) · 3.78 KB
/
2010-09-25-1982.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
---
layout: post
title: "Subversion 镜像写代理的配置注意事项"
---
可以用 Subversion 镜像的方式实现容灾,一般无需配置复杂的写代理(Write-through proxy)
<ul>
<li>在镜像端提供相同授权的访问</li>
<li>禁止除了同步管理员帐号之外的写权限,通过 ReadonlySvnMirror 设定即可</li>
</ul>
但是分布式团队,需要同时在一个版本库工作:
<ul>
<li>为了提高读取速度,通过镜像实现各个异地团队拥有相同的本地读取速度</li>
<li>但只能在一个版本库写,因此只有有一个团队用本地的速度写版本库
实际上因为提交后还要进行异地版本库同步,因此写本地版本库速度也会有延迟。延迟出现在提交后的远程同步。</li>
<li>另外的团队要设置写代理,这样使用读取本地镜像时相同的 URL 实现版本库的写操作</li>
</ul>
但是版本库写代理的设置还是相当复杂,而且需要管理员大量的手工操作才能完成。注意事项有:
<h3>要为 HTTPS 虚拟机打开 SSLProxyEngine</h3>
如果要使用 https 协议代理提交,就需要打开 https 协议的 Apache 虚拟主机配置,启用 SSLProxyEngine 设置。
<pre>SSLEngine on
<strong>SSLProxyEngine on
</strong></pre>
<h3>Subversion写代理的配置不能使用 SVNParentPath</h3>
SVNParentPath 是管理员最喜欢用的指令,只要设定为版本库的根,不必在为新建版本库设置 <Location> 配置小节。
但是对于 Subversion 写代理,必须使用 SVNPath 来版本库的实际部署路径,这是因为:
<ul>
<li>写代理需要配置 SVNMasterURI,但是 SVNMasterURI 只能设置一个 URL</li>
<li>即 SVNMasterURI 要可 SVNPath 配对使用,而不能和 SVNParentPath 一起使用。</li>
<li>因此需要为需要进行写代理的版本库逐一进行设置。</li>
</ul>
TODO:修改 mod_dav_svn 的代码,使得 SVNMasterURL 可以和 SVNParentPath 一起用,即 SVNMasterURI 是一个指向版本库根的 URL
<h3>基于 SVNParentPath 的版本库和单独配置的写代理版本库不能在有重叠的 location 中混搭</h3>
考虑是否可以使用如下有重叠的Location中进行混搭,既方便本地主版本库的维护,又方便同样域名和路径前缀的写代理版本库?
<pre><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>
</pre>
不幸的是,上面的配置无法正确运行。虽然 Location 可以重叠,但是重叠的 Location 的配置会传递和覆盖。
上一个的 SVNParentPath 传递的下面不允许配置 SVNParentPath 的写代理的配置中,破坏了写代理的正确运行。反之亦然。
<h3>Subversion的镜像版本库要提供两套 URL!</h3>
如果镜像版本库只有一个 URL,那么向该 URL 写的时候,代理提交到主版本库。但是主版本库到镜像版本库同步时,又该如何呢?
因此需要提供两个 URL:
<ul>
<li>一个可以直接写(通过 ReadonlySvnMirror 钩子可以限制只有特定同步管理员可写)</li>
<li>另外一个不能直接写,而是通过代理。即用 SVNMasterURI 指令设置真正要写到的版本库地址</li>
</ul>
<h3>Subversion写代理的 URL 的路径部分必须和主版本库的路径相同!</h3>
即如果主版本库的 URL 是 https://svn.moon.ossxp.com/svn/myrepos 。镜像版本库的写代理的 URL 地址的主机名可以不同,但是路径必须相同,例如 https://svn2.sun.ossxp.com/svn/myrepos 。看到了么,一个是月亮 moon,一个是太阳 sun。
对于版本库同步用的 URL 地址则没有限制。