
Я использую 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. Проверьте скрипт оболочки на нашемЧасто задаваемые вопросы. Он также должен быть пригоден для использования в вашем случае.