使用lsyncd来完成实时同步文件
实际上
Lsyncd
就是对inotify
和rsync
工具的一个二次封装,只是简化使用操作而已!
使用lsyncd来完成实时同步
1. 工具简介
使用我能够帮你干一些什么事情呢?
- [1] 功能和特性
最开始我们先介绍一下该工具的功能和特性,对以后使用做一个基础说明。Lsyncd 工具 使用文件系统事件接口 inotify
或 fsevents
来监视对本地文件和目录的更改,在很短的时间内 Lsyncd
将这些事件整理,然后生成一个或多个进程以将更改的内容同步到远程文件系统中,默认的同步方法是使用 rsync
工具。Lsyncd
对于将数据从安全区域同步到不太安全的区域特别有用。
Lsyncd
是一种轻量级的实时镜像解决方案,其安装相对容易,且不需要新的文件系统或块设备的支持。同时,Lysncd
同步的时候还不会妨碍本地文件系统的运转。
作为 rsync
的替代方案,Lsyncd
还可以通过 rsync+ssh
方式推送文件。当文件或目录重命名或移动到本地树中的新位置时,rsync+ssh
可以更加高效的同步。相反,使用 rsync
则通过删除旧文件然后重新传输整个文件来执行移动。
可以通过配置文件实现细粒度的自定义。自定义操作配置甚至可以从头开始编写,从 shell
脚本到用 Lua
语言编写的代码。因此,简单,强大和灵活的配置是可能的。需要注意的是,在 Lsyncd2.2
的版本中要求同步双方的主机上的 rsync
版本不低于 3.1
方可正常使用。
- [2] 替代的方案
当然,同步工具很有很多种,且功能和适用性上都各有不同。如果要同步数据库,我们可以选择 DRBD 工具,因为它在块设备级别上运行且非常适合用于同步负载较重的系统。而 Mirror 工具 是一种异步同步的工具,它像 Lsyncd
一样使用 inotify
作为事件通知。但是,其主要区别在于是专门为 master-master
的使用方式而开发的,因此在两个系统上运行守护进程,使用自己的传输层而不是 rsync
工具。
- [3] 获取并编译
1 2 3 4 5 6 7 8 9 10 11 12 | # 官方仓库地址 $ git clone https://github.com/axkibe/lsyncd.git # 系统需求需要 Lua >= 5.2 cmake >= 2.8 rsync >= 3.1 # 编译方式 $ cmake . $ make $ sudo make install |
2. 使用方式
你应该怎么使用我来完成工作呢?
- [1] 在测试时使用
1 2 3 4 5 6 7 8 9 10 | # 在测试配置时使用-nodaemon选项,Lsyncd将不会作为为守护程序运行 # 所有日志消息都是打印在控制台(stdout和stderr)的已配置日志记录工具 # 这里的CONFIGFILE参数表示Lsyncd工具的配置文件路径,需使用绝对路径 $ lsyncd -nodaemon CONFIGFILE # 将会记录又有的同步信息,输出内容会变得很多 $ lsyncd -log all CONFIGFILE # 将只记录Lsyncd生成的所有进程的命令 $ lsyncd -log Exec CONFIGFILE |
- [2] 本地文件之间的同步
1 2 | # 使用rsync工具同步 $ lsyncd -rsync /home/USER/src /home/USER/dst |
- [3] 本地文件同步到远程 - rsync
1 2 3 | # 使用rsync工具同步 # 同步本地的home目录到远程主机的share目录中去 $ lsyncd -rsync /home remotehost::share/ |
- [4] 本地文件同步到远程 - ssh
1 2 3 4 5 6 | # 使用ssh工具同步 # 是要注意使用ssh的方式需要和rsync有区别 # REMOTEHOST => 本地源目录 # TARGETDIR => 远程主机和目标目录 $ lsyncd -rsyncssh /home REMOTEHOST TARGETDIR $ lsyncd -rsyncssh /home remotehost.org backup-home/ |
- [5] 可以同时同步多个文件路径
1 2 3 | # 多个目录同步 $ lsyncd -rsync /home/USER/src remotehost1:dst \ -rsync /home/USER/src remotehost2:dst |
3. 全局设置 - settings
如何更好地让我配合你的工作呢?
Lsyncd
的配置文件遵从 Lua
的语法格式,它的设计简单而有效,有非常多的配置选项。为了更改更好地满足不同用户的使用需求,可以在不同的层上完成 Lsyncd
的配置。较低的层增加了适应性,同时界面变得更具吸引力。
配置文件分为四个层级,越往下越底层,如需更加具体的操作可以向下配置,如自定义同步行为等方式。我们这里只介绍全局配置和默认配置,其他可以参见官方文档。
- [1] 全局设置
1 2 3 4 5 6 | # 全局配置的参数应该很清楚,不需要解释了 settings { logfile = "/tmp/lsyncd.log", statusFile = "/tmp/lsyncd.status", nodaemon = true, } |
- [2] 参数说明
参数名称 | 对应值 | 解释说明 |
---|---|---|
logfile | FILENAME | 日志输出信息存储到此文件 |
pidfile | FILENAME | 程序运行的 PID 存储到此文件 |
nodaemon | BOOL | 将不会作为为守护程序运行 |
statusFile | FILENAME | 定期将状态报告写入此文件 |
statusInterval | NUMBER | 在多少秒过后将状态写入文件,默认为10s |
logfacility | STRING | 日志类型,默认格式为user |
logident | STRING | 日志标识,默认为lsyncd |
insist | BOOL | 及时由于之前无法访问导致失败但启动时会继续运行 |
inotifyMode | STRING | 设置操作系统侦听的事件类型 |
maxProcesses | NUMBER | 指定同步产生的进程数量 |
注释:事件类型主要有Modify
/CloseWrite
/CloseWrite or Modify
三种
4. 默认配置 - sync
如何更好地让我配合你的工作呢?
这一次就是使用 Lsyncd
工具主要需要个性化配置的文件,其中最基础的同步模式主要有三种,分别是 rsync
、rsyncssh
和 direct
。