项目有文件实时同步备份的需求,做了一下调查,比较好的解决方法是使用lsyncd工具。这里主要记录一下遇到的问题及解决方法。

lsyncd 的相关介绍和对比可见:

lsyncd实时同步搭建指南——取代rsync+inotify

Linux下同步工具inotify+rsync使用详解

Linux文件系统Inotify机制

lsyncd官方文档:

Lsyncd - Live Syncing (Mirror) Daemon


1、安装问题

安装时需要先安装 lua和cmake,可直接使用apt-get:

apt-get install lua5.1

apt-get install lua5.1-dev

apt-get install cmake

接着可以下载 lsyncd-2.1.6 版本解压安装,解压后进入改目录:

cmake ,

make

make install

即可完成安装。


2、使用问题

如果使用在大型系统上,文件数量多、大,文件变化频繁,则要修改一些系统参数。

因为lsyncd 有用到 inotify监听,其中相关的主要是这几个参数:

#ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Oct 9 09:36 max_queued_events
-rw-r--r-- 1 root root 0 Oct 9 09:36 max_user_instances
-rw-r--r-- 1 root root 0 Oct 9 09:36 max_user_watches

/proc/sys/fs/inotify/max_user_instances 默认值: 128 指定了每一个real user ID可创建的inotify instatnces的数量上限
/proc/sys/fs/inotify/max_user_watches 默认值: 8192 指定了每个inotify instance相关联的watches的上限
/proc/sys/fs/inotify/max_queued_events 默认值: 16384,Inotify 管理的队列的最大长度

如果监听的文件数量大,则增大 max_user_watches(否则可能启动失败),如果文件变化频繁,则增大max_queued_events(否则队列溢出,导致部分文件未同步或lsyncd重启) :

一次性方法:

sysctl fs.inotify.max_user_watches=xxxxxx

长久有效:

fs.inotify.max_user_watches=xxxxxx 写进 /ect/sysctl.conf,然后 sysctl -p 打印查看

(注意:max_queued_events 修改后,需要重启lsyncd才能生效----2018-6-14 更新说明)

参考:

linux 高效的文件系统事件监控 内核级解析方案 inotify

Lsyncd causes load while monitoring large filesystem.


3、基本参数介绍

settings
里面是全局设置,--开头表示注释,下面是几个常用选项说明:

  • logfile 定义日志文件
  • stausFile 定义状态文件
  • nodaemon=true 表示不启用守护模式,默认
  • statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒
  • inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是ModifyCloseWrite or Modify
  • maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程
  • maxDelays 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到

sync
里面是定义同步参数,可以继续使用maxDelays来重写settings的全局变量。一般第一个参数指定lsyncd以什么模式运行:rsyncrsyncsshdirect三种模式:

  • default.rsync :本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程;
    default.direct :本地目录间同步,使用cprm等命令完成差异文件备份;
    default.rsyncssh :同步到远程主机目录,rsync的ssh模式,需要使用key来认证

  • source 同步的源目录,使用绝对路径。

  • target 定义目的地址.对应不同的模式有几种写法:
    /tmp/dest :本地目录同步,可用于directrsync模式
    172.29.88.223:/tmp/dest :同步到远程服务器目录,可用于rsyncrsyncssh模式,拼接的命令类似于/usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET,剩下的就是rsync的内容了,比如指定username,免密码同步
    172.29.88.223::module :同步到远程服务器目录,用于rsync模式
    三种模式的示例会在后面给出。

  • init 这是一个优化选项,当init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是true

  • delay 累计事件,等待rsync同步延时时间,默认15秒(最大累计到1000个不可合并的事件)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件)

  • excludeFrom 排除选项,后面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是简单的排除,可以使用exclude = LIST
    这里的排除规则写法与原生rsync有点不同,更为简单:
    • 监控路径里的任何部分匹配到一个文本,都会被排除,例如/bin/foo/bar可以匹配规则foo
    • 如果规则以斜线/开头,则从头开始要匹配全部
    • 如果规则以/结尾,则要匹配监控路径的末尾
    • ?匹配任何字符,但不包括/
    • *匹配0或多个字符,但不包括/
    • **匹配0或多个字符,可以是/

rsync
(提示一下,deleteexclude本来都是rsync的选项,上面是配置在sync中的,我想这样做的原因是为了减少rsync的开销)

  • bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)
  • compress 压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false
  • perms 默认保留文件权限。
  • 其它rsync的选项

其它还有rsyncssh模式独有的配置项,如hosttargetdirrsync_pathpassword_file,见后文示例。rsyncOps={"-avz","--delete"}这样的写法在2.1.*版本已经不支持。

lsyncd.conf可以有多个sync,各自的source,各自的target,各自的模式,互不影响。

引用:

lsyncd实时同步搭建指南——取代rsync+inotify


更新至 2018-06-06

