rsync. Проблема зеркалирования данных одного каталога с нескольких серверов
При создании бэкапов при помощи программы rsync выполняется зеркалирование некоторого каталога. При этом на сервере-приемнике удаляются файлы и каталоги отсутствующие на сервере-источнике.
Если выполняются бэкапы нескольких серверов и данные сливаются в один каталог, например с нескольких рабочих серверов бэкапятся каталоги /var/servers/ и на бэкап-сервере они тоже складываются в каталог /var/servers/, то на бэкап-сервере в результате окажутся только данные с сервера, который зеркалировался последним. Причина такого неожиданного результата проста – удаление устаревших файлов и каталогов.
Идет зеркалирование с первого сервера и с него скачиваются все данные. Потом запускается бэкап второго сервера и процесс видит что в каталоге лежат какие-то данные, которых нет на том сервере с которого он должен сделать бэкап. Значит устарели! И удаляет! Затем выполняет зеркалирование второго сервера. И переходит к третьему. В результате остаются данные только с последнего сервера.
Решить проблему можно при помощи такого скрипта:
#!/usr/local/bin/bash
repo=rsync://backup@server1.net/servers/
cd /var
# чтобы в ручном режиме с отладкой, а из крона без :)
if [[ -z "$1" ]]; then
VV=vv;
fi;
list=`/usr/local/bin/rsync --list-only $repo | awk '{ if (($1 ~ /^d/) && ($5 !~ /^\./)
) { $1=$2=$3=$4=""; print substr($0,5);} }'`
for dir in $list
do
/usr/local/bin/rsync -a$VV --delete $repo$dir servers
done
Скрипт сначала запрашивает все подкаталоги содержащиеся в репозитории. А затем запускает процедуру зеркалирования для каждого из подкаталогов. В результате данные обновляются внутри подкаталогов, не затрагивая данные других серверов.
Недостаток этого способа в том, что не происходит зеркалирование файлов расположенных в самом каталоге /var/servers/, только подкаталоги.
Комментарии
Оставить комментарий
your_ip_is_blacklisted_by sbl.spamhaus.org