вторник, 3 июня 2014 г.

Плетём макраме с помощью rsnapshot.

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

Отличное средство в основе которой лежит замечательная идея, хардлинки и rsync поверх.

Общий взгляд


Для того что бы сделать очередной слепок бекапа, мы делаем с помощью  хардлинков копию предыдущего слепка, и затем делаем rsync с источкика поверх этой копии.

В результате неизмененные файлы ссылаются на одни и теже блоки на диске, и только измененные файлы будут занимать дополнительное место.

Для иллюстрации:
Есть файлопомойка с документами размером около 150 гигабайт.
Я храню слепки за "сегодня утром", 7 последних дней, каждое воскресенье последнего месяца, и начало прошлого месяца.
Довольно много.
Но часто, у пользователей возникает задача достань пожалуйста файл за прошлую неделю. И эта схема меня очень выручает.

Изменения за день в среднем занимают от 50 до 200 мегабайт.
Таким образом я храню всю эту огромную кучу слепков практически бесплатно.
Накладные расходы в пару гигабайт, мелочь в общем объеме, но спасает здорово.


Конечно, если ваши данные равномерно растут и редко изменяются, или требуются особые условия хранения, то rsnapshot вам вероятно не подойдет.

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

Завязка


Здесь же хотелось бы рассказать о интересной проблеме с rsnapshot, которую  недавно обнаружил.

Я вдруг заметил на графике, вместо плавного роста скачки:



Оказалось, что дважды, ночью, в момент создания слепка с master сервера, он был на обслуживании и раздел с документами был отмонтирован.

В итоге rsync очистил очередной слепок, сделал его пустым.
А при дальнейших бекапах файлы были перекачаны целиком.

Ситуацию эту прохлопали, так как мониторится общие свободное место на диске, а не «резкий» рост занятого.

На этот счет есть отличная статья тут: Alert Design

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

В итоге в слепках бекапов получилось самое настоящее макраме.
Три разных «ветки» файлов со своими хардлинками.
Так как бекапы «разреженные», т.е. за предыдущую неделю хранятся не все слепки а только некоторые, и чем дальше в «прошлое» тем их меньше, исходником для хардлинков служили разные ветки.
И в итоге это все сложилось в забавный узор.

rsnapshot du показывает что есть три слепка которые занимают полный объем, но даже их удаление мало что дает потому что они связаны с другими.

Удаляя их мы просто удаляем ссылки на блоки, и они  «приписываются» к другим файлам-ссылкам.

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

Забавный момент, конечно руками побороли, но очень нудным путем.
Клонировал все хранилище на резервный сервер, и там с помощью удалений раскрутил все ветки.
Например удаляешь слепокА, и слепокБ вдруг вырастает в объеме — значит они ссылаются на одну ветку.

Процесс починки очень и очень неприятный.
Но тем лучше, чем противнее проблема — тем лучше запоминаешь выводы.

Выводы


Основные выводы, как можно было это избежать:

При обслуживании master сервера, нужно было гасить службы которые могут обслуживать каких либо сетевых клиентов.
Хотя в этот раз это был ssh, и он нужен для других нужд, тем не менее придумать что либо нужно.
Например: запретить вход по ипам с машин делающих бекапы.
В этом случае rsync бы просто отвалился, и не перезатер данные слепка.
Плюс мы получили бы уведомление с мониторинга быстрее, и приняли меры.

Вторая интересная задача, не следует мониторить просто процент занятого места в хранилище, это важно, но  этого мало.

Нужно придумать мониторинг который бы учитывал способ использования этого хранилища.
В этом случае, требовалось сигнализировать в случае резкого изменения занятого места, так как предполагается что бекапы растут плавно.
Как реализую, обязательно поделюсь.