文件同步工具 lsyncd2.1.6 安装使用问题的更多相关文章

  1. 文件同步工具BT Sync介绍和使用说明

    BT Sync介绍 BT 下载,相信大伙儿都知道的.今儿个要介绍的 BT Sync,跟 BT 下载一样,都是 BitTorrent 公司发明滴玩意儿,都是采用 P2P 协议来进行传输. 简而言之,BT ...

  2. gofs使用教程-基于golang的开源跨平台文件同步工具

    概述 gofs是基于golang开发的一款开箱即用的跨平台文件同步工具,开源地址如下:https://github.com/no-src/gofs,欢迎点个Star或者提交Issue和PR,共同进步! ...

  3. Rsync 3.1.0 发布,文件同步工具

    文件同步工具Rsync 3.1.0发布.2013-09-29 上一个版本还是2011-09-23的3.0.9 过了2年多.Rsync基本是Linux上文件同步的标准了,也可以和inotify配合做实时 ...

  4. windows文件同步工具

    windows 文件同步工具: realTimesync freefilesync second copy   second copy注册码: Name:爱学府软件园 注册码:15BF-E46C-67 ...

  5. Lsyncd - 实时文件同步工具(精译)

    原文: http://axkibe.github.io/lsyncd/ 描述 Lsyncd监视本地目录树事件监视器接口(inotify或fsevents).它聚集并组合事件几秒钟,然后生成一个(或多个 ...

  6. Rsync文件同步工具

    前段时间因公司需求,需要把备份的文件进行同步保存,后面就想到了我们大家都最熟悉的文件同步工作Rsync,于是就捣鼓了一下午时间,然后总结了下大概过程和参数详情. 首先了解了下rsync同步的大致原理: ...

  7. Microsoft SyncToy 文件同步工具

    Microsoft SyncToy SyncToy 是由 微软 推出的一款免费的文件夹同步工具.虽然名字中有一个 Toy,但是大家可千万不要误以为它的功能弱爆了.实际上,我感觉这款软件还真是摆脱了微软 ...

  8. Duplicate Manager Pro for Mac(重复文件查找工具)破解版安装

    1.软件简介    Duplicate Manager Pro 是 macOS 系统上一款重复文件查找工具,可以帮你在 Mac 电脑上查找出磁盘上面的重复文件,然后让你对这些重复文件进行判断并删除,使 ...

  9. Linux文件同步工具之rsync

    学习背景 1.最近公司的项目在使用jenkins做自动化构建,因为jenkins在构建时是比较耗性能的,便单独使用了一台服务器做构建服务器.但是个人觉得这样成本过高,单独拿一台服务器来构建并且该服务器 ...

随机推荐

  1. 通俗理解BFS和DFS,附基本模板

    1.BFS(宽度优先搜索):使用队列来保存未被检测的节点,按照宽度优先的顺序被访问和进出队列 打个比方:(1)类似于树的按层次遍历 (2)你的眼镜掉在了地上,你趴在地上,你总是先摸离你最近的地方,如果 ...

  2. 使用CDN后配置nginx自定义日志获取访问用户的真实IP

    问题描述:         新上线了一个项目,架构如下(简单画的理解就好): 问题是:负载前面加上CDN后负载这里无法获取客户的真实访问IP,只能过去到CDN的IP地址: 问题解决: 修改nginx日 ...

  3. 在WebGL场景中进行棋盘操作的实验

    这篇文章讨论如何在基于Babylon.js的WebGL场景中,建立棋盘状的地块和多个可选择的棋子对象,在点选棋子时显示棋子的移动范围,并且在点击移动范围内的空白地块时向目标地块移动棋子.在这一过程中要 ...

  4. 有关JOIN ON的心得体会

    在第一家公司工作大概有一年之后,我的上司开始让我负责一个项目了. 说起这个项目,其实就是类似一个报表系统的抽数据的活.我的主要工作就是将我们公司产生的数据进行抽取清理,然后生成一些带有分析性质的数据. ...

  5. Cocos2d-x的跨平台原理

    为了充分发挥硬件性能,手机游戏通常使用Native App开发模式,这就造成开发商要为iOS 和Android平台用户开发不同的应用,无论是产品迭代还是运行维护都非常麻烦.Cocos2d-x在iOS, ...

  6. Vue.js 相关知识(基础)

    1. Vue.js 介绍 Vue,读音 /vjuː/,类似于 view),是一套用于构建用户界面的渐进式框架(重点在于视图层). 作者:尤雨溪 注:学习 vue.js 时,一定要抛弃 jQuery 的 ...

  7. CentOS赋予一个普通用户root权限

    http://www.linuxidc.com/Linux/2012-07/64530.htm

  8. 一个demo 理解 vuex

    相比接触vue的同学们已经看了官方文档了.这里我用一个简单的demo来阐述下vuex的知识点,虽然简单,但是容易理解.也加深自己的记忆. 用脚手架建立个项目vue init webpakc-simpl ...

  9. [buaa-SE-2017]个人作业-Week1

    个人作业-Week1 Part1:教材中不懂的问题 1.根据书中"除了前20的学校之外,计科和软工没有区别"所以计算机科学这个专业也许在我们学校是和软件工程有区别的,但是可以料想的 ...

  10. 预备作业02 : 体会做中学(Learning By Doing)

    1.你有什么技能比大多人(超过班级90%以上)更好? 我认为我是一个比较爱摄影和绘画的人,虽然说说不上技术精湛,但还是能拿出手的. 2.针对这个技能的获取你有什么成功的经验? 接触摄影和绘画都是因为喜 ...