实验环境:
A,172.17.201.243(主)
B,172.17.201.88(备)
项目需求,生产环境要求svn服务器实现热备机制,于是就想到了svn自带的svnsync机制,操作流程如下:
1、在要备份的机器上(172.17.201.88)建立版本库
mkdir -p /home/svn/SH2014/SVNdatasvnadmin create /home/svn/SH2014/SVNdata
2、进入备份机器(172.17.201.88)版本库SVNdata下的hooks目录。
cd /home/svn/SH2014/SVNdata/hooks/
3、创建pre-revprop-change文件
cp pre-revprop-change.tmpl pre-revprop-change
4、修改pre-revprop-change权限,更改为755
chmod 755 pre-revprop-change
5、修改pre-revprop-change内容
为 echo “Changing revision properties other than svn:log is prohibited” >&2exit 0(1修改为0)
说明如下:
原脚本的意思是如果修改的是svn:log属性,将允许修改,返回0;否则,不允许,返回1
我们要将它改为允许修改所有的属性,在脚本中直接返回0
6、在备份机器上执行同步初始化操作
svnsync init file:///home/svn/SH2014/SVNdata http://172.17.201.243/SHSVN/SVNdata --username "svnadmin" --password "adminpassword"
会出现以下信息:
Copied properties for revision 0.
7、在备份机器上执行同步操作
svnsync sync file:///home/svn/SH2014/SVNdata
会出现以下信息:
Transmitting file data .Committed revision 1.Copied properties for revision 1.Transmitting file data .Committed revision 2.Copied properties for revision 2.Transmitting file data .Committed revision 3.Copied properties for revision 3.
出现以上信息就说明同步成功了。
8、设置备份库的uuid,uuid是respository创建时自动生成的一个随机数,SVN Client利用uuid判断是否为同一个库。
进入主机,查看主机库的uuid
svnlook uuid /home/svn/repos
会显示主机库的uuid
78312468-8f6a-4e0c-9dc4-2b397672ca84
进入备份机,查看备份机新建库的uuid
svnlook uuid /home/svn/SH2014/SVNdata
会显示新建库的uuid
c7717876-c1c0-4c6c-9b12-70b43bd7116b
将新建库的uuid改成与主机库的uuid相同
svnadmin setuuid /home/svn/SH2014/SVNdata 78312468-8f6a-4e0c-9dc4-2b397672ca84
再次查看新建库的uuid
svnlook uuid /home/svn/SH2014/SVNdata
会显示新库的uuid与主机库的uuid相同了
78312468-8f6a-4e0c-9dc4-2b397672ca84
9、配置Apache和权限
当出现主机宕机需要备份机马上顶上去时,修改一下IP即可。
客户端如果已经有checkout的项目,则需要relocate,relocate 前提条件就是uuid是相同的。