Rsync+Inotify-tools与Rsync+sersync这两种架构有什么区别

1.Rsync+Inotify-tools
(1):Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
(2):rsync在同步的时候,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此,效率很低。

2.Rsync+sersync
(1):sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
(2):rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。
小结:当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。

一、rsync的配置方法。

  http://www.cnblogs.com/lei0213/p/8595112.html(这里面除了inotify其它的都需要安装验证,把inotify换成了sersync)

二、准备环境

  1、查看服务器内核是否支持inotify

ll /proc/sys/fs/inotify

  2、修改inotify默认参数(inotify默认内核参数值太小)

  查看系统默认参数值:

  sysctl -a | grep max_queued_events

  结果是:fs.inotify.max_queued_events= 16384

  sysctl -a | grep max_user_watches

  结果是:fs.inotify.max_user_watches= 8192

  sysctl -a | grep max_user_instances

  结果是:fs.inotify.max_user_instances= 128

  修改参数:

  #sysctl -w fs.inotify.max_queued_events="99999999"

  #sysctl -w fs.inotify.max_user_watches="99999999"

  #sysctl -w fs.inotify.max_user_instances="65535"

  #vi /etc/sysctl.conf #添加以下代码

  fs.inotify.max_queued_events=99999999

  fs.inotify.max_user_watches=99999999

  fs.inotify.max_user_instances=65535

  :wq #保存退出

  

  参数说明:

  max_queued_events:

  inotify队列最大长度,如果值太小,会出现"** Event QueueOverflow **"错误,导致监控文件不准确

  max_user_watches:

  要同步的文件包含多少目录,可以用:find /home/Sync-type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/Sync为同步文件目录)

  max_user_instances:

  每个用户创建inotify实例最大值

三、安装sersync

1、下载sersync安装包

  #cd  /root

  • wget --no-check-certificate https://raw.githubusercontent.com/orangle/sersync/master/release/sersync2.5.4_64bit_binary_stable_final.tar.gz

  #tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz

  #mv GNU-Linux-x86  /usr/local/sersync

其它下载地方http://blog.csdn.net/orangleliu/article/details/46698795

2、进入配置文件目录,留一份备份。 

#cd  /usr/local/sersync
#cp confxml.xml confxml.xml-bak
#vim confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
<sersync>
<localpath watch="/data/www">
<remote ip="192.168.1.239" name="msone"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsynclsl" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="true" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync> <plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin> <plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>

  配置说明:

localpath watch="/data/www/":#源服务器同步目录
name="msone": #目标服务器rsync同步目录模块名称
users="rsynclsl": #目标服务器rsync同步用户名
passwordfile="/etc/rsync.password": #目标服务器rsync同步用户的密码在源服务器的存放路径
remote ip="192.168.1.239": #目标服务器ip,每行一个
failLog path="/tmp/rsync_fail_log.sh" #脚本运行失败日志记录
start="true" #设置为true,每隔600分钟执行一次全盘同步
<auth start="true" #设置true。

  

3、配置完配置文件的时候千万记得,先不要执行下面的脚本,首先执行下面的命令,验证同步。

/usr/local/sersync/sersync2 -d -r -o  /usr/local/sersync/confxml.xml

如果没有出现下面这个文件夹,而且指定目录下的数据也没有同步到对端服务器,下面的配置也就不复存在。

4、如果你上面的配置和验证都没问题,可以下面的配置了。设置开机自启动

#vi /etc/rc.d/rc.local 

/usr/local/sersync/sersync2 -d -r -o  /usr/local/sersync/confxml.xml #设置开机自动运行脚本

# chmod +x /etc/rc.d/rc.local

5、添加脚本监控sersync是否正常

#cd /root
#touch check_sersync.sh
#chmod 755 check.sersync.sh
#vim check_sersync.sh

  

#!/bin/sh
sersync="/usr/local/sersync/sersync2"
confxml="/usr/local/sersync/confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq ];
then
$sersync -d -r -o $confxml &
else
exit ;
fi

check_sersync.sh

#vi /etc/crontab

