rsync配合inotify做服务器间文件同步

由于需要添加下载服务器,现在每台服务器的流量比较大了,需要扩充,也就需要多服务器文件同步,本篇文章是在Ubuntu下操作的。
1:安装rsync

apt install rsync

2:修改配置文件(/etc/rsyncd.conf)

uid=root
gid=root
use chroot=no
max connections=10
timeout=600
strict modes=yes
port=873
#以下pid等等建议更换位置
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log[apks]
path=/tmp/n2/
comment=rsync test logs
auth users=ciika
uid=root
gid=root
secrets file=/etc/rsyncd.secrets
read only=no
list=no

注意:上面[apks]如果不需要也可以不指定
3:配置用户名密码
/etc/rsyncd.secrets

ciika:ciika@2019

设置权限

chmod 600 /etc/rsyncd.secrets

4:配置客户端密码

/etc/rsync_client.pwdciika@2019

设置权限

chmod 600 /etc/rsync_client.pwd

以上3和4步骤分为两个端配置使用
5:启动
启动命令

/usr/bin/rsync --daemon --config=/etc/rsyncd.conf

6:同步命令
假如A向远端B同步数据
需要在A上指定/etc/rsync_client.pwd,在B上配置好apks

/usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /home/files/ ciika@172.26.31.130::apks

7:安装 inotify

apt-get install inotify-tools

8:rsync组合inotify-tools完成实时同步
大概原理是inotify监控的文件发生变化,通知rsync进行同步,同时建议没固定的时间在全量同步一次
大概脚本为:

#!/bin/bash
src=/home/files/   # 需要同步的源路径
des=apks     # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/rsync_client.pwd    # rsync验证的密码文件
destip=172.26.31.130 # 目标服务器1
user=ciika    # rsync --daemon定义的验证用户名
cd $src
inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file # 把监控到有发生更改的"文件路径列表"循环
do
INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE
echo "-------------------------------$(date)------------------------------------"
echo $file
#增加、修改、写入完成、移动进事件
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] # 判断事件类型
thenecho 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'rsync -vlrtR --password-file=$rsync_passwd_file $(dirname $INO_FILE) $user@$destip::$des
fi
#删除、移动出事件
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
thenecho 'DELETE or MOVED_FROM'rsync -avzR --delete --password-file=$rsync_passwd_file $(dirname $INO_FILE) $user@$destip::$des
fi
#修改属性事件 指 touch chgrp chmod chown等操作
if [[ $INO_EVENT =~ 'ATTRIB' ]]
thenecho 'ATTRIB'if [ ! -d "$INO_FILE" ] # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。thenrsync -avzcR --password-file=$rsync_passwd_file $(dirname $INO_FILE) $user@$destip::$desfi
fi
done

常见错误:
@ERROR: invalid uid
注意uid是否在远程服务器上存在,建议改成root试试
还有一种是验证失败,需要确定命令里面的用户名和远程配置的是否一致,本地和远程的密码是否一致
另外如果rsync同步速度非常慢,需要看看是否在传输列表的时候消耗的太长时间,如果是,可以直接精准的传输改变的文件。

rsync: failed to connect to 54.147.1.1 (54.147.1.1): Connection timed out (110)

需要在目标机器开始端口873

/bin/bash^M: bad interpreter: No such file or directory
替换文件的换行,例如文件是rsync.sh

sed -i -e 's/\r$//' rsync.sh

rsync同步慢cpu占用高的问题

介绍

结合inotifywait和rsync做实时同步会遇到一些问题,会造成同步非常慢。常见的原因有如下:
1:inotifywait做实时监控,但是rsync是做全量同步
即inotifywait同步监控到文件变化,这个非常频繁,每触发一次rsync做了全量同步,inotifywait本来是能监控到具体的文件变化,所以本次只用同步这个变化的文件即可,而不是文件夹,即使是需要文件夹,去掉递归也行。
2:checksum带来的性能问题
如果每次修改文件大小会变化,可以去掉–checksum,有时候卡在sending incremental file list可能是因为这个原因导致的
3:频繁的触发了modify
modify会频繁的触发,如果在modify就同步可能会造成多次同步,解决方式是去掉modify事件,仅仅在关闭或者移动的时候触发
rsync,可能的代码片段为:

if [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]

4:一定要忽略临时文件的同步,例如一边上传一边同步,很可能造成临时文件过多,同步压力非常大,事实上这些临时文件没任何用户,不需要同步。

