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

Как сделать резервную копию каталога сервера удаленно?

Я пытаюсь создать резервную копию удаленного сервера. Это моя конфигурация:

Server1  (webserver)
Server2  (backupserver)

Это мой маленький сценарий. Он запускается с server2:

#!/bin/bash

date=`date +%F`
basepath=/var/backup
webfolder=$basepath/$date/websites/

for f in $(ssh root@server1 "ls -l /var/www/ | egrep '^l'")
do
    if [[ $f = *.* ]]
    then
        echo "processing $f ";
        ssh root@server1 "tar zcf - /var/www/$f/web/" > $webfolder/$f.tar.gz
    fi
done;

Проблема в том, что он слишком медленный! Как мне ускорить этот скрипт?

Обновления:

Я уже безуспешно использовал Rsync. Это команда, которую я использую:

/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    --rsh="/usr/bin/ssh -p 22" root@123.123.123.123:/var/www \
    /home/backups/daily.0/webserver/ 

Серверы подключаются через гигабитный коммутатор Dell. Оба сервера имеют сетевую карту Gigabit. Они находятся в одной подсети.

Решение rSync:

В конце концов, благодаря предложениям, я пошел по этому пути:

  1. Установите rsync во все окна debian
  2. Установите rsnapshot на резервный сервер
  3. Настройте rsync deamon в окне debian (за исключением сервера резервного копирования)
  4. Установите файл конфигурации cron rsnapshot

Жду первый раз много времени для первого бекапа.

Дистрибутив: серверы Debian

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

Очень легко запустить rsync -vvarP root@server1:/var/www/ root@server2:/var/backup/

Я не думаю, что это наиболее вероятное объяснение, но, прочитав проблему, с которой вы столкнулись с rsync, вполне возможно, что вы страдаете от несоответствия дуплексного режима на одном или обоих соединениях NIC-коммутатора.

Попробуйте сделать netstat -in на обоих серверах и проверьте количество ошибок при передаче. Ненулевые ошибки передачи часто сигнализируют о несоответствии дуплексного режима, и одним из следствий этого является разрешение медленных, малых пакетов (интерактивных) соединений беспрепятственно, но жесткое ограничение полноскоростных соединений для передачи больших объемов данных.

редактировать (после вашего комментария ниже): Хорошо, это не симптом несоответствия дуплексного режима, поэтому проигнорируйте мое предложение. По-прежнему было бы полезно выяснить, в чем узкое место, когда вы прямо сейчас попробуете rsync-over-ssh, поскольку это не процессор.

Я бы посоветовал вам использовать rsnapshot. Он также основан на rsync. Я использую его для резервного копирования многих удаленных серверов. Это займет некоторое время в первый раз, а затем очень быстро, если ваши данные не сильно меняются. Это полностью настраиваемый и довольно быстрый (сеть в моем случае является узким местом).

Поскольку ваши два сервера находятся на одном коммутаторе и в одном сегменте сети, я предлагаю установить демон rsync на вашем резервном сервере и избегать использования SSH в целом.

Я предлагаю следующие настройки для вашего демона rsync. Я бы дал более конкретную инструкцию, но вы не упомянули свой дистрибутив.

[yourshare]
path = /yourpath/
read only = no
list = yes
uid = youruser
gid = youruser
hosts allow = you.rip.add.res

Это может быть ограничено доступом только с серверов, с которых вы хотите создать резервную копию. Оттуда вы сможете запланировать задание rsync прямо к месту назначения без использования SSH, что устранит эту проблему.

Если ваш сайт состоит из большого количества файлов, процесс rsync может зависнуть при отправке добавочного списка файлов. В таком случае параметры --delete-before или --delete-after могут оказаться полезными.

Есть также некоторые конфигурации, в которых файлы сначала копируются, а затем анализируются локально. Я давно не использовал rsync через SSH, но возможно, что настройки, которые вы пытаетесь сделать, имеют такой эффект.