Svn镜像库实时同步实现
一, 配置rsync的同步机制先实现能手动同步
环境:svn源码库 192.168.115.120
Svn镜像库 192.168.115.121
1,在源码库中配置rsync服务 (配置文件默认没有需要手动建立 /etc/rsyncd.cong)
上面 [ UGOR]就是要更新的模块,然后启动服务 rsync –deamo查看服务状态lsof –I 873
注:认证账户格式为 用户:密码,文件权限为 600, (rsync.pass)
2,在镜像库中同步内容执行
rsync -vzrtopgl --progress --delete --password-file=/home/svnroot/passwdrsync [email protected]::UGO6R /home/svnroot/UGO6R(单一同步 UGO6R)
全部同步写成一个脚本如下
执行这个脚本则同步所有的配置模块也就是同步到本地镜像库的目录
注:上面发rsync使用的自己的协议认证,后面自动用svn的hook脚本时候则是ssh协议,两台机器通信需要做密钥认证。
把脚本加入计划任务每10分钟执行一次,但是也不做到实时一致。所以需要源码库192.168.115.120的每次提交来触发实时更新,保证两个库内容完全一致
二, svn钩子脚本触发实时同步
思路:每次源码的提交都会触发 post_commit,通过这个脚本我们可以做提交后的同步
我使用的是远程登陆执行的方式
使用的是ssh的协议。为了不交互输入密码实现自动化做 密钥认证(认证方式就不贴了)
三, 正确性的认证
首先查看源码库192.168.115.120的日志
更新后在镜像库执行 更新脚本
然后查看镜像库的内容
可以看到两个svn库的内容一致
Ps:只是通过自己的想法实现的功能,后续会一直完善
三,错误以及解决方式
解决密钥认证时候我是在一个普通用户和root中做的,但是hook脚本使用的是apache的用户。认证信息获取不了,我尝试把root的认证信息放在上面的报错目录,给予其他用户的读写权限解决问题,子尝试了提交710的05库,验证已经自动同步