Назад | Перейти на главную страницу

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

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

Есть ли способ ускорить 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)

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

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

В итоге я удалил параметр сжатия (z) и увеличил значение WAITING var до 10 (секунд). Похоже, это помогло, rsync по-прежнему увеличивает нагрузку на процессор, но срок его службы короче. Кредит идет на ответ на unix stackexchange

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

rsync -e "ssh -c arcfour -x -o Compression = no" ....

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