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

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

Существует много способов организации backup на CentOS/Debian/Ubuntu серверах — бесплатные утилиты, самописные скрипты с использованием tar, система бэкапа bacula и много другое. Все это в той или иной мере я использовал или использую в своей работе. Сегодня я хочу с вами поделиться своим методом организации простого, удобного и быстрого способа настройки инкрементного backup с использованием популярной утилиты rsync на серверах под управлением CentOS/Debian/Ubuntu. Способ одинаково работает на этих истемах, небольшие отличия только в самой установке rsync, о чем я отдельно упомяну для каждой системы.

Установка rsync на CentOS 6

Устанавливаем xinetd для автоматического запуска rsync:

# yum install -y xinetd

Устанавливаем непосредственно rsync:

# yum install -y rsync

Редактируем конфиг rsync для xinetd:

# mcedit /etc/xinetd.d/rsync

В конфиге находим строку disable = yes и меняем на no:

disable = no

Запускаем xinetd:

# /etc/init.d/xinetd start

И добавляем его в автозапуск:

# chkconfig xinetd on

Проверяем, слушает ли xinetd 873 порт rsync:

# netstat -lnpt | grep 873

tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1431/xinetd

Все в порядке, можно приступать к настройке rsync.

Установка rsync на CentOS 7

Ставим rsync:

# yum install -y rsync

Добавляем в автозагрузку:

# systemctl enable rsyncd

ln -s '/usr/lib/systemd/system/rsyncd.service' '/etc/systemd/system/multi-user.target.wants/rsyncd.service'

Проверяем автозагрузку:

# systemctl list-unit-files --type service | grep rsyncd

rsyncd.service enabled

Запускаем rsync:

# systemctl start rsyncd

Проверяем, как запустился:

# netstat -tulpn | grep rsync

tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      2782/rsync

Все в порядке, можно приступать к настройке rsync.

Установка rsync на Debian/Ubuntu

Устанавливаем rsync:

# apt-get install -y rsync

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

# mcedit /etc/default/rsync

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

RSYNC_ENABLE=true

Запускаем rsync:

# /etc/init.d/rsync start

[ ok ] Starting rsync daemon: rsync.

Проверяем, что работает:

# netstat -tulpn | grep rsync

tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1767/rsync

Все в порядке, можно приступать к настройке rsync.

Настройка rsync

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

Получается у нас такая картинка:

rsync

Приступаем к реализации. В первую очередь настраиваем 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
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.
На Centos 6:

# /etc/init.d/xinetd restart

На Centos 7:

systemctl restart rsyncd

На Debian/Ubuntu:

# /etc/init.d/rsync restart

Теперь идем на сервер приемник, в котором будут храниться архивные копии с серверов источников. Там создаем скрипт инкрементного бэкапа 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

Я обычно создаю несколько скриптов для каждого сервера отдельно. Потом объединяю их запуск в одном общем скрипте и уже его добавляю в cron. А потом по мере необходимости редактирую уже его, добавляю или удаляю сервера.

Ротация логов 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 версии лог файла. Эти настройки вы можете сами поменять по своему усмотрению.

Пример бэкапа 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.

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


Помогла статья? Есть возможность отблагодарить автора

Дополнительные материалы по CentOS

Рекомендую полезные материалы по CentOS:
Настройки системы
  • Установка
  • Базовая настройка
  • Настройка времени
  • Настройка сети
  • Настройка репозиториев
  • Настройка iptables
Установка CentOS 7 в конфигурации minimal или netinstall с загрузочной флешки или по сети на диск или raid раздел.
Базовая настройка CentOS 7 для работы с любым функционалом. Приведены практические советы по улучшению безопасности и удобства администрирования.
Как установить точное время на сервере CentOS, настроить часовой пояс, синхронизировать время с помощью ntpdate и ntpd и другое.
Подробное описание настройки сети в CentOS 7 - задать ip адрес, dhcp, отключить ipv6, dns, hostname, статические маршруты и др.
Установка репозиториев epel, rpmforge и др. Добавление, удаление, обновление rpm репозиториев в CentOS.
Рассмотрены основные моменты настройки iptables в Centos 7 - установка, добавление правил, проброс портов, nat, логирование и д.р.
Настройка программных комплексов
 
  • Прокси сервер
  • Шлюз
  • Asterisk
  • Asterisk+Freepbx
  • Сервер VPN
  • Web сервер Apache
  • Web сервер Nginx
  • Почтовый сервер
