Linux实时同步文件
Linux系统下实现文件实时同步是运维和开发中的常见需求,尤其在多服务器环境中,通过实时同步,可以确保多台机器上的文件保持一致,从而提升工作效率和数据安全性,本文将详细介绍几种常见的实时同步方案,包括rsync+inotify、sersync以及lsyncd,并分析其优缺点及具体实现步骤。
一、rsync+inotify
1. 技术简介:rsync 是一个高效的文件复制工具,能够进行增量同步;inotify 是 Linux 内核特性,用于监控文件系统事件,两者结合可以实现文件的实时同步。
2. 优点:
高效:rsync 仅传输变化部分,节省带宽。
灵活:可以通过 inotify 监控特定目录和事件类型。
开源免费。
3. 缺点:
配置复杂:需要分别安装和配置 rsync 和 inotify。
性能问题:当文件数量巨大时,inotify 会消耗大量资源,导致性能下降。
4. 实现步骤:
安装 rsync 和 inotify-tools:
sudo apt-get install rsync inotify-tools
设置 rsync:
在远程服务器(被同步机)上安装并配置 rsync:
sudo apt-get install rsync
编辑/etc/rsyncd.conf
文件:
uid = root gid = root use chroot = no max connections = 4 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid [backup] path = /home/work/ comment = backup read only = no list = yes auth users = rsync_backup
创建认证文件:
echo "rsync_backup:password" | sudo tee /etc/rsync.pass sudo chmod 600 /etc/rsync.pass
配置 inotify:
在本地服务器(同步机)上创建脚本/home/inotify.sh
:
#!/bin/bash src="/home/work/" host="192.168.1.3" des="backup" password="/etc/rsync.pass" inotifywait -mrq --timefmt '%Y-%m-%d %H:%M:%S' -e modify,delete,create,move $src | while read newFiles; do rsync -azP --delete $src rsync_backup@$host::$des --password-file=$password done
赋予执行权限并运行脚本:
chmod +x /home/inotify.sh ./home/inotify.sh &
二、sersync
1. 技术简介:sersync 是一款国人开发的实时同步工具,使用 c++ 编写,具有高性能和低资源占用的特点,它对临时文件和重复的文件操作进行了过滤,并支持多线程同步和错误处理机制。
2. 优点:
高性能:采用多线程,适合大文件同步。
过滤机制:自动过滤临时文件和重复操作。
配置简单:使用 XML 配置文件,易于管理和理解。
3. 缺点:
功能有限:不支持多目录同步,排除规则较弱。
更新频率低:软件长期未更新,可能不兼容最新系统。
4. 实现步骤:
下载并安装 sersync:
wget https://github.com/txthinking/sersync/archive/master.zip unzip master.zip cd sersync-master/build make sudo make install
配置 sersync:
创建配置文件sersync.xml
:
<fileSystem xfs="false"/> <filter start="true"> <exclude expression="(.*).out"></exclude> <exclude expression="(.*).gz"></exclude> <exclude expression="^logs/*"></exclude> </filter> <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="false"/> <modify start="false"/> </inotify> <sersync> <localpath watch="/home/work/"> <remote ip="192.168.1.3" name="backup"/> </localpath> <rsync> <commonParams params="-artuz"/> <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/> </rsync> </sersync>
启动 sersync:
sersync -c /path/to/sersync.xml &
三、lsyncd
1. 技术简介:lsyncd 是 Google 的一款开源实时同步工具,使用 Lua 语言编写,封装了 inotify 和 rsync,具备高效的文件同步能力和简单的配置方式,它解决了 inotify+rsync 在海量文件下的低效问题。
2. 优点:
高效稳定:优化了文件频繁变动情况下的性能。
配置简单:使用 Lua 脚本配置,易于理解和修改。
灵活性强:支持多种工作模式和丰富的参数配置。
3. 缺点:
依赖较多:需要安装 Lua 和相关依赖库。
学习曲线:相比 rsync+inotify,需要一定的学习成本。
4. 实现步骤:
安装 lsyncd:
sudo apt-get install lua-devel asciidoc cmake git clone https://github.com/axkibe/lsyncd.git cd lsyncd make && sudo make install
配置 lsyncd:
创建配置文件lsyncd.conf
:
settings { logfile = "/var/log/lsyncd.log", statusFile = "/var/log/lsyncd-status.log", statusInterval = 60, ssh { connect_timeout = 60, transfer_window_size = 32m, compression = "none", max_ports = 1, }, rsync { timeout = 600, compress = false, compressLevel = 1, compressRsh = false, maxDeleteDelay = 3600, deleteMode = deleting, copyDirlinks = true, copySymlinks = true, tempDir = "/tmp/", copyUnreadableLinks = true, recursionLimit = 10000, maxProcesses = 100, preferBodyOverHeader = false, allowNonExistingSource = false, allowNonExistingDest = false, storeSid = true, storeRsh = false, storeRsyncServers = false, storeSocketPaths = false, storeSpecialFiles = false, sshSubsystem = "sftp", } } sync { default.rsyncssh, source = "/home/work/", host sync_int = "192.168.1.3", host haproxy = "192.168.1.4", dest = "/home/work/", excludeFrom = "/path/to/exclude.list", rsync = {}, rsyncTimeout = 300, delete = true, delay = 0, delayedDelete = true, compress = false, linkDestination = true, rsyncRSH = "/usr/bin/rsync", rsyncRSHArgs = ["--rsh=ssh"], }
启动 lsyncd:
lsyncd -config /path/to/lsyncd.conf &
四、归纳与FAQs
1. 归纳:以上介绍了三种常见的 Linux 实时同步文件的方法:rsync+inotify、sersync 和 lsyncd,根据实际需求选择合适的工具,可以有效提升文件同步的效率和可靠性,对于大规模文件同步,建议优先考虑 lsyncd;对于高性能和多线程需求,可以选择 sersync;对于简单且灵活的配置,rsync+inotify 是不错的选择。
2. FAQs:
Q1:如何更改 sersync 的监控目录?
A1:在sersync.xml
文件中,修改<localpath watch="/home/work/">
标签内的路径即可,改为<localpath watch="/new/path/">
。
Q2:如何排除特定文件或目录不被同步?
A2:在sersync.xml
中,使用<exclude expression="pattern"></exclude>
标签来添加排除规则,排除所有.tmp
文件:<exclude expression=".*.tmp"></exclude>
,在 lsyncd 中,可以在配置文件中使用excludeFrom
指定排除列表文件,在 rsync+inotify 中,可以使用rsync
的--exclude
参数。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1267103.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复