IT技术博客大学习 共学习 共进步

rsync主动同步代码

废墟 2012-01-24 13:50:41 浏览 3,804 次
目前项目是由多台机器在提供的,他们的代码都一致,但是我又不想写crontab去定时同步代码,因为万一服务器之间连接稍有故障,负载就会飙升。而且我的代码更新并不会太频繁,所以设计了以下方案:
1.拿一台机器当工作机
2.需要同步代码的前端机器都搭建rsync服务端
3.我同步代码到工作机,执行一个shell脚本,代码同步到前端机

rsync的服务器配置如下
建立一个/etc/rsyncd.conf文件,内容
uid = root
gid = root
use chroot = no
max connections = 4
strict modes =yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log

[app]
path = /data/www/xs8.cn/app.xs8.cn/
comment = app.xs8.cn
ignore errors
read only = no
list = yes
secrets file = /etc/rsync.pas
hosts allow = 10.0.0.100
hosts deny = 0.0.0.0/0

[www]
path = /data/www/xs8.cn/www.xs8.cn/
comment = www.xs8.cn
ignore errors
read only = no
list = yes
secrets file = /etc/rsync.pas
hosts allow = 10.0.0.100
hosts deny = 0.0.0.0/0

新建一个/etc/rsync.pas文件,内容为“用户名:密码”
xs8:xs8rsync

可以看到,我的其中一台前端需要提供app和www这两个二级域名的服务
启动前端机的rsync服务/usr/bin/rsync --daemon --config=/etc/rsyncd.conf 可以把这句写进/etc/rc.local

然后在工作机上建立与前端机相同的rsync.pas文件
在来个同步脚本sync_app
/usr/bin/rsync -vzrtopg --progress --password-file=/etc/rsync.pas --exclude-from=/data/www/xs8.cn/app.xs8.cn/exclude.txt /data/www/xs8.cn/app.xs8.cn/ xs8@10.0.0.11::app
/usr/bin/rsync -vzrtopg --progress --password-file=/etc/rsync.pas --exclude-from=/data/www/xs8.cn/app.xs8.cn/exclude.txt /data/www/xs8.cn/app.xs8.cn/ xs8@10.0.0.12::app

给予执行权限chmod +x /opt/sbin/sync_app

你可以看到我排除了一些文件不进行同步,这个exclude文件内容如下
exclude.txt
application/cache
application/logs

从需要同步的目录算起,下面哪些不需要同步,写上就行,一行一个文件或者目录

这样,当我更改代码以后,先上传到我的工作机,然后执行/opt/sbin/sync_app就会将代码发布到所有前端提供服务的机器上了

建议继续学习

  1. 关于IO的同步,异步,阻塞,非阻塞 (阅读 16,422)
  2. rsync同步的艺术 (阅读 9,461)
  3. Linux探索:一次删除一百万个文件的最快方法 (阅读 6,760)
  4. mysql 主从同步原理 (阅读 6,482)
  5. 消息分发的同步均衡策略 (阅读 6,063)
  6. rsync 的核心算法 (阅读 5,482)
  7. Dropbox差异同步算法rsync及其改进算法原理 (阅读 5,120)
  8. rsync自动输入密码实现数据备份 (阅读 5,023)
  9. 五款最好的免费同步软件 (阅读 4,703)
  10. MySQL5.5复制/同步的新特性及改进 (阅读 4,563)