1、前言
笔者公司需要一台svn服务器,但不幸的是公司给了一台破旧的服务器(本地用的,其他服务都跑在阿里云上),笔者担心没过多久服务器就挂点,故而想做svn的双机热备。
2、实践部分
2.1、环境
svnSer:
ipaddress=10.168.0.176
hostname=svnSer
svn-slaveSer:
ipaddress=10.168.0.179
hostname=svn-slaveSer
2.2、svnSer安装配置(Master)
In svnSer:
请参阅如下文章安装配置
并增加如下配置
In svnSer:
1)定义svn备份管理员的用户名和密码
vim修改/var/local/svn/conf/passwd
增加如下定义:
bkuser = bkpwd
2)定义svn备份管理员的组、组成员和目录的组权限:
vim修改/var/local/svn/conf/authz
[groups]admin_rw = bkuser[/]@admin_rw = rw
3)重启服务
/etc/init.d/svnserve restart
2.3、svn-slaveSer的安装配置(Slave)
2.3.1、step1
基本环境配置
In svn-slaveSer:
1)yum安装
yum -y install subversion
2)定义库文件夹
svnadmin create /var/local/svn
3)启动并设置服务开机启动
/etc/init.d/svnserve startchkconfig svnserve on
4)设置防火墙
vim编辑/etc/sysconfig/iptables
加入如下内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
5)重启防火墙
/etc/init.d/iptables restart
2.3.2、step2
In svn-slaveSer:
cd /var/local/svn/hooks/cp pre-revprop-change.tmpl pre-revprop-changechmod 744 pre-revprop-changell pre-revprop-change
vim编辑/var/local/svn/hooks/pre-revprop-change
修改最后一行
修改前:
exit 1
修改后:
exit 0
注:允许修改注释
2.3.3、step3
获取Master的配置文件
In svn-slaveSer:
1)复制配置文件
scp 10.168.0.176:/var/local/svn/conf/* /var/local/svn/conf/
2)重启服务
/etc/init.d/svnserve restart
2.3.4、step4
初始化同步信息
In svn-slaveSer
svnsync init file:///var/local/svn/ svn://10.168.0.176/var/local/svn
以上步骤会询问你svn的账号和密码,输入前面定义的用户名和密码:
用户名:bkuser
密码:bkpwd
2.3.5、step5
同步测试
In svn-slaveSer:
svnsync sync file:///var/local/svn/
以上步骤会询问你svn的账号和密码,输入前面定义的用户名和密码:
用户名:bkuser
密码:bkpwd
成功后的同步结果:
2.3.5、step5
设置用户提交自动同步
In svnSer:
cd /var/local/svn/hooks/cp post-commit.tmpl post-commitchmod 700 post-commitll post-commit
vim编辑/var/local/svn/hooks/post-commit
末尾删除如下内容:
REPOS="$1"REV="$2"mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
增加如下内容:
svnsync sync --non-interactive svn://10.168.0.179/var/local/svn --username bkuser --password bkpwd
以上语句建议先执行一次测试可用再写入post-commit
2.3.6、step6
检查同步情况:
1)桌面新建两个文件夹,pojectA与pojectB
2)分别做如下检出:
注意:以上检出的IP地址分别对应svnSer与svn-slaveSer
3)以上都单击【OK】后检出完毕,记录当前的版本号。
4)更新projetA文件夹的内容并做提交操作并记录提交后的版本号。
5)projetB做更新操作,并查看更新后的版本号是否是刚由projectA提交的版本号。
----------------------------------
参阅原文: