[Linux]lsyncd+rsync实时同步备份

小言

网上有很多种文件同步备份策略。

最容易想到的策略就是rsync+inotify,这个策略有个弊端,就是实时性太差了,而且rsync内部实行同步的方式是递归扫描整个文件夹并保存一个相关的目录树数据传给备份服务器,让备份服务器进行对比知道应该同步哪些数据;然而,这个目录树数据并不是很小的,如果是一个文件结构很复杂的文件夹需要同步,而一次只改了一个文件,那么目录树数据的大小可能都是改动文件大小的几倍、几十倍甚至几百倍,如此一来,这样的同步策略的效率就很差了。再者,inotify能对同步文件夹进行实时监控,没发生一次文件变化,rsync就会执行一次。

针对上述的问题,网上出现了rsync+lsyncdlsyncd其实集合了rsync+inotify,并做了优化操作,其中做的事情其实也和inotify差不多,也能监控同步文件夹的变化,不过它不再没发生一次变化就执行rsync一次,而是通过时间延迟累计触发事件次数来确定何时执行rsync。这样一来,就是性能效率和数据实时性的博弈了,增加时间延迟和累计触发事件次数,就会提高性能和效率,但同时会使数据实时性降低。如此看来,它比rsync+inotify的好处在于配置性了。rsync+inotify已经定死了性能效率和数据实时性,而rsync+lsyncd针对不同现实情况进行参数配置来达到最优的性能效率和数据实时性。

本文主要说的是rsync+lsyncd的配置,上面说到lsyncd已经包含了rsync。那为什么标题还是rsync+lsyncd这样,因为lsyncd是执行在主服务器(即待备份服务器),而rsync是主服务器和备服务器(备份服务器)都需要执行的,自然主服务器的rsync由lsyncd控制,而备服务器的呢?所以笔者认为标题rsync+lsyncd中rsync更多是偏向于说明备服务器。

工具

  • 主服务器中
  1. rsync
  2. lsyncd
  • 备服务器中
  1. rsync

主服务器配置

1. lsyncd安装请看

传送门:Linux中lsyncd安装

2. 进入lsyncd安装目录,笔者这里为/usr/lcoal/lsyncd

1
shell> cd /usr/local/lsyncd

可看到4个文件夹,分别的作用为

  • bin:存放lsyncd执行文件
  • etc:存放lsyncd配置文件
  • man:存放lsyncd说明文件
  • var:存放lsyncd日志、状态、进程信息文件

3. 修改lsyncd配置文件,如果没有该配置文件则创建一个

1
shell> vi etc/lsyncd.conf

写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
settings {
logfile ="/usr/local/lsyncd/var/lsyncd.log",
statusFile ="/usr/local/lsyncd/var/lsyncd.status",
pidfile ="/usr/local/lsyncd/var/lsyncd.pid",
inotifyMode ="CloseWrite or Modify",
maxProcesses = 5,
-- nodaemon =true,
}

sync {
default.rsync,
source = "/data/tomcat7067/webapps/",
target = "root@10.13.31.42::syncfile_from_10_13_49_205",
-- excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file = "/etc/lsyncd.secrets",
}
}

(•̀ᴗ•́)و ̑̑

Share