Даже самые дорогие системы, выполняющие периодическое резервное копирование (например, каждую ночь), обладают одним существенным ограничением: всё, что было сделано на компьютере после последнего резервного копирования, никак не защищено, и будет безвозвратно потеряно, если компьютер выйдет из строя.
Пусть, например, вчера была написана первая часть «Мёртвых Душ», и ночью сделана резервная копия. А сегодня написана вторая часть, и в эмоциональном порыве уничтожена ещё до того, как настало время очередного резервного копирования.
Бороться с такими ситуациями призвана технология непрерывного резервного копирования (Continuous Data Protection, CDP). Всё, что записывается на диск, одновременно отправляется в резервную копию.
Рассмотрим подробнее, как это делается в продукте Arcserve RHA (Replication and High Availability) на реальных примерах в средах Windows и Linux.
Содержание
Введение
1. Архитектура
2. Установка программного обеспечения
2.1. Установка управляющих компонентов
2.2. Установка управляемых компонентов на Windows
2.3. Установка управляемых компонентов на Linux
3. Эксперименты по восстановлению данных
3.1. Восстановление файлов на заданный момент времени
3.2. Восстановление базы данных MS SQL на заданный момент времени
3.3 Восстановление базы данных MySQL на Linux на заданный момент времени
4. Заключение и реклама
Введение
Пусть мы имеем два сервера.
Боевой сервер (Master) содержит постоянно обновляющиеся данные. Мы следим за изменениями и ведём ведомость (журнал) изменений в виде «было -> стало», например:
Время | Содержимое файла «мытьё» | Журнал изменений |
---|---|---|
10:30:51 | МАМА МЫЛА РАМУ | |
10:30:52 | МАМА МЫЛА ПАПУ | Файл «мытьё», смещение 10, «РАМ» -> «ПАП» |
Журнал изменений постоянно пересылается на резервный сервер (Replica) и применяется к его файлам. Таким образом файлы боевого и резервного серверов становятся идентичными.
Некоторые детали:
- Изменения отслеживаются на уровне байтов, то есть при изменении одного байта журнал будет содержать информацию только об этом байте, а не о всём блоке данных;
- Журнал изменений пересылается по обычной IP-сети, то есть разнести боевой и резервный серверы можно на значительные расстояния, в том числе, в разные города;
- При разрыве соединения данные накапливаются в буфере и, как только связь восстановится, будут переданы и применены к резервному серверу;
- История изменений (в заданном объёме, например, последние 500 Мегабайт) сохраняется на резервной машине и может быть применена в обратной последовательности, вернув содержимое файлов в состояние на определённый момент времени.
1. Архитектура
Для того, чтобы описанная выше схема заработала, нам потребуется установить на машины Master и Replica компонент, именуемый Engine, который берёт на себя основную работу по отслеживанию изменений в файлах и репликации данных с одной машины на другую.
Для того, чтобы сконфигурировать работу этих двух Engine, установим на ещё одну машину (Manager) сервис управления (Control Service). Эта машина требуется только для конфигурации, получения отчётов и запуска отдельных действий на управляемых машинах. Она не должна быть постоянно включенной.
Наконец, пользовательский интерфейс мы получим, соединившись интернет-браузером с сервисом управления, и скачав оттуда windows-приложение.
2. Установка программного обеспечения
Скачаем Arcserve RHA (iso или zip) с сайта разработчика (как указано на странице arcserve.zendesk.com/hc/en-us/articles/205009209-RHA-R16-5-SP5-ARCSERVE-RHA-16-5-SP5 ):
Продукт работает 30 дней без лицензионных ключей.
2.1. Установка управляющих компонентов
Начнём с того, что установим Control Service на управляющую машину (Manager).
Для его работы требуется .NET Framework 3.5.
Важно! Нужно явно указать, где на дистрибутиве Windows находится этот компонент. Для этого на следующем экране нажать “Specify an alternate source path”:
В моём случае путь выглядит вот так (D: — DVD c дистрибутивом Windows):
Теперь запускаем Setup.exe с дистрибутива Arcserve RHA и выбираем “Install Components”:
На следующем экране выбираем “Install Arcserve RHA Control Service”. (Особенность: на слова “Install Arcserve RHA …” кликнуть не получается, а на “… Control Service” – получается):
Потом прощёлкаем несколько экранов, пока не дойдём до конфигурации SSL. Для тестирования включать SSL не будем, а при рабочем применении можете добавить здесь ваш сертификат или использовать самоподписанный:
Будем запускать сервис от имени Local System:
Следующий экран касается возможности иметь две управляющих машины для повышения отказоустойчивости. Мы для целей тестирования ограничимся одной:
После завершения установки соединимся интернет-браузером с машиной Manager на порту 8088. Войти можно под пользователем, у которого есть права локального администратора на машине Manager:
Мы получим доступ к странице, на которой будет публиковаться статистика работы различных машин. Но для реального управления нам потребуется скачать с этого сайта и запустить windows-утилиту “Arcserve RHA Manager”. Её можно запускать уже не на сервере, а на рабочей станции (например, Windows 7 или 10). Для скачивания нажмём на ссылку “Scenario Management”:
После предупреждений безопасности должна запуститься программа “Arcserve RHA Manager”:
Эта программа и в дальнейшем будет запускаться только с веб-страницы.
2.2. Установка управляемых компонентов на Windows
На машины Master и Replica установим рабочие компоненты – Engine.
Можно установить их локально с дистрибутива, а можно – удалённо. Для удалённой установки на сервер требуется, чтобы у сервера была установлена роль “File Server”:
Если роль “File Server” установлена на машинах master и replica, то на машине Manager мы можем обратиться к “\\master\C$” и “\\replica\C$”.
Из утилиты Arcserve RHA Manager, о которой шла речь в предыдущем разделе, запустим удалённую установку через меню “Tools -> Launch Remote Installer”.
На следующем экране нажимаем кнопку “Start host discovery” (1) и получаем список машин из кэша Active Directory.
Выделяем машины master и replica и добавляем их в список кандидатов на установку Engine при помощи кнопки “Add” (3)
На следующем экране введём пользователя (администратора домена), под которым будет выполняться удалённая установка:
Далее убеждаемся, что оба сервера (master и replica) позволяют выполнить удалённую установку и помечены галочками:
На следующем экране введём пользователя, под которым будет запускаться служба Engine.
Для целей непрерывного резервного копирования достаточно пользователя с правами локального администратора (Local System). А вот если мы хотим использовать функционал High Availability, когда резервная машина сможет изображать из себя вышедшую из строя основную машину, то нам нужно запускать сервис под доменным администратором. Описанный ниже пример из раздела () требует именно таких полномочий:
Нажимаем всякие Next -> Install -> Yes и ждём завершения установки:
2.3. Установка управляемых компонентов на Linux
Установить компонент Engine на сервер можно, покопавшись в каталоге UNIX_Linux на дистрибутиве и найдя нужный агент в tar-архиве. В частности, для установки на CentOS 6.5 я использовал архив arcserverha_rhel6.tgz
Если на машине не установлены 32-битные библиотеки, нужно их поставить. Например, на CentOS 6.5 мне пришлось выполнить:
yum install glibc.i686 libstdc++.i686 pam.i686
(предварительно обновив их 64-битные версии: “yum install glibc libstdc++ pam” )
затем запускаем ./install.sh и соглашаемся со всеми подсказками.
В firewall открываем порт 25000 (TCP)
3. Эксперименты по восстановлению данных
3.1. Восстановление файлов на заданный момент времени
Создадим на машине Master каталог “C:\Ax-уехала-жена\” и положим туда файлы:
Таня.jpg
Лена.jpg
Джоконда.jpg
Создадим сценарий репликации этого каталога на машину Replica. В меню “Arcserve RHA Manager” выберем Scenario -> New
Первый экран мастера создания сценариев оставляем без изменений:
На втором экране также ничего не меняем – там должен быть выбран сценарий репликации файлов (File Server):
Выберем в качестве основной машины сервер Master, а в качестве резервной – Replica:
На следующем экране видим подтверждение того, что служба Engine установлена на обеих машинах. Если мы не установили её ранее, то можем сделать это удалённо отсюда.
На следующем экране выберем исходный каталог “C:\Ax-уехала-жена\” на машине Master:
На следующем экране нам предложат реплицировать этот каталог в каталог с таким же именем на машине Replica. Согласимся:
На следующем экране ничего не меняем:
А вот здесь нам нужно выставить параметр “Data Rewind” в “On”, чтобы иметь возможность восстанавливать данные на произвольный момент времени в прошлом:
Наконец, нам скажут, что сценарий не содержит ошибок:
Запустим сценарий, нажав кнопку “Run Now”:
На главном экране мы увидим, как работает сценарий. Заданный каталог быстро синхронизируется (станет одинаковым на основной и резервной машине), и теперь любое изменение в каталоге на машине Master приведёт к аналогичному изменению его копии на машине Replica.
Выполним три действия на машине Master:
1. Изменим файл Джоконда.jpg
2. Сотрём файл Таня.jpg
3. Добавим файл Маша.jpg
Убедимся, что на машине Replica с файлами произошло то же самое.
Теперь мы хотели бы вернуть Джоконде прежний облик. Для этого отмотаем время назад на машине Replica, воспользовавшись инструментом Data Recovery.
Сначала мы должны остановить сценарий (меню Tools -> Stop)
Затем щёлкнуть мышью на машине Replica и вызвать меню Tools -> Data Recovery:
Нажав в следующем окне кнопку “Select Recovery Point”, попадаем вот в такое окно, где нужно:
(1) Установить просмотр всех временных точек, на которые возможен откат по времени
(2) Нажать кнопку Apply
(3) Выделить самую первую точку, когда Джоконда ещё не была повреждена
(4) Нажать на кнопку “OK”
Затем нажимаем кнопку “Run”:
Проверяем, что произошло с файлами на машине Replica.
— Джоконда.jpg снова вернулась в начальное состояние
— Маша.jpg исчезла
— Лена.jpg появилась
Именно для того, чтобы не потерять Машу.jpg, мы не стали восстанавливать данные на обеих машинах. Теперь достаточно переписать файл “Джоконда.jpg” на машину Master, и мы снова получим в работу неиспорченный файл, не затрагивая все остальные.
3.2. Восстановление базы данных MS SQL на заданный момент времени
Предположим, что MS SQL установлен на машине Master. На машину Replica можно MS SQL не ставить, тогда она будет служить лишь хранилищем копии каталога DATA:
Сценарий репликации MS SQL похож на сценарий репликации файлов, но добавляются три вещи, которые облегчают нам жизнь:
1. Выбирается правильный метод начальной синхронизации – поблочный. Перед тем, как начать репликацию, система должна убедиться, что данные на двух машинах идентичны и синхронизировать то, что отличается.
Для сценария типа “File Server” по умолчанию применяется упрощённая начальная синхронизация, при которой файлы считаются идентичными, если их размер и время изменения совпадают. Такое допущение даёт хорошую экономию времени начальной синхронизации на файловых серверах, но совершенно неприемлемо для баз данных, поэтому сценарий для MS SQL сравнивает один за другим все блоки данных, из которых состоят файлы.
2. нам не придётся явно указывать, где находятся файлы базы данных, эта информация автоматически подтянется:
2. при восстановлении данных на основную машину (Master) сервисы MS SQL будут автоматически потушены и переведены в режим ручного запуска. После восстановления всё вернётся на место:
Предположим, что кто-то забыл написать “where” в команде “update”:
begin transaction;
update dbo.Table_1 set name='Сидоров';
commit;
(кто сам такое делал – поймёт глубину падения).
Так же, как и в предыдущем случае, останавливаем сценарий репликации, запускаем “Tools->Data Recovery”, но выбираем восстановление не только на резервную машину, но и на основную:
Остаётся только выбрать точку во времени, предшествующую моменту порчи данных, и провести восстановление:
3.3. Восстановление базы данных MySQL на Linux на заданный момент времени
На двух машинах co-master и co-replica установлены CentOS 6.5 и MySQL (в одинаковых каталогах).
Строго говоря, на резервной машине (co-replica) MySQL можно и не ставить, но мы попробуем зайти чуть дальше и подхватить реплицированные данные на резервном MySQL-сервере.
На машине co-master сервис MySQL запущен, на машине co-replica – выключен.
Создаём новый сценарий типа “Custom Application”.
В отличие от сценария “File Server” (п. 3.1) сценарий “Custom Application” по умолчанию имеет поблочную начальную синхронизацию. Ещё раз повторю: для сценария типа “File Server” по умолчанию применяется упрощённая начальная синхронизация, при которой файлы считаются идентичными, если их размер и время изменения совпадают. Такое допущение даёт хорошую экономию времени начальной синхронизации на файловых серверах, но совершенно неприемлемо для баз данных, поэтому для репликации MySQL сценарий типа “File Server” неприемлем.
На экране, где задаются каталоги для репликации, задаём каталог с данными MySQL (var/lib/mysql/ в моём случае). Только убедитесь, что нём нет socket-файла mysql.sock. Если есть, укажите ему другое место в файле конфигурации my.cnf.
Не забываем, как во всех предыдущих сценариях, разрешить откат на момент времени в прошлом при восстановлении:
На машине co-master посмотрим на таблицу Table_1:
mysql> select * from Table_1; +----+--------------+ | id | name | +----+--------------+ | 1 | Иванов | | 2 | Петров | +----+--------------+ 2 rows in set (0.01 sec)
И испортим её, сделав фамилию во всех записах одинаковой:
mysql> update Table_1 set name='Сидоров'; Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0
Теперь вернём всё назад, воспользовавшись функцией восстановления на заданный момент времени. Как и раньше, остановим сценарий репликации и восстановим данные на обеих машинах. Но прежде всего остановим сервис mysqld:
[root@co-master mysql]# service mysqld stop Stopping mysqld: [ OK ]
Выберем точку во времени, когда база ещё не была испорчена:
После этого запустим сервис MySQL на машине master и убедимся, что данные восстановлены.
А теперь – сюрприз! Запустим сервис MySQL на машине co-replica и получим работающую базу на резервной машине. Мы вплотную подошли к расширенной функциональности Arcserve RHA, когда вместо потерянной системы в работу вступает резервная система с актуальными данными.
Сегодня мы подняли резервный сервис MySQL вручную. Но продукт Arcserve RHA способен самостоятельно запустить резервную систему так, чтобы она выглядела, как вышедшая из строя. Например, запустить необходимые сервисы, сменить записи в DNS, IP-адрес, даже NetBIOS-имя машины. Это возможно сделать в сценариях типа “High Availfbility”, но это уже тема для отдельной статьи.
4. Заключение и реклама
В этой статье мы рассмотрели только основные возможности продукта Arcserve RHA, направленные на восстановление данных на заданный момент времени в прошлом. То есть, расшифровали только половину названия “Replication and High Availability”. В следующей статье вы увидите, как реализуется вторая часть названия – High Availability. Мы посмотрим, как вышедшая из строя машина (физическая или виртуальная) будет подменятся резервной машиной, содержащей актуальную копию данных.
[Реклама] В настоящее время, до конца сентября 2016 года, вы можете бесплатно получить продукт Arcserve RHA, приобретая продукт Arcserve UDP Premium Plus по цене Arcserve UDP Premium.
Подробнее можете узнать у партнеров компании Arcserve.
Комментарии (21)
larrabee
22.07.2016 13:49А как оно отслеживает изменения файлов? inotify в linux и его аналог в win? Как определяет дифф? Полностью сканирует файл?
MikhailMitroshin
22.07.2016 14:11-2В документации указано: filter driver для Windows и filtering file system для linux.
blueboar2
22.07.2016 15:47+2Что за filtering file system? Можно ссылку на описание того, что это такое?
MikhailMitroshin
22.07.2016 17:55Поторопился я. Имеется в виду загружаемый модуль ядра, который служит прослойкой при обращении к файловой системе.
Находится в RedHat и SUSE вот здесь:
/opt/CA/ARCserveRHA/kernel/fs/xofs.*
Подробнее см. http://documentation.arcserve.com/Arcserve-RHA/Available/R16-5/ENU/Bookshelf_Files/HTML/UL/Files_Installed_on_Red_Hat_and_Novell_SUSE_Linux_Enterprise.htmlcrazylh
22.07.2016 23:15А какое отношение модуль вашей файловой системы имеет к реальной ФС на которой лежат данные (ext3/4). Или оно работает только поверх вашей ФС?
MikhailMitroshin
22.07.2016 23:24Пообщался с разработчиками. Они говорят следующее:
После того, как на UNIX/Linux запускается сценарий репликации, мы монтируем файловую систему XOFS поверх существующей файловой системы. Команда ‘mount’ будет показывать 2 файловых системы: старую и новую (XOFS).
После монтирования XOFS поверх существующей файловой системы, пользователь сможет обращаться к файлам, просматривать каталоги… Однако, весь доступ происходит через XOFS. XOFS транслирует все вызовы в лежащую под ней файловую систему и возвращает результат тому, кто делал вызов.
Мы перехватываем всё, что касается создания, удаления, записи, mkdir, rmdir, change attr, mklink и т.д. Мы сбрасываем все эти события в журнал, вместе с данными, которые пишутся. Затем процесс в пользовательском режиме подхватывает этот журнал, переформатирует и пересылает на удлённую машину-реплику. Реплика получает, обрабатывает и повторяет действия из журнала.
Работа XOFS не зависит от того, какого типа файловая система находится под ней. XOFS просто транслирует вызовы и возвращает коды возврата. Но если появится новый тип файловой системы, для которой появятся новые системные вызовы, то XOFS также потребует доработки.
wispoz
22.07.2016 14:55А как такая система себя ведет в высоконагруженных серверах где высокий R/W?
MikhailMitroshin
22.07.2016 15:16Есть возможность оценить, с какой скоростью нужно будет передавать данные с одной системы на другую. Это так называемый «Assessment Mode» — реальная репликация не производится, но собирается статистика (например, в течение суток). Если вы видите, что скорости не запредельные, что их потянет и сеть, и система ввода-вывода, то можно запускать репликацию.
Но, конечно, всё хорошо в меру. Всегда найдётся какая-то система, которая может ввести в ступор. Приходит в голову игра «жизнь» на всех блоках данных диска…
amarao
22.07.2016 21:27-1Вы хотите сказать, что ваш продукт подразумевает созерцание такого количества диалоговых окон? А если у меня на сервере нет диалоговых окон, и я там был один раз за всё время его существования, а всё остальное время за ним приглядывает система управления конфигурациями, мониторинг и т.д.? Мне всё это надо вырезать под корень и начать смотреть на диалоговые окна? А как же pull request на новую автоматизацию, который я планировал внимательно почитать? Вместо этого надо идти и кликать «next, next, next»?
MikhailMitroshin
22.07.2016 22:08+1Вместе с продуктом поставляется оснастка для PowerShell. Многие вещи удобно выполнять из командной строки, например:
Set-Bookmark — установить закладку, на которую потом можно будет откатиться во времени
Suspend-Scenario / Resume-Scenario — приостановить/продолжить работу сценария (для выполнения сервисных работ, например)
Но я не сторонник радикальных мер. Что-то удобнее делать в командной строке, а что-то — в графическом интерфейсе. Поиск точки на временной оси, на которую нужно откатиться, мне однозначно удобнее делать в графическом интерфейсе.amarao
25.07.2016 18:47Мы на разных языках говорим. Я про индустриальное ПО, вы про уютные проблемы администраторов локалхоста.
MikhailMitroshin
25.07.2016 19:07+1Я сейчас одну вещь скажу, Вы только не обижайтесь. Мне кажется, что у Вас индустриальное означает брутальное. То есть если софт суровый, с командной строкой, то он индустриальный. А если с картинками — то игрушка.
Вот как по вашему, если у ленточной библиотеки есть веб-интерфейс с графикой — это уже несерьёзно?
А если у маршрутизатора надо писать «wr mem» то это индустриально, а если нажать на кнопку «Сохранить» на веб-интерфейсе, то это пошло?
Мне тоже нравится многое делать в командной строке. Но вот файл «sendmail.cf» считаю лично для себя неудобным. Предпочитаю заполнить формы какие-нибудь.
Короче говоря, каждый выбирает для себя, и всё хорошо в меру.amarao
26.07.2016 18:04+1Индустриальное ПО — это такое ПО, которое приспособлено для использования роботами. То есть для автоматизации. sendmail.cf в этом смысле очень плохо приспособленный, потому что весь из себя тьюринг-полный и трудно описываемый декларативным образом.
«Нажать кнопку в веб-интерфейсе» — не индустриальное ПО. Выполнить команду с предсказуемым структурированным выводом и кодом возврата — индустриальное ПО. Завернуть кривой вывод утилиты в expect с последующим парсингом невменяемого текста с псевдографикой" — не индустриальное ПО.
Так что мой вопрос звучал так: а какие у вас средства автоматизации?MikhailMitroshin
27.07.2016 06:45Хорошо, сдаюсь. Если у вас 50 серверов и вы хотите одним махом настроить на всех пятидесяти репликацию данных, то 50 раз «кликать «next, next, next»», а в конце понять, что один из параметров был задан неверно — очень непрактично и тоскливо.
К счастью, кроме обвязки для PowerShell, у нас есть ещё Web API, который позволяет выполнить такое. См., например:
arcserve RHA Control Service Web API Reference Index: https://arcserve.zendesk.com/hc/en-us/articles/202810715
arcserve RHA Control Service API User Guide: Lesson 1 Environment Setup/Requirements and Creating a Session: https://arcserve.zendesk.com/hc/en-us/articles/202041319
Кроме того есть возможность экспорта/импорта сценариев в/из XML-файлы. То есть можно этот файл генерировать в вашем средстве автоматизации, а потом закачивать в Arcserve RHA.
blueboar2
Чем оно лучше чем два сервера с каким DRBD + HA? Если надо на любой момент времени — + Bacula еще. Абсолютно бесплатно.
MikhailMitroshin
Навскидку: больше поддерживаемых платформ (windows, linux, aix, solaris) + возможность копировать отдельные файлы, а не тома целиком.
blueboar2
Эм. Ну, как я понимаю, мое решение работает как на Linux, так и на Aix и на Solaris. Единственное — оно не работает на Windows, но там если сильно надо можно поднять какой Owncloud или Seafile. Тоже бесплатно. Там и файлы можно копировать.
shvechkov
RHA replicates at File system level. This allows to replicate individual files and folders (not whole device as you would with DRBD) — over the WAN this translates into significant savings of time/traffic (also at block level you typically see more updates/writes so you would replicate more data with DRBD)
Besides that, RHA includes tones of useful features ( supports different replication modes, different restore options, different destinations, has applications intelligence, cross platform… List is long… ). Long story short — RHA is a Swiss army knife :)
blueboar2
Ну я и спрашиваю — чем оно тогда лучше какого Owncloud — он тоже реплицирует папки, и почти мгновенно?
MikhailMitroshin
Не вводите людей в заблуждение. Seafile и ownCloud – это программы той же категории, что и DropBox, OneDrive, Google Drive и т.д. То есть предназначены, главным образом, для периодической синхронизации данных на клиентской машине/телефоне с хранилищем на сервере.
Это накладывает отпечаток на их способ работы. В частности, ownCloud периодически сканирует локальные файлы, чтобы понять, кого их них нужно отправить на сервер.
А Seafile, хоть и использует inotify для мгновенного оповещения о том, что с файлами что-то произошло, должен потом этот файл просканировать и определить, что же это было. Кроме того, он вносит дополнительное звено – репозитарий (как у Git), который должен сначала обновиться локально, а уж потом синхронизироваться с серверным.
Сравните это с модулем ядра (linux) или filter-driver в Windows, используемые Arcserve RHA, которые СРАЗУ знают, какие данные в файле изменились, а не пересканируют его, чтобы понять, что же произошло.
И скажите, как могут Seafile или ownCloud при их подходе в реальном времени реплицировать один большой файл, в который постоянно вносятся изменения (базу Exchange или Oracle или SQL, как в примере 3.2 из статьи?