svnsync實現版本庫的同步備份?
實驗環境:
A,172.17.201.243(主)
B,172.17.201.88(備)
項目需求,生產環境要求svn服務器實現熱備機制,于是就想到了svn自帶的svnsync機制,操作流程如下:
1、在要備份的機器上(172.17.201.88)建立版本庫
mkdir -p /home/svn/SH2014/SVNdata
svnadmin 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” >&2 exit 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是相同的。