大量文件上的 inotify 和 rsync

大量文件上的 inotify 和 rsync

我正在使用 inotify 监视目录并使用 rsync 在服务器之间同步文件。同步工作正常,内存使用率基本不是问题。但是,最近添加了大量文件(350k),这影响了性能,特别是对 CPU 的影响。现在,当 rsync 运行时,CPU 使用率飙升至 90%/100%,并且 rsync 需要很长时间才能完成,有 650k 个文件正在被监视/同步。

有没有办法加快 rsync 速度,只 rsync 已更改的目录?或者在不同的目录上设置多个 inotifywaits。使用的脚本如下。

更新:我添加了 --update 标志,使用情况似乎基本没有变化

#! /bin/bash

EVENTS="CREATE,DELETE,MODIFY,MOVED_FROM,MOVED_TO"

inotifywait -e "$EVENTS" -m -r --format '%:e %f' /var/www/ --exclude '/var/www/.*cache.*' | (
WAITING="";
while true; do
    LINE="";
    read -t 1 LINE;
    if test -z "$LINE"; then
        if test ! -z "$WAITING"; then
                echo "CHANGE";
                WAITING="";
                rsync --update -alvzr --exclude '*cache*' --exclude '*.git*' /var/www/* root@secondwebserver:/var/www/
        fi;
    else
        WAITING=1;
    fi;
done)

答案1

我最终删除了压缩选项 (z),并将 WAITING 变量增加到 10(秒)。这似乎有所帮助,rsync 仍然会导致 CPU 负载激增,但持续时间较短。感谢unix stackexchange

答案2

您还可以查看同步它有更多选项。您可以使用 lua 脚本,然后说明它需要使用多少个并发进程,也许还有更多可能感兴趣的东西。

这也使用 rsync 和 ionotify。

答案3

您还可以考虑禁用 SSH 压缩并使用要求较低的加密算法,例如:

rsync -e “ssh -c arcfour -x -o 压缩=否” ....

另一个措施是明确设置 ssh 隧道。不过,您需要为此设置一个 Rsync 守护进程。请查看我们的 shell 脚本常问问题. 它也应该适用于您的情况。

相关内容