Svn镜像库实时同步实现

一, 配置rsync的同步机制先实现能手动同步

环境svn源码库 192.168.115.120

      Svn镜像库 192.168.115.121

1,在源码库中配置rsync服务 (配置文件默认没有需要手动建立 /etc/rsyncd.cong

使用svn钩子脚本控制svn库的实时备份_svn 运维 同步


上面 [ UGOR]是要更新的模块,然后启动服务 rsync –deamo查看服务状态lsof –I 873

注:认证账户格式 用户:密码文件权限 600, rsync.pass

2,在镜像库中同步内容执行

rsync -vzrtopgl --progress --delete --password-file=/home/svnroot/passwdrsync root@192.168.115.120::UGO6R /home/svnroot/UGO6R(单一同步 UGO6R

全部同步写成一个脚本如下

使用svn钩子脚本控制svn库的实时备份_svn 运维 同步_02

执行这个脚本则同步所有的配置模块也就是同步到本地镜像库的目录

使用svn钩子脚本控制svn库的实时备份_svn 运维 同步_03

注:上面发rsync使用的自己的协议认证后面自动用svnhook脚本时候则是ssh协议,两台机器通信需要做密钥认证。

脚本加入计划任务每10分钟执行一次,但是也不做到实时一致。所以需要源码库192.168.115.120每次提交来触发实时更新保证两个库内容完全一致

 

二, svn钩子脚本触发实时同步

思路:每次源码的提交都会触发 post_commit通过这个脚本我们可以做提交后的同步

使用svn钩子脚本控制svn库的实时备份_svn 运维 同步_04

使用的是远程登陆执行方式

使用的是ssh的协议。为了交互输入密码实现自动化 密钥认证(认证方式就不贴了)

 

三, 正确性的认证

首先查看源码库192.168.115.120日志

使用svn钩子脚本控制svn库的实时备份_svn 运维 同步_05

更新镜像库执行 更新脚本

然后查看镜像的内容

使用svn钩子脚本控制svn库的实时备份_svn 运维 同步_06

可以看到两个svn库的内容一致

Ps:只是通过自己的想法实现的功能,后续会一直完善

,错误以及解决方式

使用svn钩子脚本控制svn库的实时备份_svn 运维 同步_07

解决密钥认证时候我是在一个普通用户和root中做的,但是hook脚本使用的是apache的用户。认证信息获取不了我尝试把root的认证信息放在上面的报错目录给予其他用户的读写权限解决问题,子尝试了提交71005,验证已经自动同步