Бэкап сервера при помощи 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 и станет хорошо.

  • software/rsync/server-backup.txt
  • Последнее изменение: 2017/05/09 15:34
  • (внешнее изменение)