====== Бэкап сервера при помощи 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 и станет хорошо.
{{tag>rsync ssh авторизация_по_ключу бэкап}}