场景
主机挂载了分布式文件系统,由于需要更换分布式文件系统,需要将分布式文件系统内2T的数据拷贝到主机本地,并实现增量同步。试了几种工具,感觉还是lsyncd最简单,最适合本地文件夹之间的增量同步,甚至可以做到实时同步。
具体步骤
1.安装lsyncd,修改inotify触发机制监控的文件数。
yum install lsyncd
echo fs.inotify.max_user_watches=50000000 >> /etc/sysctl.conf
sysctl -p
如果fs.inotify.max_user_watches值不够大,会报错:
Fri Aug 14 15:06:27 2020 Error: Terminating since out of inotify watches.
Consider increasing /proc/sys/fs/inotify/max_user_watches
2.编辑/etc/lsyncd.conf,内容如下:
settings {
statusFile = "/var/log/lsyncd/lsyncd.stat",
statusInterval = 1,
logfile ="/var/log/lsyncd/lsyncd.log",
}
sync{
default.rsync,
source = "/src",
target = "/dst",
delay = 300,
rsync = {
bwlimit = 512,
}
}
整个配置文件分为两部分,settings为全局变量,可以有多个sync,sync之间是互相独立的,每个sync都有不同的源或目的文件夹。
statusFile记录了Inotify和具体同步的文件夹。sync有那么几种模式,本地文件夹之间同步可以选择default.direct或default.rsync。delay=300表示当src文件夹内容进行了修改,300秒之后开始同步到dst文件夹,delay值默认是15秒,可以根据需求调整。bwlimit=512表示同步的最大带宽为512kb/s,这是rsync的一个参数,所以被包含在rsync内。
3.创建文件夹/var/log/lsyncd,/dst。
4.启动lsyncd。
注意
如果数据量很大,比如T级,lsyncd的启动时间会比较长,如下图日志所示,等了半小时才开始同步数据。最后,对于这种工具,根据工作需要即学即用就行。