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加上aliyun的yum源
[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
再把对应145(hostname 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集群架构完毕