*/5 * * * * root /root/check_sersync.sh >/dev/null 2>&1  #每隔5分钟执行一次脚本

#重新加载服务

systemctl restart crond.service 

注意:

  1、手动执行check_sersync.sh检测sersync是否运行正常。

  2、如果着急测试,不用等重启服务器后执行,先执行 

/usr/local/sersync/sersync2 -d -r -o  /usr/local/sersync/confxml.xml

  3、在源服务器指定目录下对文件文件夹做出更改,查看目标服务器同步目录下是否同步成功。

  

 -v, --verbose 详细模式输出

 -q, --quiet 精简输出模式

 -c, --checksum 打开校验开关,强制对文件传输进行校验

 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

 -r, --recursive 对子目录以递归模式处理

 -R, --relative 使用相对路径信息

 -b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。

 --backup-dir 将备份文件(如~filename)存放在在目录下。

 -suffix=SUFFIX 定义备份文件前缀

 -u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)

 -l, --links 保留软链结

 -L, --copy-links 想对待常规文件一样处理软链结

 --copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结

 --safe-links 忽略指向SRC路径目录树以外的链结

 -H, --hard-links 保留硬链结

 -p, --perms 保持文件权限

 -o, --owner 保持文件属主信息

 -g, --group 保持文件属组信息

 -D, --devices 保持设备文件信息

 -t, --times 保持文件时间信息

 -S, --sparse 对稀疏文件进行特殊处理以节省DST的空间

 -n, --dry-run现实哪些文件将被传输

 -W, --whole-file 拷贝文件,不进行增量检测

 -x, --one-file-system 不要跨越文件系统边界

 -B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节

 -e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步

 --rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息

 -C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件

 --existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件

 --delete 删除那些DST中SRC没有的文件

 --delete-excluded 同样删除接收端那些被该选项指定排除的文件

 --delete-after 传输结束以后再删除

 --ignore-errors 及时出现IO错误也进行删除

 --max-delete=NUM 最多删除NUM个文件

 --partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输

 --force 强制删除目录,即使不为空

 --numeric-ids 不将数字的用户和组ID匹配为用户名和组名

 --timeout=TIME IP超时时间,单位为秒

 -I, --ignore-times 不跳过那些有同样的时间和长度的文件

 --size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间

 --modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0

 -T --temp-dir=DIR 在DIR中创建临时文件

 --compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份

 -P 等同于 --partial

 --progress 显示备份过程

 -z, --compress 对备份的文件在传输时进行压缩处理

 --exclude=PATTERN 指定排除不需要传输的文件模式

 --include=PATTERN 指定不排除而需要传输的文件模式

 --exclude-from=FILE 排除FILE中指定模式的文件

 --include-from=FILE 不排除FILE指定模式匹配的文件

 --version 打印版本信息

 --address 绑定到特定的地址

 --config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件

 --port=PORT 指定其他的rsync服务端口

 --blocking-io 对远程shell使用阻塞IO

 -stats 给出某些文件的传输状态

 --progress 在传输时现实传输过程

 --log-format=formAT 指定日志文件格式

 --password-file=FILE 从FILE中得到密码

 --bwlimit=KBPS 限制I/O带宽,KBytes per second

 -h, --help 显示帮助信息

rsync详细参数

参考地址:

  https://www.linuxidc.com/Linux/2017-10/147900.htm

  https://www.cnblogs.com/liangml/p/5959571.html

