配置SVN镜像
1.环境?
??? 两台RHEL5:192.168.0.5?? 192.168.0.6
?
2.在192.168.0.5和192.168.0.6上 搭建SVN服务器
?
下载下面几个包并依次解压安装:
sqlite-amalgamation-3.6.13.tar.gz
apr-1.2.7.tar.gz
apr-util-1.2.7.tar.gz
httpd-2.2.13.tar.bz2
subversion-1.6.6.tar.bz2
?
3.检查SVN安装是否成功
执行下命令svnadmin,看看有反应不。
?
4.在192.168.0.5上建库
mkdir -p /data/svn
cd /data/svn
svnadmin create test_dir
cd test_dir 看见有很多库文件
cd /data/svn/test_dir/conf
其下有几个配置文件,密码文件 passwd,服务器的配置文件svnserve.conf 。
?
.修改svnserve.conf将下面几行的注释去掉:
anon-access = read
auth-access = write
password-db = passwd
上述三行前面不能留有空格,否则要出错。
?
修改密码文件passwd
添加一个账号和口令diego? , diego?
?
cd /data/svn/test_dir
启动服务
svnserve -d -r /data/svn/test_dir
?
netstat -nltp 看见有一个3690的端口在使用 证明启动成功。
?
将代码导入版本库。
svn import /data/svn svn://192.168.0.5/svn/test_dir? --username 'diego' --password 'diego' -m "initial import"
?
-m为注释内容。
?
5.在192.168.0.6上建镜像库
mkdir -p /data/svn/
建立一个镜像库
svnadmin create mir
svnserve -d -r? /data/svn/mir/
netstat -nltp 看见有一个3690的端口在使用 证明启动成功。
?
修改配置文件:
cd /data/svn/mir/conf
svnserve.conf将下面几行的注释去掉:
anon-access = read
auth-access = write
password-db = passwd
上述三行前面不能留有空格,否则要出错。
?
修改密码文件passwd
添加一个账号和口令diego? , diego?
?
修改同步文件
cp pre-revprop-change.tmpl?? pre-revprop-change
chmod +x pre-revprop-change
chmod 777 pre-revprop-change
?
同步初始化
svnsync init file:///data/svn/mir/? http://192.168.0.5/svn/test_dir
?
此时mir库就是test_dir库的一个异地拷贝。
要想手动同步的话 可以执行: svnsync sync svn://192.168.0.6 --username diego --password diego?
此时还不能实时同步,显然手动同步很麻烦。
好,镜像192.168.0.6的配置到此结束。下面来通过配置源库192.168.0.5上的test_dir来达到实时的同步。
?
6.配置实时同步
SVN上有两个很特殊的文件,到192.168.0.5上,cd到 /data/svn/test_dir/hooks
下面有2个很重要的文件: pre-commit.tmpl和post-commit.tmpl
顾名思义,前者是SVN每次提交之前都要执行的脚本。后者是SVN每次提交之后执行的脚本。
?
此时我们若将同步命令svnsync init file:///data/svn/mir/? http://192.168.0.5/svn/test_dir写入上述2个脚本中的一个,显然就可以达到实时同步的目的了。
?
但是:建议最好将svnsync init file:///data/svn/mir/? http://192.168.0.5/svn/test_dir写入post-commit脚本里,而非pre-commit中,为什么,想想就明白,写入pre-commit中的话,是每次提交前同步,显然镜像库会比源库一直会落后一个版本。
?
上面2个脚本怎么写?
SVN提供了2个模板,我们改下就OK,
cd /data/svn/test_dir/hooks
cp pre-commit.tmpl? pre-commit
chmod +x pre-commit
chmod 777 pre-commit
?
cp post-commit.tmpl? post-commit
chmod +x post-commit
chmod 777 post-commit
?
7.下面是我的脚本内容:
?
?
实际上只要配置一个post-commit就行了。
?
8.测试下,是否完成2个服务器SVN的实时同步:
?
提交一个excel文件到源库 192.168.0.5
?
到192.168.0.6的镜像库下看看
我们看到同步成功了。
?
总结:利用这种方案,可以达到SVN的容灾。
?
实际中开发的代码或者文件都可以提交到192.168.0.5的SVN上,而此时192.168.0.6上会形成一个和192.168.0.5上一模一样的镜像库,关键是这种同步是实时的。
?
所以不管192.168.0.5的SVN因为OS还是硬件故障挂掉,我们的另外一台机器192.168.0.6都可以立马接替它的工作。SVN挂掉 不影响团队工作,最主要的是做好了SVN的数据安全,更重要的是这种数据是实时的。何乐而不为呢?
?
?
?
.