参考链接 :
rsync配合inotify做服务器间文件同步 : http://ciika.com/page/6/

rsync同步慢cpu占用高的问题 : http://ciika.com/2019/07/rsync-cpu-load-high/

Ubuntu中rsync配合inotify做服务器间文件同步相关推荐

  1. 服务器间文件同步工具Syncthing配置注意点汇总

    1.备份服务器视图说明 2.本地服务器配置 如上图所示,点击右上角操作中的设置,如下图进行设置. 如下图所示,点击"添加文件夹",设置需要备份的本机文件夹. 新增示例如下,&quo ...

  2. linux下rsync+inotify实现服务器之间文件实时同步

    先介绍一下rsync与inotify. 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例 ...

  3. rsync+inotify实现服务器之间文件实时同步--转

    之前做了"ssh信任与scp自动传输脚本"的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停 ...

  4. rsync+inotify实现服务器之间文件实时同步

    原文转自http://dl528888.blog.51cto.com/2382721/771533/ 之前做了"ssh信任与scp自动传输脚本"的技术文档,此方案是作为公司里备份的 ...

  5. CentOS 与 Ubuntu:哪个更适合做服务器?

    CentOS 与 Ubuntu:哪个更适合做服务器? 已经决定买一台虚拟服务器,但还不能决定使用哪个 Linux 发行版?我们都经历过这种困扰.对于 Linux 发行版来说,要在这么多的发行版和种种支 ...

  6. ubuntu系统下ftp服务器配置,如何在Ubuntu中安装和配置FTP服务器

    FTP ( 文件传输协议 )是一种相对较旧和最常用的标准网络协议,用于通过网络在两台计算机之间上传/下载文件. 然而, FTP由其原始的不安全,因为它传输数据与用户凭证(用户名和密码)而不加密. 警告 ...

  7. rsync与inotify集成实现数据实时同步更新

    本文转载:http://ilanni.blog.51cto.com/526870/1605200 把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要分以下几个步骤: 1.r ...

  8. linux间服务器间文件传输,Linux命令scp服务器间文件传输教程

    scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 .那么你知道Linux命令scp服务器间文件传输教程么?接下来是 ...

  9. 不同windows服务器之间同步文件,WindowsServer2016配置DFS实现两个服务器之间文件同步...

    <WindowsServer2016配置DFS实现两个服务器之间文件同步>由会员分享,可在线阅读,更多相关<WindowsServer2016配置DFS实现两个服务器之间文件同步(1 ...

最新文章

  1. JavaScript自动设置IFrame高度(兼容各主流浏览器)
  2. 计算机软件技术基础fifo算法,软件技术基础真题
  3. 数据库系统实训——实验二——单表查询
  4. weblogic hibernate HqlToken
  5. kmeans聚类算法matlab_KMeans聚类算法详解
  6. VB.NET的数据库基础编程[zz]
  7. 三万字详解SpringClould高可用流量防护组件Sentinel哨兵(含源码例子)
  8. 荣耀7i android版本,华为荣耀7i有几个版本?荣耀7i不同版本配置介绍
  9. 小微企业智能名片管理小程序
  10. 一级域名和二级域名的区别
  11. 如果制作一个好看的Vlog视频,摄影剪辑声音博主推荐
  12. 【Rocksdb实现分析及优化】事务之Pessimistic ①
  13. 在Win10中安装Openfoam
  14. 水浒108将(按出场顺序)
  15. 树莓派调用百度人脸识别API实现人脸识别
  16. 推荐这几个不错的提取伴奏在线软件给大家
  17. 用java简单画一条线
  18. 如何删掉顽固文件和文件夹
  19. 技能梳理23@语音模块+stm32+nfc
  20. mysql查询数据的总记录数

热门文章

  1. quartz定时器依赖_Spring Quartz定时器 配置文件详解
  2. vue 左右循环滑动_vue实现无缝滚动循环
  3. 论文阅读-FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based
  4. [TensorRT] INTERNAL ERROR: Assertion failed: mem = nullpt
  5. C++ ---------------- 成员函数指针揭秘
  6. 大橙子_【大橙子喜讯】工程学子斩获佳绩!——机械创新设计大赛
  7. 程序解析excel中的图片_Excel表格中链接图片操作方法,以后查看图片点点鼠标就可以了...
  8. BZOJ 2679 [Usaco2012 Open]Balanced Cow Subsets
  9. ajax-》post
  10. CDN---共享单车算啥,阿里云发布共享网络黑科技PCDN,降低视频行业75%的成本