Пусть есть 2 файловых сервера на Unix. Нам нужно наладить резервное копирование файлов с одного на другой. Можно каждый раз запаковывать файлы на одном и передавать архив по FTP на другой сервер, но это не наш путь. Мы воспользуемся утилитой rsync (и демоном rsyncd).
rsync - програма, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодировку данных при необходимости. Важным отличием rsync от многих других программ/протоколов является то, что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.
rsyncd - демон, реализующий протокол rsync. По умолчанию использует TCP порт 873.
Мы будем копировать данные с сервера files.example.com (IP 192.168.1.1) на сервер backup.example.com (IP 192.168.1.2). Резервироваться будут папка /home и папка /var первого сервера в соответственно папки /backup/home и /backup/var второго сервера. Переодичность - раз в сутки в 23-00.
На сервере files.example.com (IP 192.168.1.1) настраиваем rsync в режиме демона:
1. Устанавливаем пакеты rsync и xinetd:
apt-get install rsync xinetd
2. Создаем необходимый конфиг для xinetd:
cat > /etc/xinetd.d/rsync
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
3. Перезапускаем xinetd:
/etc/init.d/xinetd restart
4. Создаем конфиг для rsyncd:
cat > /etc/rsyncd.conf
#включаем логирование (потом можно выключить)
log file = /var/log/rsyncd.log
transfer logging = true
#название шары:
[home]
#путь к папке на сервере которую будем бекапить:
path = /home
#пользователь из подкоторого будем бекапить:
uid = root
#включаем режим только чтение:
read only = yes
#разрешить просмотр файлов:
list = yes
comment = User homes directory
#список IP-адресов, с которых разрешен доступ к шаре (через пробел):
hosts allow = 192.168.1.2
#список пользователей rsyncd, которым разрешен доступ к шаре (через пробел)
auth users = backupuser1
#путь к файлу с именами пользователей и паролями:
secrets file = /etc/rsyncd.scrt
[var]
path = /var
uid = root
read only = yes
list = yes
comment = var directory
hosts allow = 192.168.1.2
auth users = backupuser1
secrets file = /etc/rsyncd.scrt
5. Создаем файл с именами пользователями и паролями. Даем ему нужные права::
touch /etc/rsyncd.scrt
chmod 600 /etc/rsyncd.scrt cat > /etc/rsyncd.scrt
backupuser1:password1
Теперь перейдем к серверу backup.example.com (IP 192.168.1.2). Напишем скрипт, который будет по расписанию забирать с первого сервера файлы:
1. Создаем необходимые папки:
mkdir /backup
mkdir /backup/home
mkdir /backup/var
2. Напишем скрипт копирования при помощи rsync:
cat > /backup/backupscript
#!bin/sh
rsync --update --recursive --delete -a -A --perms --times --copy-links \
--password-file=/etc/rsync.scrt [email protected]::home /backup/home > /dev/null 2>&1
rsync --update --recursive --delete -a -A --perms --times --copy-links \
--password-file=/etc/rsync.scrt [email protected]::var /backup/var > /dev/null 2>&1
Описание ключей:
-v, --verbose
-u, --update
-r, --recursive
-o, --owner
-g, --group
-h, --human-readable
-t, --times
-p, --perms
-l, --copy-links
--delete
--delete-after
--password-file
-a
-D
-z
--exclude path
отображение отладочной информации
пропускать обновление файлов, которые новее исходных
рекурсивный обход каталогов
сохранить владельца (только под root)
сохранить группу
вывод цифр в читаемом виде (Кб, Мб, Гб)
сохранить дату изменения
сохранить права доступа
копировать симлинки как симлинки
удалить из каталога назначения файлы отсутствующие в исходном каталоге
удалить после синхронизации из каталога назначения файлы,
отсутствующие в исходном каталоге
путь, где находится файл с паролем
архивный режим. синоним для ключей -rlptgoD
копировать файлы устройств
упаковывать поток с помощью gzip
исключить из синхронизации файлы и пути соответствующие маске
3. Дадим ему права на выполнение:
chmod +x /backup/backupscript
4. Пропишем его в cron. Пусть резервное копирование запускается каждый день в 23-01:
cat > /etc/cron.d/backupscrpt 01 23 * * * root /backup/backupscript
5. Перезапустим cron для применения изменений:
/etc/init.d/cron restart
6. Создадим файл паролей и дадим ему нужные права:
touch /etc/rsync.scrt
chmod 600 /etc/rsync.scrt cat > /etc/rsync.scrt
password1
Все. Теперь на backup-сервере вы будете иметь полную копию каталогов /home и /var основного сервера.