Подробное описание настройки прокси сервера на базе CentOS 7 со связкой squid+AD+sams2, реализован запрет доступа по url и группам пользователей.
Простая и быстрая настройка шлюза на базе CentOS 7 для организации доступа в интернет из локальной сети.
Описание установки и настройки asterisk - популярной современной sip атс. Описан расширенный функционал, покрывающий большинство потребностей стандартного офиса в современной телефонии.
Подробное описание установки voip сервера asterisk и панели управления freepbx на CentOS 7.
Установка и настройка OpenVPN сервера на CentOS для объединения офисов и подключения удаленных пользователей
Настройка web сервера CentOS 7 на базе связки http сервера apache, php и сервера db mysql, или коротко - установка lamp.
Установка и настройка высокопроизводительного web сервера на базе nginx и php fpm. В качестве кэша используется APC.
Описание установки и настройки почтового сервера postfix на основе сборки iRedMail на CentOS 7. Обзор основных возможностей и рекомендации по настройке.
Настройка отдельных программ
 
  • Zabbix
  • Phpmyadmin
  • Webmin
  • Ruby
  • Обновление php
  • Vsftpd
  • Bind
  • Unison
  • Observium
Видео и подробное описание установки и настройки Zabbix 3.2, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание установки и настройки панели управления phpmyadmin на веб сервер apache и nginx под управлением Centos 7.
Подробное описание установки и настройки Webmin на CentOS 7 для удаленного подключения и управления сервером.
Подробное описание установки языка Ruby последней версии на веб сервер под управлением CentOS 7.
Подробное описание установки или обновления php 7 на CentOS 7. Рассмотрен вариант отката обновления и возврата на php 5.6 или 5.4.
Подробное описание с видео установки и настройки ftp сервера vsftpd, примеры с локальными и виртуальные пользователями в mysql.
Настройка DNS сервера BIND (Named) в CentOS 7. Рассмотрены наиболее популярные конфигурации, в том числе подробное логирование.
Установка Unison в CentOS 7 для двухсторонней синхронизации файлов.
Инструкция по установке и настройке сервера мониторинга Observium на CentOS 7. В качестве примера в конце добавлено одно устройство для мониторинга.
Разное
  • Настройка ssl в Apache
  • Бэкап с помощью rsync
Настройка работы веб сервера apache с виртуальными хостами по протоколу https с использованием бесплатного ssl сертификата.
Подробное описание настройки бэкапа с помощью rsync на примере скрипта инкрементного архива на системе Centos, Debian, Ubuntu, Windows.

Дополнительные материалы по Debian

Рекомендую полезные материалы по Debian:
Настройки системы
  • Установка
  • Базовая настройка
  • Настройка сети
  • Обновление 7 до 8
  • Включение логов cron
Подробная установка Debian 8 Jessie с помощью графического инсталлятора со скриншотами и пояснениями к каждому пункту установщика.
Базовая настройка сервера Debian 8. Приведены практические советы по улучшению безопасности и удобства администрирования.
Подробное описание настройки сети в Debian - задать ip адрес, dhcp, отключить ipv6, dns, hostname, статические маршруты и др.
Обновление предыдущей версии Debian 7 wheezy до последней Debian 8 Jessie. Подробная инструкция с описанием по каждому этапу обновления.
Включение записи логов cron в Debian в отдельный файл и настройка ротации этого файла. Отключение логов в syslog.
Настройка программных комплексов
 
  • Proxmox
  • Шлюз в интернет
  • Asterisk+Freepbx
  • Настройка pptp
Подробное описание установки гипервизора proxmox на raid1 mdadm на базе операционной системы Debian 8. Приведены практические советы по настройке.
Настройка интернет шлюза на Debian 8. Включает в себя настройку iptables, nat, dhcp, dns, iftop.
Установка Freepbx 12 и Asterisk 13 на сервер под управлением Debian/Ubuntu. Подробное описание и разбор ошибок установки.
Описание установки и настройки pptp сервера в Debian с передачей статических маршрутов клиенту для организации доступа к ресурсам сети.
Разное
  • Бэкап с помощью rsync
