服务器信息

角色 IP
svn主 192.168.99.207
svn备 192.168.99.208

一、部署思路

  • 经过测试,将svn主的数据目录整个通过rsync物理的方式推到svn备上,svn备通过http的方式是可以正常使用svn的。
  • 所以本实例是以rsync的方式做的svn主从备份。

1.基础环境

  • svn主/备:svn1.8 + apache2.4 + php5.4 + mysql5.7 + svnmanager1.10

2. MySQL

  • svn数据库主/备:主从复制,主要是用于svnmanager记录相关用户及仓库信息。
  • svn从数据库:配置Read_only主要是防止svn从上误登陆往svn从的svnmanager写入数据,造成主从数据不一致。
  • 复制结构:GTID复制

3.实时同步

  • 实时同步主要涉及3个路径:/data/svn//data/wwwroot/svn.test.com//etc/httpd/conf.d/
  • 同步我这边测试环境用的是rsync + crontab,也可以换成sersync或者rsync + inotify的实时同步
  • 如果对从库的实时性要求没那么高,可以增加crontab的同步时间,好处是对人为的误操作,有响应恢复的时间(推荐svn的从库不要做成实时的)
  • 这三个目录可以每天再备一份到另外的一台服务器上。
1
2
3
*/1 * * * * /usr/bin/rsync --delete -avzP /data/svn/ 192.168.99.208::svnsync >/dev/null 2>&1
*/1 * * * * /usr/bin/rsync --delete -avzP --exclude={index.html,svnmanager/config.php} /data/wwwroot/svn.test.com/ 192.168.99.208::wwwroot >/dev/null 2>&1
*/1 * * * * /usr/bin/rsync --delete -avzP /etc/httpd/conf.d/ 192.168.99.208::httpd >/dev/null 2>&1

4.svn备stand by

svn备两个stand by策略,目的是平时不让访问:

  1. svn备apache服务器不要启动,或者iptables封锁httpd端口
  2. mysql配置read_only

二、故障切换

切换步骤

  • 彻底断开主的实时同步rsync,关闭rsync或sersync服务,目的是防止svn主起来后影响svn被的数据
  • svn备mysql关闭read only
  • svn备开启apache或http端口,允许访问svnmanager
  • 域名切到svn备
  • 测试