1.环境准备(以下是我虚拟机配置):

 

服务器一:192.168.227.145(RIP) 系统centos 6.5

服务器二:192.168.227.146(RIP) 系统centos 6.5

VIP:192.168.227.147

以上内容VIP为虚拟IP,RIP为服务器真实IP,我们访问svn服务器是通过VIP去访问的

2.搭建流程:

 

2.1 配置yum

/etc/yum.repos.d/CentOS-Base.repo加上aliyunyum

[aliyun-base]name=Aliyun-Base-CentOS-$releaseverbaseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/gpgcheck=0 [aliyun-epel]name=Aliyun-Epel-CentOS-$releaseverbaseurl=http://mirrors.aliyun.com/epel/6Server/x86_64/gpgcheck=0

2.2 配置ssh双机信任(如果有则忽略这步)

192.168.217.145服务器:

ssh-keygen -t rsa(一直按enter即可)

ssh-copy-id 192.168.217.146

 

192.168.217.146服务器:

ssh-keygen -t rsa(一直按enter即可)

ssh-copy-id 192.168.217.145

 

2.3 安装rsync

yum -y install rsync即可

 

2.4 安装svn服务器

我的svn repos目录在/data/svn

两台svn服务器配置当然一样

以一台举例:

2.4.1.yum -y install subversion(安装svn服务器)

2.4.2.mkdir -pv /data/svn

2.4.3.svnadmin create /data/svn/mytest(创建svn repos目录)

2.4.4.vim /etc/sysconfig/svnserve 文件内容:

       OPTIONS="-r/data/svn"         类似于svnserve -d -r /data/svn

2.4.5.在当前svn源目录(我的例子是/data/svn/mytest) hooks加个post-commit文件,一定要给该文件执行权限,它是svn提交后的钩子,作用主要是提交后将svn目录同步到另外一台服务器

post-commit文件内容:

#!/bin/bashREPOS="$1"REV="$2" CPATH=$(/usr/bin/dirname $(cd $(/usr/bin/dirname $0)&& pwd))"/"       #获取svn目录根目录IPARR="192.168.217.145 192.168.217.146"     #svn集群的两个ipfor ip in $IPARR; do       if/sbin/ifconfig | /bin/grep -E "addr:${ip}" &>/dev/null; then              continue       fi       /bin/ping-c1 -w1 $ip &>/dev/null && /usr/bin/rsync -aP $CPATH $ip:$CPATHdone exit 0

2.4.6.在svn源目录下再加个recovery.sh(该脚本作用是匹配当前服务器和另外一台服务器的版本号,如果当前服务器版本号老于另外一台服务器,则会主动将另外一台服务器的代码同步过来)主svn服务器宕机之后恢复好之后可以使用

该文件路径是/data/svn/mytest/recovery.sh

#!/bin/sh CPATH=$(cd $(/usr/bin/dirname $0) &&pwd)"/"     #获取svn目录根目录IPARR="192.168.217.145 192.168.217.146"     #svn集群的两个ip for ip in $IPARR; do       if /sbin/ifconfig| /bin/grep -E "addr:${ip}" &>/dev/null; then              continue       fi              if/bin/ping -c1 -w1 $ip &>/dev/null; then                     ssh_command="/usr/bin/svnlook youngest $CPATH"                     me_repos=$($ssh_command)                     ip_repos=$(/usr/bin/ssh $ip $ssh_command)                     if[ $me_repos -lt $ip_repos ]; then    #如果本机版本号小于对方版本号则要从对方服务器同步                            /usr/bin/rsync -aP $ip:$CPATH $CPATH                     fi       fidoneexit 0

2.5 heartbeat搭建

 

在开始搭建之前

修改/etc/hosts加上两行(两台服务器一致)

192.168.217.145 primary

192.168.217.146 backup

再把对应145hostname primary, 146(hostname backup)

2.5.1. yum -y install heartbeat(两台服务器一致)

2.5.2./etc/ha.d目录下创建3个文件ha.cf, haresources, authkeys

ha.cf文件(192.168.217.145)

logfacility   local0keepalive 1deadtime 30    #确认节点的宕机时间warntime 10initdead 60       #从一个节点切到另一个节点的时间udpport     694ucast eth0 192.168.217.146auto_failback onnode    primarynode    backupping 192.168.217.1

ha.cf文件(192.168.217.146)

logfacility   local0keepalive 1deadtime 30warntime 10initdead 60udpport     694ucast eth1 192.168.217.145auto_failback onnode    primarynode    backupping 192.168.217.1

haresources文件(两台服务器一致)

primary                    192.168.217.147/24svnserve

authkeys文件(两台服务器一致)

auth 33 md5 Hellotomtop!

3.两台机器service heartbeat start

 

 

至此svn集群架构完毕