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-$releasever
baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/
gpgcheck=0
 
[aliyun-epel]
name=Aliyun-Epel-CentOS-$releasever
baseurl=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/bash
REPOS="$1"
REV="$2"
 
CPATH=$(/usr/bin/dirname $(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
       /bin/ping-c1 -w1 $ip &>/dev/null && /usr/bin/rsync -aP $CPATH $ip:$CPATH
done
 
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
       fi
done
exit 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   local0
keepalive 1
deadtime 30    #确认节点的宕机时间
warntime 10
initdead 60       #从一个节点切到另一个节点的时间
udpport     694
ucast eth0 192.168.217.146
auto_failback on
node    primary
node    backup
ping 192.168.217.1


ha.cf文件(192.168.217.146)

logfacility   local0
keepalive 1
deadtime 30
warntime 10
initdead 60
udpport     694
ucast eth1 192.168.217.145
auto_failback on
node    primary
node    backup
ping 192.168.217.1


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

primary                    192.168.217.147/24svnserve


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

auth 3
3 md5 Hellotomtop!


3.两台机器service heartbeat start

 

 

至此svn集群架构完毕