centos7之rsync+serrsync的更多相关文章

  1. centos7只rsync+inotify

    环境: 操作系统:centos7.4 192.168.1.238 客户端 192.168.1.239 服务端 环境准备: 1.安装以下安装包lrzsz是xshell上传下载的安装包,可以忽略. yum ...

  2. CentOS7之Rsync+Inotify架构实现实时同步文件和文件夹

    简介:rsync是用来同步文件和文件夹的,inotify是用来实现监听变动而自动同步的 OS:Centos7.3 服务器端:172.16.13.157 客 户 端  :172.16.13.156 目  ...

  3. CentOS7通过rsync+crontab实现两台服务器文件同步

    centos7系统中已经默认安装rsync 1:主服务器配置 (1)修改rsyncd.conf 配置文件 [root@localhost app]# vi /etc/rsyncd.conf motd ...

  4. CentOS7下Rsync+sersync实现数据实时同步

    近期公司要上线新项目,后台框架选型我选择当前较为流行的laravel,运行环境使用lnmp. 之前我这边项目tp32+apache,开发工具使用phpstorm. 新建/编辑文件通过phpstorm配 ...

  5. centos7搭建rsync

    两台主机(centos7): 172.16.0.109 server 172.16.0.106 client 一.在172.16.0.109上 yum -y install rsync #安装 mkd ...

  6. Centos7利用rsync实现文件同步

    0x01 测试环境 CentOS 7.4 Rsync服务端:192.168.204.130 CentOS 7.4 Rsync客户端:192.168.204.168 0x02 rsync同步方式 第一种 ...

  7. centos7配置rsync+inotify数据实时共享

    关于centos7版本上面搭建rsync服务并且实现实时同步之前一直是在6版本上面搭建rsync服务,在7版本上面折腾了半天.此处总结下inotify下载地址:http://github.com/do ...

  8. centos7下rsync+crontab定期同步备份

    最近需求想定期备份内部重要的服务器数据到存储里面,顺便做个笔记 以前整过一个win下的cwrsync(客户端)+rsync(服务端:存储)的bat脚本 这次整一个Linux下的脚本sh,执行定期自动备 ...

  9. centos7 使用rsync 实现文件同步

    一.服务端(192.168.8.81): 安装软件: yum -y install rsync 创建需同步的目录: mkdir -p /home/root/rsync 编辑配置文件:vim /etc/ ...

随机推荐

  1. spark问题

    使用IDEA运行spark程序,除了需要导入spark的一些依赖包之外,还需要注意的是 当启动spark报找不到可执行的hadoop winutils.exe 可已下载相应版本的winutils.ex ...

  2. mybatis基础(下)

    mybatis和spring整合 需要spring通过单例方式管理SqlSessionFactory spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSe ...

  3. jsp基础语言-jsp表达式

    1.jsp表达式作用:将动态信息显示在页面中. 2.jsp表达式语法:<%=变量或表达式%> 变量:要在页面显示的值的变量名 表达式:其值由服务器计算,计算结果以字符串的形式发送到客户端 ...

  4. 20, CSS 定义选择器

    1. ID 与类 2. 层叠 3. 分组 4. 继承 5. 上下文选择器 6. 子类选择器 7. 其他选择器 8. 结构与注释 20.1 ID 与类 选择器是用于控制页面设计的样式.即 ID 选择器何 ...

  5. 自定义控制台程序导出角色对实体的权限为Excel文件

    本人微信公众号:微软动态CRM专家罗勇 ,回复282或者20181116可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 先上 ...

  6. iOS---------显示和隐藏状态栏的网络活动标志

    //在向服务端发送请求状态栏显示网络活动标志: [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; ...

  7. TortoiseSVN 安装时出现 please install the universal crt

    解决步骤: 1.打开 https://www.microsoft.com/zh-cn/ 2.搜索 universal crt (hotfix kb2999226) 3.点击链接 4.选择适合自己的版本 ...

  8. WPF:间接支持虚拟化的ListBox

    /// <summary> /// 间接实现了虚拟化的ListBox /// 子项必须实现IVisible接口 /// 你可以在IsVisible发生改变时实现一系列自定义动作 /// 比 ...

  9. selenium-确定找到的element唯一(三)

    在python + selenium 中经常会遇到找到的元素不唯一,导致定位到的元素不是预期的或者定位不到元素 解决方法:只要在页面进行确认找到的元素唯一后,再进行操作 页面确认方法: 1.通过htm ...

  10. #017 python实验课第五周

    总结写在最前面: 1.语法还是不会...(每周强制留的C语言一百题都没空写PS.团委诶....)都是现查现用(莫凡Python这个网站特别好用知识点一个视频就一分钟B站的播放器没广告,用啥学啥,还配有 ...