CentOS 7使用Lsyncd实现文件实时同步备份
说明:Lsyncd
是基于inotify + rsync
的开源同步软件,支持增量同步,之前也讲到过通过Rsync
同步方法,可参考:通过ssh使用Rsync同步两个vps的文件,而本文所谈到的Lsyncd
与Resilio Sync
相比优势是更加安全、占用资源更低,多种参数自定义配置更加方便。劣势是配置要比Resilio Sync
麻烦一点,如果多台服务器的情况下速度可能不及Resilio Sync
,因为Resilio Sync
使用了P2P
分享。
Lsyncd
官方帮助手册:https://axkibe.github.io/lsyncd/
项目地址:https://github.com/axkibe/lsyncd
注意:本教程在CentOS 7
系统测试,如果是CentOS 6
系统可能部分地方略有不同,但流程和步骤都一样。
准备
有两台CentOS 7
服务器,其中A:192.168.1.100
文件需要实时同步到B:192.168.1.200
。
安装rsync
Lsyncd
基于rsync
,且要求rsync >= 3.1
,可输入rsync -v
查看当前版本,如果不符合要求,按照以下方法升级rsync
版本,两台服务器A/B
均要安装rsync
。
升级步骤
#查看当前rsync版本 rsync -v #如果版本太低,直接卸载 yum -y remove rsync #下载rsync源码 wget #解压 tar -zxvf rsync-3.1.2.tar.gz #进入目录 cd rsync-3.1.2 #编译安装 ./configure make install #查看是否升级成功 rsync -v
设置密钥登录
如果想要将A
的数据同步到B
,A
必须拥有免密码登录B
的权限,可以设置密钥登录来完成。只需要两条命令即可,下面的命令在A
服务器执行:
#生成密钥文件SSH-KEYgen -t rsa#将公钥拷贝到Bssh-copy-id username@remote-server#测试ssh username@remote-server
username
为B
服务器用户名,remote-server
为B
服务器IP
地址,如果服务器不是使用的22
作为ssh
端口,需要-p
参数指定端口号。更多说明可参考:SSH无密码登录:只需两个简单步骤 (Linux)。
安装epel仓库
CentOS 7
内置的源并没有包括Lsyncd
,可以自行编译安装Lsyncd
,不过更简单的办法是先安装epel
源,就可以直接yum
安装了,以下命令再A
服务器执行。
yum -y install epel-release
安装lsyncd并配置
如果已经安装了epel
仓库,直接输入下面的命令安装lsyncd
即可,一下命令在A
服务器执行。
#安装lsyncdyum -y install lsyncd#查看lsyncd版本lsyncd --version
安装完成后配置文件位于/etc/lsyncd.conf
,会看到如下的内容,其中--
是注释符。
---- -- User configuration file for lsyncd. -- -- Simple example for default rsync, but executing moves through on the target. -- -- For more examples, see /usr/share/doc/lsyncd*/examples/-- sync{default.rsyncSSH, source="/var/www/html", host="localhost", targetdir="/tmp/htmlcopy/"}
vi /etc/lsyncd.conf
修改配置文件,注释或删除掉默认的最后一行,然后添加自己的配置。
settings { logfile = "/tmp/lsyncd.log", statusFile = "/tmp/lsyncd.status", insist = true, statusInterval = 10} sync { default.rsyncSSH, source="/home/test1", host="192.168.1.200", targetdir="/home/test2", rsync = { archive = true, compress = false, whole_file = false }, SSH = { port = 22 } }
继续输入命令lsyncd -nodaemon /etc/lsyncd.conf
运行查看下是否有报错,如果有报错根据报错情况检查修改,如果没有报错直接退出后输入命令:systemctl start lsyncd
启动lsyncd
即可。
部分参数说明
settings
为全局配置,部分参数如下:
logfile:日志文件路径 statusFile:进程路径 insist:继续运行,即使有失败的目标。 statusInterval:多少秒写入文件,默认是10s
sync
为同步配置,部分参数如下:
source:本地文件目录 host:远程服务器地址 targetdir:远程目标目录 port:目前主机SSH端口号,默认为22
相关命令
#启动 systemctl start lsyncd #停止 systemctl stop lsyncd #重启 systemctl restart lsyncd #设置开机自动启动 systemctl enable lsyncd