Подробное описание настройки бэкапа с помощью rsync на примере скрипта инкрементного архива на системе Centos, Debian, Ubuntu, Windows.

7 комментариев

  1. Добрый день. Настраивал rsync в ubuntu server 14.04 по Вашей инструкции.

    Монтирование шары винды сработало только так:
    mount cifs //192.168.0.1/data /mnt/data -o user=user,pass=123,iocharset=utf8,rw,dir_mode=0777,file_mode=0777

    Скрипт сработал только так:
    #!/bin/bash
    date
    # Папка, куда будем складывать архивы
    syst_dir=/backup/
    # Имя сервера, который архивируем
    srv_name=server1
    # Адрес сервера, который архивируем
    srv_ip=127.0.0.1
    # Пользователь rsync на сервере, который архивируем
    srv_user=backup
    # Ресурс на сервере для бэкапа
    srv_dir=/mnt/data
    echo «Start backup ${srv_name}»
    # Создаем папку для инкрементных бэкапов
    mkdir -p ${syst_dir}${srv_name}/increment/
    # Запускаем непосредственно бэкап с параметрами
    /usr/bin/rsync -a —delete /mnt/data ${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}»

    Может кому пригодится)

    • Спасибо за комментарий, кому-то может пригодиться. Изменения не принципиальные, просто чуть другие параметры. Я все делал на Debian, когда писал. В каких-то мелочах могут быть отличия от Ubuntu.

    • А в целом получилось бэкап настроить? Мне нравится такая схема, я часто ее использую. Быстро, бесплатно и эффективно.

      • Да, всё заработало, спасибо.
        Друг рассказывал про синк, но добрался я до него через пол года, действительно удобно.

  2. Добрый день. Воспользовался вашей статьей, сам в первые пользуюсь линуксом, юзаю Ubuntu server 14.04. Есть необходимость подключать виндовс шару, бекапить ее на линукс сервер. Скрипт заработал у меня в следующем виде:

    #!/bin/sh
    #монтируем виндовс ресурс, кторый хотим сохранить
    mount -t cifs //192.168.0.100/Doks /mnt/Doks -o user=username,password=password
    echo «mount Doks»
    #бекапим файлы с помощью демона rsync
    date
    # Папка, куда будем складывать архивы
    syst_dir=/windows/
    # Имя сервера, который архивируем
    srv_name=myserv
    # Адрес сервера, который архивируем
    srv_ip=127.0.0.1
    # Пользователь rsync на сервере, который архивируем
    srv_user=username
    # Ресурс на сервере для бэкапа
    srv_dir=/mnt/Doks
    echo «Start backup ${srv_name}»
    # Создаем папку для инкрементных бэкапов
    mkdir -p ${syst_dir}${srv_name}/increment/
    # Запускаем непосредственно бэкап с параметрами
    /usr/bin/rsync -a —delete /mnt/Doks/ ${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}»
    #размонтируем виндовс ресурс
    umount /mnt/Doks
    echo «umount Doks»

    И проблема в том, что при первом запуске скрипт работает как задумано — создает бекап в папку current, создает папку increment с текущем числом, в которой лежат пустые папки из виндовс шары, но стоит либо скрипт запустить повторно, либо по крону настроить автоматический запуск, как начинается какая то муть — каждый четный запуск скрипта (2,4,6 и т.д.) приводит к тому, что все, что лежит в папке Current копируется в текущий increment и удалется. То есть 50 гектар бекапа полностью перетекают в increment, после чего папка Current становиться пустой. Каждый нечетный запуск скрипта (1,3,5 и т.д.) сохраняет данные виндовс шары в папку current, то есть все как задумывалось работает. Опыта к сожалению мало, мануалы почитал, но то ли лыжи не едут, то ли одно из двух %) Подскажите в чем может быть пробелма? Или хотя бы куда копать?

    • Судя по тому, что данные из current улетают в increment, во время бэкапа папка с данными не подмонтирована, либо она по какой-то причине пустая. Rsync считает, что в папке пусто и все, что было ранее, перемещает в папку increment. Это его нормальное поведение при пустом источнике файлов. Копай в эту сторону.

Добавить комментарий

Ваш e-mail не будет опубликован.