开发者社区> 问答> 正文

linux多服务器间文件实时同步问题

有这样一个场景,一个应用在3台web服务器A、B、C上部署,各自有一个目录下的文件需要相互同步,保持3台服务器上一致。

现有的一个解决方案是 inotify + rsync,A B C既作服务端又作客户端,A←→B←→C,inotify监控到B发生变化则通过脚本同步到A C。但有明显的问题:由于文件涉及到的文件列表和需要同步的文件比较多,也不知道为什么两段串行同步的脚本一直停留在同步第一个,像是有同步不完的内容,第二条同步的命令始终没有执行;后来我尝试加入&让它们并行执行,完了B服务器爆了——不断的循环同步其他文件导致rsync进程占满内存。不知道谁有更好的思路来实现?最简单粗暴的方法是写两个脚本各自同步,网上有说unison可以双向同步,有没有人实现过这种三台服务器的,还有说A←→B ←NFS→ C,可行性和性能又有多大。
/usr/bin/inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w%f' \
            -e modify,delete,create,move ${source_path} | while read file
      do
            /usr/bin/rsync -auvvvvrtzopgP --exclude-from=/etc/rsync_exclude.lst --progress --bwlimit=100 --password-file=${rsync_pwd} ${source_path} ${rsync_user}@${rsync_server}::${rsync_module}
            /usr/bin/rsync -auvvvvrtzopgP --exclude-from=/etc/rsync_exclude.lst --progress --bwlimit=100 --password-file=${rsync_pwd} ${source_path} ${rsync_user}@${rsync_server_bak}::${rsync_module}
      done

展开
收起
a123456678 2016-06-14 11:36:00 3835 0
1 条回答
写回答
取消 提交回答
  • 建议你固定将一台机器作为主节点,其它两台机器从主节点复制文件,这样能避免不必要的冲突问题。否则真可能产生你提到的循环复制问题。

    我的解决方案是利用SVN hook+ ssh remote command推送到三台web服务器上。

    使用nfs虽然可以简化文件共享问题,但还是有问题的,之所以舍弃掉nfs,当时是基于以下几点考虑:

    1. 可靠性及单点故障问题,一旦nfs server崩溃(网络原因,磁盘损坏等),所有的web server都不可用。安全隐患极大。

    1. 性能,通过ab压力测试工具的反复验证,nfs性能仅本机磁盘的四分之一不到,毕竟多了一层网络传输开销,性能降低也是必然的。

    svn hook + ssh command即可很好地解决这个问题。

    在svn server上建立svn post-commit脚本,当提交完成后,在每台web server上远程执行svn update命令更新即可,这可通过ssh username@host command(须做好密钥登录机制)。

    2019-07-17 19:37:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云第八代企业级ECS实例,为企业提供更安全的云上防护 立即下载
国产服务器操作系统发展报告(2023年) 立即下载
ECS生长万物:开源 立即下载