Rsync настройка бэкапа на CentOS/Debian/Ubuntu

 

1. Устанавливаем rsync

2. Настройка rsync

3. Ротация логов rsync

4. Бэкап windows сервера с помощью rsync

 

1. Устанавливаем rsync

 

# apt-get install rsync

 

Правим конфиг:

 

# mcedit /etc/default/rsync

 

Находим строку RSYNC_ENABLE=false и меняем на true:

 

RSYNC_ENABLE=true

 

Запускаем rsync:

 

# /etc/init.d/rsync start

 

[ ok ] Starting rsync daemon: rsync.

 

2. Настройка rsync

 

Теперь приступаем к настройке. Логика наших бэкапов будет следующая. При первом запуске мы делаем полный бэкап интересующей нас информации в папку current. Потом раз в сутки мы сверяем имеющийся архив с источником и делаем его вновь актуальным, перезаписывая все изменившиеся файлы, но при этом не удаляем их, а складываем в папку increment, где каждый день создается папка с именем в виде даты, в которую складываются все измененные файлы за текущий день. Таким образом, у нас всегда будет полный архив, актуальный на момент последней синхронизации, плюс набор папок за каждый день с изменившимися в этот день файлами. Сколько дней хранить можно выбрать по необходимости.

 

2.1 В первую очередь настраиваем rsync на серверах источниках информации, с которых мы будем забирать данные для backup.

 

Создаем файл конфигурации rsync:

 

# mcedit /etc/rsyncd.conf

 

-----------------------------------

pid file = /var/run/rsyncd.pid

log file = /var/log/rsyncd.log

transfer logging = true

munge symlinks = yes

 

# папка источник для бэкапа

[data]

path = /data

uid = root

read only = yes

#Тоступ только с 192.168.1.1

hosts allow = 192.168.1.1.

#Остальным доступ запрещен

hosts deny = *

list = yes

comment = Data backup Dir

auth users = backup

secrets file = /etc/rsyncd.scrt

-----------------------------------

 

Создаем файл с учетными данными для подключения:

 

# mcedit /etc/rsyncd.scrt

 

backup:12345

 

где backup — имя пользователя, 12345 — пароль.

 

Делаем права на чтение только root, иначе rsync не запустится:

 

# chmod 0600 /etc/rsyncd.scrt

 

После настройки перезапускаем rsync.

 

# /etc/init.d/rsync restart

 

2.2 Теперь идем на сервер приемник, в котором будут храниться архивные копии с серверов источников.

 

Начинаем все с пункта 1 данной статьи. Т.е. установка и запуск.

 

Далее создаем скрипт инкрементного бэкапа c использованием rsync:

 

# mcedit /root/bin/backup-server1.sh

 

-----------------------------------

#!/bin/bash

date

# Папка, куда будем складывать архивы

syst_dir=/backup/

# Имя сервера, который архивируем

srv_name=server1

# Адрес сервера, который архивируем

srv_ip=10.10.1.55

# Пользователь rsync на сервере, который архивируем

srv_user=backup

# Ресурс на сервере для бэкапа

srv_dir=data

echo "Start backup ${srv_name}"

# Создаем папку для инкрементных бэкапов

mkdir -p ${syst_dir}${srv_name}/increment/

# Запускаем непосредственно бэкап с параметрами

/usr/bin/rsync -a --delete --password-file=/etc/rsyncd.scrt ${srv_user}@${srv_ip}::${srv_dir} ${syst_dir}${srv_name}/current/ --backup --backup-dir=${syst_dir}${srv_name}/increment/`date +%Y-%m-%d`/

# Чистим папки с инкрементными архивами старше 30-ти дней

/usr/bin/find ${syst_dir}${srv_name}/increment/ -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;

date

echo "Finish backup ${srv_name}"

-----------------------------------

 

Делаем скрипт исполняемым:

 

# chmod 0744 /root/bin/backup-server1.sh

 

Создаем файл с паролем для авторизации на сервере источнике:

 

# mcedit /etc/rsyncd.scrt

 

12345

 

Делаем права на чтение только root, иначе rsync выдаст ошибку:

 

ERROR: password file must not be other-accessible

 

Исправляем это:

 

# chmod 0600 /etc/rsyncd.scrt

 

На этом все, теперь можно запускать скрипт и ожидать его выполнения. Осталось добавить его в cron:

 

# mcedit /etc/crontab

 

30 23 * * * root /root/bin/backup-server1.sh

 

3. Ротация логов rsync

 

Мы указали в настройках ведение лога в файл /var/log/rsyncd.log. Необходимо настроить ротацию этого лога, чтобы он не рос до бесконечности. На больших файловых серверах он очень быстро вырастет до сотен мегабайт и более.

 

Для этого создаем в папке /etc/logrotate.d файл с конфигурацией ротации:

 

# mcedit /etc/logrotate.d/rsyncd

 

-----------------------------------

/var/log/rsyncd.log {

size=500k

compress

rotate 4

missingok

notifempty

}

-----------------------------------

 

С такими настройками ротация будет происходить каждый раз, когда файл лога превысит размер в 500 кб. Храниться будут 4 версии лог файла. Эти настройки вы можете сами поменять по своему усмотрению.

 

4. Бэкап windows сервера с помощью rsync

 

Допустим, у нас есть windows сервер с некоторой информацией, которую мы хотим так же бэкапить. Никаких проблем, это делается достаточно просто.

 

Создаем на windows сервере сетевую шару с информацией. Создаем пользователя и добавляем его в доступ к этой папке. Этого пользователя мы будем использовать для подключения виндовой шары к linux серверу.

 

Монтируем шару с информацией, которую будем бэкапить:

 

# mount -t cifs //192.168.0.16/docs /mnt/docs -o user=backup,password=12345,iocharset=utf8,codepage=cp866

 

192.168.0.16 — адрес виндовой шары

backup и 12345 — пользователь и пароль виндовой машины с доступом к шаре docs.

 

Все, теперь папку /mnt/docs можно использовать в качестве приемника в нашем скрипте бэкапа с rsync. Если папка примонтирована непосредственно к серверу с бэкапами, то нужно на нем самом настроить конфиг rsyncd на примере серверов источников, запустить на нем rsyncd и в скрипте в качестве ip адреса сервера указывать 127.0.0.1.

 

Я в таких случаях создаю несколько скриптов: на монтирование шары, бэкап и размонтирование, объединяю их в один и запускаю последовательно. В итоге получается, что подключаем диск, делаем бэкап и отключаем его..