Бэкап сервера при помощи Rsync
Задача
Есть боевой сервер, на котором крутятся проекты. Необходимо время от времени (минимум - раз в сутки) забэкапить эти проекты на другой сервер.
Есть огромное количество всяких очень даже замечательных программ и скриптов для резервного копирования. Но они или слишком круты или предельно просты.
Бэкапалка должна уметь:
- Синхронизировать файлы, архивы и т.д. по решению сервера бэкапа, т.к. боевой и так всякими делами занят
- Работать по расписанию
- Подключение и авторизация по ключу
- Передача данных по защищенному каналу
- Настраиваемое кол-во пространства на диске, отведенного под бэкапы (т.е. периодически прибираться за собой и не забивать все место на диске)
- Работать тихонько и напоминать о себе только отчетами
Выбираем золотую середину: rsync + cron + несколько скриптов для облегчения жизни.
Термины
MainServer (MS) - основной, боевой сервер
StorageServer (SS) - сервер для хранения бэкапов
Устанавливаем rsync
На обоих серверах устанавливаем rsync и ssh (если это еще не сделано):
$ sudo apt-get install ssh rsync
Создаем пользователя для бэкапа
На обоих серверах создаем одинаковых пользователей (одинаковым должно быть как имя пользователя, так и группа - это пригодится в дальнейшем).
$ sudo groupadd --gid 2222 rsyncbackup $ sudo useradd --comment "Rsync backup user" --gid 2222 --uid 2222 --create-home -d /home/rsyncbackup rsyncbackup $ sudo passwd rsyncbackup
и вводим пароль пользователя rsyncbackup 2 раза. В примере 2222 - идентификатор и группы и пользователя, необходимо перед запуском команды убедить что он не занят.
Создаем ключи авторизации
Логинимся на сервер SS, создаем ключ для авторизации:
$ ssh rsyncbackup@SS $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/rsyncbackup/.ssh/id_rsa): Created directory '/home/rsyncbackup/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/rsyncbackup/.ssh/id_rsa. Your public key has been saved in /home/rsyncbackup/.ssh/id_rsa.pub. The key fingerprint is: 57:bb:27:1e:c6:7d:5e:5c:c4:59:92:eb:c5:21:84:5c rsyncbackup@nas The key's randomart image is: +--[ RSA 2048]----+ | . +E...| | o ..+o| | . .++| | . ...o| | S . .. ..| | . . o...| | * o +| | o + o.| | . .| +-----------------+ $
Копируем ключи на сервер
C сервера SS копируем ключ:
$ ssh-copy-id -i /home/rsyncbackup/.ssh/id_rsa rsyncbackup@MS The authenticity of host 'MS (XXX.XXX.XXX.XXX)' can't be established. RSA key fingerprint is ....... Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'MS,XXX.XXX.XXX.XXX' (RSA) to the list of known hosts. rsyncbackup@MS's password: Now try logging into the machine, with "ssh 'rsyncbackup@MS'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. $
Пробуем подключиться:
$ ssh rsyncbackup@MS Ubuntu 10.04.4 LTS Welcome to the Ubuntu Server! * Documentation: http://www.ubuntu.com/server/doc Uptime: 20:35:31 up 147 days, 16:29, 1 user, load average: 0.12, 0.06, 0.08 0 packages can be updated. 0 updates are security updates. $
Если не задает вопросов о пароле - все получилось и работает.
Если спрашивает пароль - проверяем настройки сервера MS, следующие директивы в файле /etc/ssh/sshd_config должны быть установлены так:
RSAAuthentication yes PubkeyAuthentication yes #AuthorizedKeyFile %h/.ssh/authorized_keys
и проверить следующие директивы в файле /etc/ssh/ssh_config:
# IdentityFile ~/.ssh/identity # IdentityFile ~/.ssh/id_rsa # IdentityFile ~/.ssh/id_dsa
Настраиваем Rsync
Пишем небольшой скриптик /home/rsyncbackup/backup.sh:
#!/bin/sh rsync -e ssh -avzP --stats rsyncbackup@MS:/var/backup /mnt/backup
Этот скрипт копирует с сервера MS все содержимое папки /var/backup и всех вложенных папок в локальную папку /mnt/backup
Осталось добавить вызов этого скрипта в cron и станет хорошо.