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:

请参阅如下文章安装配置

http://cmdschool.blog.51cto.com/2420395/1715856

并增加如下配置

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 start
chkconfig 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-change
chmod 744 pre-revprop-change
ll 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

成功后的同步结果:

wKioL1ZTKkOCPD6EAABWvW55DsM601.png

2.3.5、step5

设置用户提交自动同步

In svnSer:

cd /var/local/svn/hooks/
cp post-commit.tmpl post-commit
chmod 700 post-commit
ll 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)分别做如下检出:

wKioL1ZTnoWwXyc9AABIGySAW40303.png

wKiom1ZTnivQZ044AABHbCjtcGg038.png

注意:以上检出的IP地址分别对应svnSer与svn-slaveSer

3)以上都单击【OK】后检出完毕,记录当前的版本号。

4)更新projetA文件夹的内容并做提交操作并记录提交后的版本号。

5)projetB做更新操作,并查看更新后的版本号是否是刚由projectA提交的版本号。

----------------------------------

参阅原文:

http://my.oschina.net/showapi/blog/92870?p=1