inotify и rsync для большого количества файлов

inotify и rsync для большого количества файлов

Я использую inotify для наблюдения за каталогом и синхронизации файлов между серверами с помощью rsync. Синхронизация работает отлично, и использование памяти в основном не является проблемой. Однако недавно было добавлено большое количество файлов (350 тыс.), и это повлияло на производительность, особенно на ЦП. Теперь, когда работает rsync, использование ЦП резко возрастает до 90%/100%, и rsync выполняется долго, наблюдается/синхронизируется 650 тыс. файлов.

Есть ли способ ускорить 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 var до 10 (секунд). Кажется, это помогло, rsync все еще резко увеличивает нагрузку на процессор, но это длится меньше. Заслуга в ответе наunix stackexchange

решение2

Вы также можете рассмотретьlsyncdу которого больше опций. Вы можете использовать скрипты lua, а затем сказать, сколько параллельных процессов ему нужно использовать и, возможно, еще что-то, что может быть интересно.

Здесь также используются rsync и ionotify.

решение3

Вы также можете рассмотреть возможность отключения сжатия SSH и использования менее требовательного алгоритма шифрования, например:

rsync -e "ssh -c arcfour -x -o Сжатие=нет" ....

Еще одной мерой может быть настройка вашего туннеля ssh явно. Однако для этой цели вам нужно настроить демон Rsync. Проверьте скрипт оболочки на нашемЧасто задаваемые вопросы. Он также должен быть пригоден для использования в вашем случае.

Связанный контент