FreeNAS (backup) — организация бэкапа
FreeNAS — свободная операционная система для сетевого хранилища (англ. Network-Attached Storage). Сделаем на основе её систему резервного копирования.
[1]
Задача: организовать бэкап используя бесплатное ПО.
Нам понадобится:
1. скачать с сайта freenas.org дистрибутив версии 0.7.2, так как в нём есть rsync. Я использовал FreeNAS-i386-LiveCD-0.7.2.5543.iso
2. Обычный ПК с двумя винтами, один из которых лучше серверного типа. На одном разметим сам FreeNAS, на друром соответственно бэкапы.
После установки появится окно авторизации, по умолчанию используются
логин: admin
пароль: freenas
Сделаем первоначальные настройки: System > General
[3]
Для безопасности советую сменить имя и протокол.
[4]
После изменений Вас попросят перезагрузиться. Соглашаемся и ждем пару минут, пока FreeNAS заново поднимется. Теперь он будет доступен по адресу:
https://192.168.15.53/
У вас он свой, измениться только http на https
Меняем пароль на свой: System > General > Password
[5]
Добавляем в систему наш второй диск: Disks > Management
[6]Нажимаем +
В параметре «Disk» выбираем наш диск и в «Description» называем его «backup». Все остальное по умолчанию.
в самом низу жмем «ADD»
[7]
Чтобы применить, жмем: «Apply change»
[8]
Все наши данный будем шифровать. Disks > Encryption > жмём +
Выбираем:
1. диск, у нас он в скобках (backup).
2. Алгоритм шифрования, я выбрал AES
3. Длину ключа, советую побольше 256
Вписываем ключевую фразу
Ставим галочку и жмём «ADD».
Если все сделали правильно, то ниже будет соответствующая надпись.
Command output: Encrypting '/dev/ad6'... Please wait! Calculating number of iterations... Done, using 82413 iterations. Metadata value stored on /dev/ad6. Done. Attaching provider '/dev/ad6'. Attached to /dev/ad6. Done.
[10]
Отформатируем зашифрованный диск: Disks > Format
По умолчанию предлагается в метке тома использовать USF, согласимся.
Жмём «Format disk»
[11]
Если вы соблюдали инструкцию, то увидите процесс форматирования
[12]
Придется подождать, время зависит от объема диска.
По завершении форматирования в самом конце увидите надпись
3904275808, 3904652160, 3905028512, 3905404864, 3905781216, 3906157568, 3906533920, 3906910272 kern.geom.debugflags: 16 -> 0 Done!
самое главное здесь увидеть «Done!»
Теперь нам надо смонтировать отформатированный диск: Disks > Mount Point > жмём +
[13]
Выбираем диск, указываем файловую систему.
RSYNC Часть 3 — внутри NAS, неочевидные применения
Это окончание про RSYNC, см начало и продолжениеБекап через RSYNC. Часть 1 — сервер
Бекап через RSYNC. Часть 2 — клиент
Сегодня об использовании rsync для переноса данных внутри NAS. И зачем такие хитрости.
Кроме вкладок «Клиент» и «Сервер» в nas4free реализована вкладка «Локально», Services|Rsync|Local. Очевидно, она предназначена для переноса данных внутри NAS.
Для включения — жмём серый плюс внизу-справа, открывается диалог, его верхняя часть
Source share — откуда копируем
Destination share — куда
Who — под каким пользователем
Sync time — cron таблица. У меня задано в 02:02 каждый день недели, каждый день, каждый месяц. Вы можете задать произвольный график — каждый час, если пятница пришлась на 13-е 🙂
Description — необязательная памятка — что это такое.
Расширеные опции, значения
Recursive — включая подпапки
Times — сохранять время изменения файлов
Compress — сжимать при пересылке
Archive — архивный режим. Прим. эквивалент -rlptgoD (no -H,-A,-X) — рекурсивно по подпапкам (r), симлинки как симлинки (l), сохранять *nix права доступа (p), сохранять время изменения файлов (t), сохранять информацию о владельце файла (o) и его группе (g), сохранять специальные файлы и файлы-устройства. Не сохранять ACL, хардлинки и расширенные атрибуты.
Delete — стирать на принимающей стороне файлы, которых нет на передающей
Quiet — подавлять сообщения, кроме сообщений об ошибках
Preserve permissions и extra attributes — сохранять права доступа и атрибуты файлов
IMHO по большому счёту главное — не ставить галочку против Delete. Остальное менее важно. Я расставил опции как указано на рисунке.
Кнопки немного особенные — есть обычные Save и Cancel, то есть Сохранить и Отменить. По окончании настройки стоит сохранить. А потом можно войти диалог снова, нажав на гаечный ключ и выполнить немедленно это задание (Execute now)
Ну и, напоследок, зачем такие хитрости — запускать rsync внутри одного NAS, когда можно просто скопировать? Я придумал пока два полезных применения.
Во-первых, я предпочитаю качать контент на выделенный диск, смотреть и большую часть удалять. А существенно меньшую — переносить на raidz массив. Копирование десятков гигабайт данных — процесс небыстрый. Поэтому я организовал папку-источник на диске для скачек и папку-приёмник на массиве. Достойное хранения преносится в папку источник, ночью копируется в папку-приёмник. Потом в удобное время я могу разложить по вкусу файлы из папки-приёмника и не забыть стереть файлы в папке-источнике.
Во-вторых, не все домашние продвинуты в компьютерной области, то есть в принципе могут наломать дров. Поэтому я расшариваю по SMB определённые папки, куда они могут с со смартфонов и пр. кидать картинки-видео. И смотреть тут же на Дюне на большом экране. А ночью в фоновом режиме всё это бекапится. Если исходные файлы ненароком стереть — автоматические копии останутся.
Как установить и настроить Rsync
Wiki : Rsync (англ. Remote Synchronization) — программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодирование данных при необходимости. Важным отличием rsync от многих других программ/протоколов является то, что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.
Rsync является общепризнанным программным обеспечением, которое работает надежно и быстро. Бэкапленд использует его для оптимального механизма создания резервных копий, а так же по причине его массовой распространенности на серверах, что означает, что вы сможете работать с нашей системой без каких-либо настроек на вашей стороне. Но из каждого правила существуют исключения, поэтому ниже мы предлагаем подробную инструкцию как установить и настроить Rsync на серверах с операционными системами Debian, Ubuntu, Centos и FreeBSD.
Проверка:
Проверьте установлен ли rsync:
выполните команду в ssh: whereis rsync если ответом будет /usr/local/bin/rsync или /usr/bin/rsync то rsync у вас есть, вам его устанавливать не нужно.
Так же можете проверить, просто запустив команду в ssh: rsync или /usr/local/bin/rsync или /usr/bin/rsync если будет ответ, а не ошибка, тогда вам его устанавливать не нужно.
Установка:
Описанные далее установка и настройка rsync возможны, только если у Вас есть права root. Если таких прав нет, напишите Вашему системному администратору или в техническую поддержку хостинга с просьбой установить rsync.
Для FreeBSD:cd /usr/ports/net/rsync
make install
Для Linux Debian и Ubuntu:apt-get install rsync
Для Centos:yum install -y rsync
Настройка:
Настраивать rsync нужно только в одном случае, если Вы хотите, чтобы наша система создавала резервные копии не через SSH, а через демон rsyncd.
Через файл конфигурации настройки rsyncd вы можете:
- Задать своего пользователя и пароль
- Разрешить вход к вам только с определенного IP/хоста (наш хост при заказе мы вам высылаем)
- Разрешить доступ к конкретным директориям и файлам на вашей системе
Настройка rsync для FreeBSD:cd /usr/local/etc/
cоздаем файл приветствия (не обязательно)echo «Hello from rsync server» > rsyncd.motd
echo «Server Adress: My SuperHost 1.1.1.1» >> rsyncd.motd
создаем файл c именем пользователя и паролемecho «backup:ПАРОЛЬ» > rsyncd.scrt
chmod 0600 /usr/local/etc/rsyncd.scrt
где ПАРОЛЬ тот, что мы выдаем вам при создании в панели управления задания на резервное копирование. В дальнейшем вы можете изменить пароль на свой в файле rsyncd.scrt и на сервере хранения резервных копий в файле /var/www/rc-******/data/rsyncd.pass, где rc-****** ваш логин на сервер с бэкапами.
Внимание! Если пароли на вашем сервере и сервере с бэкапами не совпадут, резервные копии создаваться не будут.
Далее создаем основной конфиг rsyncd.conf
1) cd /usr/local/etc/
2) mv rsyncd.conf rsync.original
3)
cat << EOF >> /usr/local/etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
motd file = /usr/local/etc/rsyncd.motd
uid = root
gid = wheel
max connection = 4
auth users = backup
secrets file = /usr/local/etc/rsyncd.scrt
[root]
path = /
read only = yes
host allow = ssh.bkp177.backupland.com
EOF
4) /usr/local/etc/rc.d/rsyncd restart
Теперь настраиваем так, чтобы после перезагрузки сервера у вас запускался демон rsyncd
Делаем отступ с переносом на следующую строку echo «» >> /etc/rc.conf
Добавлем разрешение запускать при старте echo ‘rsyncd_enable=»YES»‘ >> /etc/rc.conf
Настройка rsync для Linux Debian и Ubuntu:
Находите файл /etc/default/rsync
В нем находите строку:
RSYNC_ENABLE=false
и меняете на:
RSYNC_ENABLE=true
Таким образом мы разрешаем при загрузке сервера запустить демон rsyncd
Далее создадим папку для наших файлов:mkdir /etc/rsync/
cd /etc/rsync/
создаем файл приветствия (не обязательно)echo «Hello from rsync server» > rsyncd.motd
echo «Server Adress: My SuperHost 1.1.1.1» >> rsyncd.motd
создаем файл c именем пользователя и паролемecho «backup:ПАРОЛЬ» > rsyncd.scrt
chmod 0600 /etc/rsync/rsyncd.scrt
где ПАРОЛЬ тот, что мы выдаем вам при создании в панели управления задания на резервное копирование. В дальнейшем вы можете изменить пароль на свой в файле rsyncd.scrt и на сервере хранения резервных копий в файле /var/www/rc-******/data/rsyncd.pass, где rc-****** ваш логин на сервер с бэкапами.
Внимание! Если пароли на вашем сервере и сервере с бэкапами не совпадут, резервные копии создаваться не будут.
Далее создаем основной конфиг rsyncd.conf cd /etc/ Обратите внимание на то, что файл rsyncd.conf должен быть расположен в папке /etc/
mv rsyncd.conf rsyncd.old делаем так на всякий случай, вдруг файл такой уже есть
cat << EOF >> /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
motd file = /etc/rsync/rsyncd.motd
uid = root
gid = root
max connection = 4
auth users = backup
secrets file = /etc/rsync/rsyncd.scrt
[root]
path = /
read only = yes
host allow = ssh.bkp177.backupland.com
EOF
/etc/init.d/rsyncd restart
Настройка rsync для Centos 6:
Находите файл /etc/xinetd.d/rsync, в нем находите строку:
disable = yes
и меняете на:
disable = no
Перезагружаем сервис xinetd:/etc/init.d/xinetd restart
Добавляем xinetd в автозапуск:chkconfig xinetd on
Конфиг создаем такой же как и для Centos 7 (смотри ниже).
Настройка rsync для Centos 7:
Включаем в автозагрузкуsystemctl enable rsyncd.service
Запускаем rsyncd демонsystemctl start rsyncd.service
Далее создадим папку для наших файлов:mkdir /etc/rsync/
cd /etc/rsync/
создаем файл приветствия (не обязательно)echo «Hello from rsync server» > rsyncd.motd
echo «Server Adress: My SuperHost 1.1.1.1» >> rsyncd.motd
создаем файл c именем пользователя и паролемecho «backup:ПАРОЛЬ» > rsyncd.scrt
chmod 0600 /etc/rsync/rsyncd.scrt
где ПАРОЛЬ тот, что мы выдаем вам при создании в панели управления задания на резервное копирование. В дальнейшем вы можете изменить пароль на свой в файле rsyncd.scrt и на сервере хранения резервных копий в файле /var/www/rc-******/data/rsyncd.pass, где rc-****** ваш логин на сервер с бэкапами.
Внимание! Если пароли на вашем сервере и сервере с бэкапами не совпадут, резервные копии создаваться не будут.
Далее создаем основной конфиг rsyncd.conf
cd /etc/Обратите внимание на то, что файл rsyncd.conf должен быть расположен в папке /etc/
mv rsyncd.conf rsyncd.oldделаем так на всякий случай, вдруг файл такой уже есть.
cat << EOF >> /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
motd file = /etc/rsync/rsyncd.motd
uid = root
gid = root
max connection = 4
auth users = backup
secrets file = /etc/rsync/rsyncd.scrt
[bkpl]
path = /
read only = yes
host allow = ssh.bkp177.backupland.com
EOF
Применяем настройки
для Centos 7systemctl restart rsyncd.serviceдля Centos 6service xinetd restart
Если у вас на сервере установлен Firewall вам нужно разрешить входящие соединение на порт 873
Описание полей файла конфигурации rsyncd.conf
pid file = /var/run/rsyncd.pid | #pid файл хранящий ID процесса |
motd file = /usr/local/etc/rsyncd.motd | #файл приветствия |
uid = root | #работа под правами этого пользователя* |
gid = wheel | #работа с правами этой группы* |
max connection = 4 | #кол-во коннектов со стороны сервиса |
auth users = backup | #логин пользователя для доступа извне |
secrets file = /usr/local/etc/rsyncd.scrt | #файл с логином и паролем для доступа извне |
[bkpl] | #секция, в которой описано что можно делать |
path = / | #Какую папку можно бэкапить |
read only = yes | #Разрешено только бэкапить, восстановить нельзя будет |
host allow = ssh.bkp177.backupland.com | #сервер, где будут храниться резервные копии |
Внимание! Вместо ssh.bkp177.backupland.com необходимо указать тот хост, который Вы получили при регистрации. Аналогично, путь /usr/local/etc/ зависит от того, какая установлена операционная система.
* Если вы не собираетесь резервировать весь сервер, тогда права root вы можете заменить на права пользователя, файлы которого вы будете бэкапить.
Организация backup-сервера. Linux, ZFS и rsync / Habr
TL;DR:Статья о настройке бекапа линуксовых серверов. В качестве хранилища используется раздел ZFS с включенными дедубликацией и компрессией. Ежедневно делаются снапшоты, которые сохраняются в течение недели (7 штук). Ежемесячные снапшоты хранятся в течение года (еще 12 штук). В качестве транспорта выступает rsync: на сервере он запущен демоном, на клиентах он запускается из crontab.
Так получилось, что у меня есть пара серверов, на которых под KVM живут виртуальные машины. Хотелось бекапить образы этих машин в сеть, но так, чтобы выполнялись условия:
- Хранить все бекапы за последнюю неделю.
- Хранить в течении года ежемесячные бекапы.
- Никаких сторонних бекап-агентов. На клиентах только стандартное и проверенное поколениями админов ПО.
- Экономно расходовать место в хранилище. Желательна компрессия и дедубликация данных.
- Все файлы должны быть доступны без дополнительных инструментов и оболочек. Идеальный вариант: каждый бекап в отдельном каталоге.
Можно ли всё это совместить? Да, и очень просто.
Все компьютеры, о которых идет речь в этой статье, являются серверами. Но как-то глупо и длинно делить их на “сервер, который хранит бекапы” и “сервер, бекапы которого хранит сервер, который хранит бекапы”. Поэтому первый я буду называть просто сервером, а второй уже начал называть клиентом.
1. ZFS с компрессией и дедубликацией
Наиболее привычная для меня ОС – Linux. Всё то же самое без особых изменений должно подойти и к Solaris, и к FreeBSD, в которых ZFS есть давно и что называется “из коробки”. Но Linux мне ближе и роднее, а проект по портированию на него ZFS выглядит уже достаточно зрелым. За год экспериментов у меня не было с ним заметных проблем. Поэтому поставил на сервер Debian Wheezy, подключил официальный репозитарий проекта и установил нужные пакеты.
Создал пул, указав что zfs у меня будет на /dev/md1 и что монтировать эту файловую систему я хочу к каталогу /mnt/backup:
# zpool create backup -m /mnt/backup /dev/md1
По имени устройства /dev/md1 можно заметить, что я использую линуксовый software raid. Да, я знаю, что у ZFS есть свой способ создавать зеркала. Но поскольку на этой машине уже есть одно зеркало (для корневого раздела) и оно сделано штатным mdadm, то и для второго зеркала я предпочту использовать его же.
Включил дедубликацию и компрессию, сделал видимым каталог со снапшотами:
# zfs set dedup=on backup
# zfs set compression=on backup
# zfs set snapdir=visible backup
Положил в /usr/local/bin скрипт для создания снапшотов:
#!/bin/bash
export LANG=C
ZPOOL='backup'
# Храним все снапшоты 7 дней
# снапшот на четвертое число каждого месяца храним год
NOWDATE=`date +20%g-%m-%d` # дата формата ГГГГ-ММ-ДД
OLDDAY=`date -d -7days +%e`
if [ $OLDDAY -eq '4' ]
then
OLDDATE=`date -d -1year-7days +20%g-%m-%d` # получаем дату -1 год и на7 дней
else
OLDDATE=`date -d -7days +20%g-%m-%d` # получаем дату -7 дней
fi
/sbin/zfs snapshot $ZPOOL@$NOWDATE
/sbin/zfs destroy $ZPOOL@$OLDDATE 2>/dev/null
Этот скрипт добавил в crontab для ежедневного запуска. Чтобы содержимое снапшота соответствовало его дате, скрипт лучше запускать ближе к концу суток. Например, в 23:55.
Четвертое число месяца выбрано почти случайно. Запускал я всё этого третьего августа и хотелось поскорее сделать бекап, который будет храниться год. Следующий день был четвертым.
Снапшоты будут сохраняться в каталоге /mnt/backup/.zfs/snapshot. Каждый снапшот – отдельный каталог с именем в виде даты на момент создания этого снапшота. Внутри снапшота полная копия каталога /mnt/backup в том виде, в котором он был в этот момент.
2. Rsync на сервере
Традиционно rsync настраивают для работы поверх ssh. На клиентах настраивается авторизация по ключам (и без пароля), а эти ключи складываются на бекап-сервер. Сервер ходит по ssh на клиентов и забирает с них файлы. Преимущество этого подхода – шифрование трафика. Но мне не нравится идея с беспарольным входом по ssh (особенно в свете последних уязвимостей в bash). Так же мне не нравится идея инициировать бекап со стороны сервера: иногда перед бекапом на клиенте хочется выполнить какой-нибудь скрипт (например, сбросить дамп mysql), и только после завершения этого скрипта начинать бекап. Поэтому мой выбор – rsync, запущенный демоном на сервере и запускаемый из crontab на клиентах.
Поставил на сервер rsync (штатный, из репозитария), и чтобы он запускался при старте системы, написал в /etc/default/rsync:
RSYNC_ENABLE=true
Создал на сервере /etc/rsyncd.conf такого содержания:
uid = nobody
gid = nogroup
use chroot = yes
max connections = 10
pid file = /var/run/rsyncd.pid
[kvm01]
path = /mnt/backup/kvm01
comment = KVM01 backups
hosts allow = 192.168.xxx.xxx
hosts deny = *
read only = no
[kvm02]
path = /mnt/backup/kvm02
comment = KVM02 backups
hosts allow = 192.168.xxx.yyy
hosts deny = *
read only = no
192.168.xxx.xxx и 192.168.xxx.yyy – это адреса тех серверов, которые будут бекапиться. Зовут их kvm01 и kvm02. Их файлы будут лежать в /mnt/backup/kvm01 и /mnt/backup/kvm02. Поэтому:
# mkdir /mnt/backup/kvm01
# mkdir /mnt/backup/kvm02
# chown nobody:nogroup /mnt/backup/kvm01
# chown nobody:nogroup /mnt/backup/kvm02
Запустил rsync:
# /etc/init.d/rsync start
3. Rsync на клиентах
Минимально необходимый скрипт для копирования файлов с клиента kvm02 на сервер с адресом 192.168.xxx.zzz будет выглядеть примерно так:
#!/bin/bash
RSYNCBACKUPDIR="rsync://192.168.xxx.zzz/kvm02"
LOCALDIR="/virt/files"
rsync -vrlptD --delete $LOCALDIR $RSYNCBACKUPDIR
Разумется, если речь идет о бекапе виртуальных машин, то этот скрипт стоит пополнить командами создания и удаления LVM-снапшота, монтирования и отмонтирования его содержимого и так далее. Но эта тема уже выходит за рамки данной статьи.
4. Восстановление
Для восстановления файлов из бекапа клиента KVM01 за 4 августа 2014 года достаточно будет на сервере перейти в каталог /mnt/backup/.zfs/snapshot/2014-08-04/kvm01/ и скопировать оттуда файлы любым привычным способом. Каждый конкретный бекап выглядит как обычный каталог, доступный только для чтения. Для поиска определенного файла в этом бекапе можно использовать стандартные утилиты, такие как find или grep.
5. Заключение
Сейчас на сервере 9 снапшотов: 7 ежедневных и 2 ежемесячных. Плюс сегодняшний бекап, снапшот с которого снимется вечером. Размер раздела с бекапами составляет 1.8T. Общий объем файлов — 3.06T. Физически занимают на диске они 318G. Суммарный объем сегодняшнего бекапа — 319G. Да, 10 бекапов на ZFS с компрессией и дедубликацией занимают места меньше, чем один бекап занимал бы на файловой системе без этих полезных свойств.
# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
backup 1.80T 310G 1.49T 16% 10.37x ONLINE -
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
backup 3.06T 1.42T 318G /mnt/backup
Поскольку сам rsync не занимается шифрованием передаваемых данных, высовывать такую схему без изменений в интернет небезопасно. Добавить шифрование можно, пустив трафик через ipsec или stunnel, например.
Выше я написал, что заметных проблем с ZFS у меня не было. На самом деле, одна проблема была. Однажды ночью, когда оба клиента активно бекапились, сервер дважды сообщил в dmesg, что task rsync blocked for more than 120 seconds. При этом оба бекапа успешно завершились, ничего не зависло, данные не потерялись. Подозреваю, что это проявление знаменитого бага 12309. Разнес бекапы по времени, с тех пор проблема не повторялась.
Rsync настройка бэкапа на CentOS/Debian/Ubuntu
Существует много способов организации backup на CentOS/Debian/Ubuntu серверах — бесплатные утилиты, самописные скрипты с использованием tar, система бэкапа bacula и много другое. Все это в той или иной мере я использовал или использую в своей работе. Сегодня я хочу с вами поделиться своим методом организации простого, удобного и быстрого способа настройки инкрементного backup с использованием популярной утилиты rsync на серверах под управлением CentOS/Debian/Ubuntu. Способ одинаково работает на этих истемах, небольшие отличия только в самой установке rsync, о чем я отдельно упомяну для каждой системы.
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужно пройти .
Установка 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 на серверах источниках информации, с которых мы будем забирать данные для 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.
Я в таких случаях создаю несколько скриптов: на монтирование шары, бэкап и размонтирование, объединяю их в один и запускаю последовательно. В итоге получается, что подключаем диск, делаем бэкап и отключаем его.
Онлайн курс по Linux
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:- Знание архитектуры Linux.
- Освоение современных методов и инструментов анализа и обработки данных.
- Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
- Владение основными рабочими инструментами системного администратора.
- Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
- Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Помогла статья? Есть возможность отблагодарить автора
Бекап через RSYNC. Часть 2 — клиент
В прошлый раз мы настроили RSYNC сервер на nas4free. Теперь нужен клиент на том/тех компьютерах, с которых будем делать бекап.В английской Википедии на страничке по RSYNC есть табличка «Solutions using Rsync» из которой вы можете попытаться выбрать клиент на свой вкус и платформу. Я посмотрел несколько в поисках варианта под Windows, с графическим интерфейсом (гуем в просторечии) и бесплатного. Мне приглянулся QtdSync. Сразу отмечу — его интерфейс реализован на английском, немецком и французском. Русского на сегодня нет. Пакет включает и сервер и клиент, мы будем настраивать и использовать клиент.
1. Качаем, устанавливаем и запускаем. Жмём Create new backup set (создать новый набор бекапа)
2. Прежде всего жмём кнопку Settings
Меняем отмеченное красным — включаем показ экспертных установок и выключаем опцию привязывания файлов-папок. Что такое последнее я толком не разобрался. Похоже сделано на тот случай, если из-за подключения устройств к Windows машине у вас меняются буквы, присвоенные дискам. Если это ваш случай — включите. Жмем кнопку ОК (зеленую круглую с галочкой, внизу справа. А красную с крестиком я буду называть Cancel.)
3. Диалог меняется, внизу появляется строка параметров, которую гуй передаёт rsync
отсюда надо ОБЯЗАТЕЛЬНО удалить —delete
если этого не сделать, то происходит удаление с сервера того, чего нет на клиенте. А нам такое не надо.
Следите при создании новых наборов бекапа и стирайте ключ —delete. Замечу, что если мы (как рекомендовалось в первой части) создали датасет и включили на нём автоматические снапшоты, то вреда от стирания не так много. Пока жив соответствующий снапшот, удалённое можно легко восстановить.
UPD Курение man rsync показало, что ключи —ignore-errors и —force действуют только вместе с ключём —delete. Без него — смысла в них нет. От греха, стираем эти ключи тоже. Вообще, не очень понятно, зачем автор программы столь деструктивные ключи поставил по умолчанию…
4 Теперь задаём нашему сету имя — там, где по умолчанию написано New backup set. Советую выбирать осмысленные имена из латинских букв и цифр.
5 Жмём справа сбоку зелёную кнопку с +. В открывшемся мини-диалоге выбираем Folder, т.е. Папку. Открывается стандартный диалог выбора папки. Выбираем ту, которую хотим архивировать. Если после этого всё же выскочит диалог с заголовком Bind folder
Я выбираю отмеченное красным — никуда не привязывать, больше не спрашивать. Опция сделана для сменных носителей и, шире, компьютеров, на которых по каким-то причинам диски могут менять буквы, им присвоенные. Если это ваш случай — поэкспериментируйте и выберите подходящий вариант.
Операцию выбора папки надо повторить для всех папок, которые в составе этого набора вы собираетесь архивировать. По одной 🙁
ПРИМ. В качестве папки можно выбрать и диск. Но тут есть особенность. На дисках есть скрытые папки. Их обычно архивировать не стоит. Чтобы не архивировать, следует открыть содержимое диска, нажав на плюсик и снять галочки против системных папок
Для примера — галочки сняты для системных папок.
Конечно, точно также вы можете убирать из набора архивирования подпапки.
Когда закончите, убедитесь, что ключ —delete не вылез, если вылез — убейте его.
В последствии вы можете отредактировать набор, добавить или удалить папки и т.п. Для этого предназначены кнопки справа, желтая и красная. Потренируйтесь.
Под ними кнопка в виде зелёной коробки, она предназначена для восстановления папки из бекапа.
6 Это мы выбрали что архивировать. Осталось — куда. Жмём вкладку Destination
Справа от пустой строки Destination — желтая кнопка, жмём её, выбираем желтый remote rsyc path
В открывшемся диалге (как на картинке) вбиваем IP вашего NAS и, если применяются — логин и пароль. Я обхожусь без них, так что оставил эти поля пустыми.
Зелёная кнопка ОК
Сервер опознан.
7 Ну и жмём справа внизу зелёную Save & Quit.
Нам предлагают сохранить набор в папку программы.
UPD от 17 сент 2014Соглашаемся. С версии 0.6.20 работа с наборами, сохранёнными в папку программы стала невозможной. Не знаю, что намудрил автор, но у меня программа просто перестала работать нормально и потребовалось создать наборы заново и сохранить их куда-то, где Windows не возражает против сохранения файлов. /UPD
Главный диалог программы изменился, привожу свой, у меня создано в процессе экспериментов два набора бекапа.
Видно, что добавлять можно и локальные и сетевые диски, хоть с того же самого NAS.
UPD Но можно — не значит нужно. Для локальной передачи внутри NAS есть специальный режим Services|Rsync|Local.
8. Теперь стоит задать работу по расписанию. Выбираем один из наборов и жмём желтую Edit selected Backup set
Вверху в меню жмём иконку Schedule (расписание) в виде черного циферблата.
У меня, к примеру, задано делать начиная с 25 января каждый день в 21-00
Плюс к этому при старте компьютера, если бекап старше одного дня.
При сбое пытаться повторить, но не ранее, чем через 10 мин.
И работать тихо, без выдачи лишних сообщений.
Зелёная кнопка OK
В первый раз появится диалог, говорящий, что в реестр будет записана команда для работы по расписанию. Надо согласиться. В системном трее (справа внизу экрана) появится иконка -чёрный циферблат
— вот она, первая слева.
Вроде всё в порядке.
9. Осталось выполнить первый бекап. В первый раз это займет несколько минут. Или десятков минут — в зависимости от объёма.
Для ручного старта надо в диалоге из п 7 отметить желаемые наборы и нажать зелёную Run Checked backup sets. Пойдёт процесс.
Эпилог. Я надеюсь, что вы сначала пробежали глазами эту инструкцию, а потом уже стали жать кнопки. Может и зря надеюсь 😉
Если не зря — совет потренироваться сначала на кошках. Создайте маленькую папку, положите в неё несколько файлов. Сконфигурируйте всё. Назавтра отредактируйте один из файлов в этой папке, другой переименуйте, третий удалите, четвёртый добавьте. И, не запуская вручную бекап, оставьте на послезавтра.
Послезавтра, после того, как пройдет бекап по расписанию, папка на сервере должна содержать все внесённые изменения. Если это так — бинго, можно настраивать для реальных папок. Если нет — ищите где проблема. На кошках это проще и не так напряжно, как на потерянных семейных фото архивах.
PS Замеченные глюки.
a) По странному приколу, если добавить папку, в имени которой есть пробел — на сервере имеем папку с подчёркиванием вместо пробела. Например Дружные спицы стали Дружные_спицы. Эффект проявляется, только если эту папку добавляли в набор. Если так называется подпапка — глюка нет.
б) Если где-то на NAS возникает ошибка и в сообщениях что-то говорится о permissions — проблема с правами доступа.
Простое решение — дать команду
chmod -R 777 <имя папки бекапа>
Имя папки бекапа можно посмотреть через вебгуй, Advanced|File Manager, зайдя в эту папку
я подчеркнул корявой красной линией — в моём случае: /mnt/Pool/Backup/RSYNC
На худой конец —
chmod -R 777 /mnt
Чтобы дать команду — зайти в командную строку (описано здесь, пункты 1 и 2) или через вебгуй Advanced|Execute command
Или через ftp клиент, напрмер Filezilla — заходим на NAS, выбираем нужную папку правой кнопкой мыши, выбираем из меню File Permissions, ставим 777 и рекурсивно
На сегодня — всё.
Мануал на QtdSync
UPD Совет от камрада Zlong Чтобы QtdSync бэкапил только вложенные каталоги (без каталога верхнего уровня) в расширенных опциях необходимо добавить -O /UPD
Резервное копирование на удаленный сервер / Southbridge corporate blog / Habr
Назрела необходимость замены медленного rdiff-backup на более шустрое решение для инкрементальных бекапов на удаленый сервер. Сперва рассматривался Rsnapshot, но причине того, что он не умеет без костылей делать бекапы именно на удаленные серверы от него отказались. Прочие аналоги нам также не подошли по тем или иным причинам. Искать что-то готовое на просторах github и допиливать под себя мы не захотели, поэтому было решено написать новый скрипт с нуля своими силами. Главная цель сделать решение для инкрементального бекапа на удаленный сервер схожее с rdiff, но с использованием жестких ссылок rsync.Скрипт выложен в нашем репо на github, будем рады получить отзывы, советы, коммиты!
Инструкция по приминению нашего решения на примере CentOS 6.x
Подготовка сервера бэкапов.
Общая настройка.
Устанавливаем rsync и xinetd:yum -y install rsync xinetd
Добавляем в атозагрузку сервис xinetd:chkconfig --add xinetd
Разрешаем rsyncvi /etc/xinetd.d/rsync
Меняем disable = yes на disable = no
и создаем файл конфигурации /etc/rsyncd.conf
И добавляем в него:pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
На этом общую настройку заканчиваем и переходим к настройке бэкапа под конкретный сервер.
Настройка окружения для бэкапа сервера.
Добавляем пользователя если он не еще не добавлен:
usernames=backup
useradd -g backups $usernames
rm -f /home/$usernames/.bash*
mkdir /home/$usernames/.ssh /home/$usernames/rsyncbackups
chown -R $usernames:backups /home/$usernames
chown -R root:root /home/$usernames/.ssh
touch /home/$usernames/.ssh/authorized_keys
Блок с ключом необходимо заменить на сгенерированные данные id_rsa.pub:
no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa ---your-ssh-key-here--- [email protected]
Добавляем в /etc/rsyncd.conf
cat << EOF >> /etc/rsyncd.conf
[$usernames]
comment = backups for $usernames
path = /home/$usernames/rsyncbackups
use chroot = true
uid = root
gid = root
log file = /var/log/rsyncd/$usernames.log
read only = false
write only = false
hosts allow = 1.2.3.4
hosts deny = *
transfer logging = false
EOF
где:
path = /home/$usernames/rsyncbackups - путь где будут лежать бэкапы
log file = /var/log/rsyncd/$usernames.log - путь к логам
hosts allow = 1.2.3.4 - IP с которого разрешен доступ к данному окружению
На этом, настройка серверной части завершена.
Настройка сервера клиента.
Для изменения параметров сервера бэкапов, исключений контейнеров из бэкапа, локальной папки (или ее отсутствия) достаточно внести изменения в файлrsync-backup.local.conf
Исключения
Для исключений существуют файлы со списком исключений, указанных с каждой новой строки без первичного слеша (правила исключений для rsync).
srv/southbridge/etc/rsync-backup.exclude.dist - файл с общими исключениями
srv/southbridge/etc/rsync-backup.exclude.local.example - пример названия исключений для локального бэкапа
srv/southbridge/etc/rsync-backup.exclude.remote.example - пример название исключений для удаленного бэкапа
Cкрипт бэкапа проверяет наличие файлов srv/southbridge/etc/rsync-backup.exclude.local и srv/southbridge/etc/rsync-backup.exclude.remote и при их наличии добавляет исключения при бэкапах. Если локальный бэкап отменили — локальные исключения добавляются в удаленные.
Включения
Особенностью этого скрипта является возможность включения определенных файлов или каталогов из исключенной директории выше иерархией. Для этого нужно создать файлы/srv/southbridge/etc/rsync-backup.include.local
/srv/southbridge/etc/rsync-backup.include.remote
соотвественно для локальных и удаленных включений.
Если нужно включить конкретный файл, то необходимо указать его путь без первичного слеша, к примеру:var/log/nginx/server.log
Если же нужно рекурсивно включить директорию, то нужно указать включение так:var/log/nginx/**
Каждое новое включение с новой строки без первичного слеша.
При работе включений будет бэкапиться вся иерархия директорий контейнера, даже если раннее было добавлено исключение определенных директорий, но бэкапиться будет именно директории без файлов.
Это особенность работы rsync, к сожалению другого пути пока не нашли.
Часть скрипта для работы включений:
if [ -f "$LOCAL_INCLUDE" ]; then
e "sync include"
e "rsync -ax --include=*/ --include-from=$LOCAL_INCLUDE --exclude=* --link-dest=../../Latest $VZ_PRIVATE/$VEID $LOCAL_DIR/$VEID/$WHICH/Processing$DATE"
LLOG=`rsync -ax --include=*/ --include-from=$LOCAL_INCLUDE --exclude=* --link-dest=../../Latest $VZ_PRIVATE/$VEID $LOCAL_DIR/$VEID/$WHICH/Processing$DATE 2>&1`
fi
Дальнейшая работа с бэкапами
По умолчанию скрипт будет создавать бэкапы: 7 дневных, 4 недельных и 1 месячный для изменения этого в
/srv/centos-admin.ru/etc/rsync-backup.local.conf можно вписать иные цифры следующих параметров
DAILY=7
WEEKLY=4
MONTHLY=1
Инкрементальные бэкапы производятся с использованием хардлинков. Поэтому, чтобы сократить объем дискового пространства занимаемого бэкапом, при добавлении исключений, и при чистке бэкапов от этих исключений нужно будет удалить соответствующие директории в каждой папке бэкапов. Конечно можно написать скрипт для автоматизации этой рутины, это в планах.
В заключение, какой выйгрыш по времени мы все-таки получили:
Cравнительный тест rdiff vs. rsync:
Сравнение времени выполнения бэкапа:
1. Первичный бэкап контейнера в 5Gb (локальный и удаленный)
rdiff-backup — 6 минут 30 секунд
rsync-backup — 1 минута 34 секунды
2. Вторичный бэкап, изменения в контейнерах не было
rdiff-backup — 30 секунд
rsync-backup — 2 секунды
3. Вторичный бэкап, в контейнер добавлена папка c дистрибутивом debian (не iso) в 4.7Gb
rdiff-backup — 11 минут 32 секунды
rsync-backup — 2 минуты 15 секунд
И на графиках, первый скачек — rdiff, второй — rsync