Реализация Rsync-сервера построена следующим образом. Есть отдельный сервер куда будут складываться все бэкапы. С этого сервера запускается по крону команда rsync с параметрами, которая реализует коннект к удаленным машинам в сети. На всех машинах работает Rsync-служба, в конфиге которой прописано какие именно каталоги нужно синхронизировать.
Правим конфиг Rsync-сервера. Где искать в разных дистрибутивах:
FreeBSD /usr/local/etc/rsyncd.conf Gentoo /etc/rsyncd.conf HP-UX 11.xx /etc/rsyncd.conf
rsyncd.conf:
#если запускать через inetd то pid file не используем pid file = /var/run/rsyncd.pid # Файл приветствия (Можно описать информацию о самом сервере, полезно когда серверов будет много) motd file = /etc/hello_rsync # Файл логов log file = /var/log/rsyncd.log # Писать в лог о скачиваемых файлах transfer logging = true # Описание секции для синхронизации /etc/ [etc] path = /etc/ # Путь к директории uid = root # Пользователь под каким запускать крипт gid = sys # По умолчанию будет gid = nobody, что недаст #работать read only = yes # Только чтение (а больше и не нужно) list = yes # Разрешать просмотр файлов comment = ETC - derectory # Комментарий hosts allow = 192.168.0.6,192.168.0.52 # Хосты с которых разрешен коннект auth users = backup # Разрешенный пользователи службы rsync secrets file = /root/rsyncd.scrt # Файл с паролем #если не указывать auth users то можно будет работать анонимно и не заморачиваться secrets file'ами
Теперь создадим файл приветствия, файлы для логов и пароля.
pdc# vim /etc/hello_rsync ################################################################# # # # Hello from rsync server (pdc.myhost.com) # # Server Adress : 192.168.1.254 # # Server : AMD Computer Corp # # Hardware : 1x AMD(R)2X CPU, 2180MB RAM # # Contact Name : admin@myhost.com # # # ################################################################# pdc# touch /var/log/rsyncd.log pdc# chmod 0600 /var/log/rsyncd.log pdc# chown root:wheel /var/log/rsyncd.log pdc# cat > /root/rsyncd.scrt backup:rsync_passwd pdc# chown root:wheel /root/rsyncd.scrt pdc# chmod 0600 /root/rsyncd.scrt
Внимание! ВАЖНО. Очень важны права доступа к файлу с паролем. Если права будут отличными от тех что нужно, у вас не будет проходить аутентификация.
Теперь добавим службу rsync в автоматический запуск:
FreeBSD mv /usr/local/etc/rc.d/rsyncd /usr/local/etc/rc.d/rsyncd.sh echo rsyncd_enable=\"YES\" >> /etc/rc.conf /usr/local/etc/rc.d/rsyncd.sh start Gentoo rc-update add rsyncd default /etc/init.d/rsyncd start Для запуска через inetd например в HP-UX добавляем строку в /etc/services: rsync 873/tcp а в /etc/inetd.conf добавляем строку: rsyc stream tcp nowait root /usr/local/bin/rsync rsyncd --daemon (/usr/local/bin/rsync меняем на то место куда на вашей системе был установлен rsync)
Теперь переходим на сервер, куда будут собираться все наши BackUp.
На Нашем BackUp - сервере создаем директории, куда будут складываться все наши резервные копии.
saturn# mkdir -p /home/backup/pdc.myhost.com/etc/ saturn# chmod -R 0700 /home/backup/pdc.myhost.com/etc/
Теперь создаем файл с паролем. По правилам хорошего тона, прячем его в /root/
saturn# cat > /root/rsyncd.scrt rsync_passwd saturn# chown root:wheel /root/rsyncd.scrt saturn# chmod 0600 /root/rsyncd.scrt
Теперь проверяем:
saturn ~ # rsync pdc:: ################################################################# # # # Hello from rsync server (pdc.myhost.com) # # Server Adress : 192.168.1.254 # # Server : AMD Computer Corp # # Hardware : 1x AMD(R)2X CPU, 2180MB RAM # # Contact Name : admin@myhost.com # # # ################################################################# etc ETC - derectory
Теперь делаем полную синхронизацию следующей командой.
rsync -uvroght --delete-after --password-file=/root/rsyncd.scrt backup@pdc.myhost.com::etc /home/backup/pdc.myhost.com/etc/
Для автоматизации, я создал два файла /root/rsync_day.sh, который запускается по крону каждый час, в нем у меня синхронизируется svn-репозиторий. И /root/rsync_night.sh - который запускается только ночью. В нем у меня синхронизируется /etc/ /home/ и прочее. Кому что синхронизировать, решать вам.
'-v
', '–verbose
' увеличение отладочной информации
'-u
', '–update
' пропускать обновление файлов, которые новее исходных
'-r
', '–recursive
' рекурсия в директориях
'-o
', '–owner
' сохранить владельца (только под root)
'-g
', '–group
' сохранить группу
'-h
', '–human-readable
' вывод цифр в читаемом виде (Кб, Мб, Гб)
'-t
', '–times
' сохранить дату изменения
'-p
', '–perms
' сохранить права доступа
'–delete-after
' удалить после. Если в основном месте был удален какой-то файл, или каталог, то после синхронизации в backup сервере, в каталоге он тоже будет удален–password-file Путь, где находится файл с паролем.
Обязательно включите ключ -v, –verbose, тогда в консоль вам будет выводиться вся информация о процессе. Если у вас настроено отсылка сообщений службой ssmtp, то вы сможете получать письма с информацией о том как отработал cron. И соответственно как прошла синхронизация.
Преимущества такого вида резервной синхронизации я вижу в полной автоматизации процесса. Так же письменное уведомление, о том как проходит процесс. (При условии что настроена служба ssmtp). Так же к преимужествам можно отнести что мы имеем полную рабочую версию каталогов, с правами доступа. Это дает нам преимущества быстрого переключения на резервный сервер служб, которые постоянно работают. К примеру svn-репозиторий, web-хостинг. Мы не тратим время на разархивирование, копирование и прочее. Переключаем на шлюзе порты, и работаем над восстановлением упавшего сервака.
К недостаткам можно отнести какую-то несовместимость rsync с svn-базами. Кто знает подробности, можете описать.
rsync -vaHx --progress --numeric-ids --delete \ --exclude-from=asylum_backup.excludes --delete-excluded \ root@asylum:/home/asylum/ /backup/rsync/asylum/_home_asylum.demo/
'-v, –verbose
' - говорливость, выводит имена обрабатываемых файлов;
'-a, –archive
' - работа в режиме архивирования, сохраняются права доступа и информация о владельцах;
'-H, –hard-links
' - сохранять жесткие ссылки, оставляя их на другом конце бэкапа;
'-x, –one-file-system
' - не выходить за пределы текущей точки монтирования;
'–progress
' - показывать сколько процентов осталось до завершения и скорость передачи;
'–numeric-ids
' - не транслировать имена владельца и группы в цифровые UID и GID, оставить на удаленной стороне номера как есть;
'–delete
' - удалять из бэкапа файлы, которых уже нет на стороне источника;
'–exclude-from=asylum_backup.excludes
' - список файлов исключенных из бэкапа, допускается использование масок, напирмер "htdocs/*/*.jpg";
'–delete-excluded
' - удалять части которые уже есть на стороне бэкапа, но появились в списке исключения;
'root@
' - под каким пользоателем осущестляются подключение;
'asylum
' - имя хоста к которому производится подключение;
'/home/asylum/
' - директория источник, которую нужно бэкапить;
'/backup/rsync/asylum/_home_asylum.demo/
' - куда сохранять бэкап;
RSYNC_RSH "ssh -c arcfour -o Compression=no -x"
'ssh
' - транспорт ssh (можно задать через "-e ssh");
'-c arcfour
' - тип шифрования;
'-o Compression=no
' - отключить сжатие средствами ssh, rsync сам сжимает данные;
'-x
' - отключаем X туннелинг;
'-n, –dry-run
' - режим тестирования, реально никаких действий по копированию не производится, только эмуляция;
'-W, –whole-file
' - передает файлы целиком, а не блоками, как задумано в [http://www.opennet.ru/base/dev/rsync_algorythm.txt.html оригинальном алгоритме rsync];
'-c, –checksum
' - использование сверки по контрольным суммам, а не по времени изменения и размеру;
'-S, –sparse
' - допускает оптимизацию дискового пространства через создание "дырявых" файлов;
'–delete
' отличается от '–delete-after
' тем, что удаление производится вначале, а не на завершающей стадии процесса бэкапа. '–delete-after
' работает быстрее, так как не требует лишней стадии обхода списка файлов, но требует использования опции '–force
' для обработки таких ситуаций как удаление файла и появление диретории с тем же именем;
'-T, –temp-dir=DIR
' - сохранять временные файлы в отдельной диретории, а не в текущей;
'–compare-dest=DIR
' - сохранять новые и измененные файлы в отдельной директории, не трогая на время коприрования основную директорию назначения, в конце - разом, путем переименования, обновить содержимое бэкапа;
'–link-dest=DIR
' - использовать жесткие ссылки на файлы в DIR, например, для создания подобия снапшотов;
'–bwlimit
' - ограничение пропускной способности, чтобы не забивать канал;
'–ignore-errors
' - продолжать копирование и удаление после появления ошибок;
'–max-delete
' - ограничение максимально числа удаляемых за один раз файлов и каталогов;
'-z, –compress
' - включить сжатие передаваемых данных;
'-A, –acls
' - сохранять не только права доступа, но и ACL;
'-D
' - сохранять файлы устройств
'–files-from=FILE
' - задать список директорий и файлов для бэкапа в файле;
'–times
' - синхронизировать время модификации файлов;
'–backup
' - старые измененные или удаленные файлы не теряются а переименовываются или перемещаются в заданную чере '–backup-dir=DIR
' директорию. Пример инкрементального бэкапа:
rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file \ --backup --backup-dir=`date +%Y-%m-%d` -av
+ /dir/best/ - /dir/*