zl程序教程

您现在的位置是:首页 >  Java

当前栏目

inotify-rsync文件实时同步问题记录

2023-02-18 16:48:38 时间

1. 在inotify-tools配合rsync实现文件实时同步方案中,操作小文件未发现弊病,而在上传一个稍微大点的文件,比如十几二十几兆的文件时,弊病就会显露:

报错日志

如图分析原因:通过ftp或者其他客户端上传一个稍大点的文件到文件同步监控目录下,inotifywait会实时监控到此目录下该文件的创建及修改,此时上传文件对文件修改可能是每1024个字节一次写入(可能更多,根据写文件客户端而定),因此在一定时间内造成了大量的并发,因为每次修改都会触发inotifywait检测到MODIFY类型的文件操作,同时也会调用rsync传输工具对该文件进行传输,在大量并发的情况下,对该文件的文件传输也会产生大量并发的传输,会造成io阻塞。 修改方案:在正常对文件的操作下,都会有CLOSE_WRITE,因此我们不需要让inotifywait监控MODIFY类型的事件,就不会触发大量并发的文件传输。 附上部分文件同步监控shell代码:

    /usr/local/bin/inotifywait -mrq --format '%Xe %w %f' \
        -e create,delete,attrib,close_write,move \  #此处删除modify事件,避免引发大量并发同步
        ${path} | while read file;
    do
        rsync_changed "${file}" &
    done
    echo "inotifywait watch ${path} exit with $?" >> ${LOGFILE}