понедельник, 4 апреля 2011 г.

весть о lvm и snapshots

Часто делая бэкап я ловил себя на мысли: "Статику бэкапить одно удовольствие, а динамику - долго и беда". Ну правда, статический контент он по определению не очень меняется. А вот динамический стремится в любую секунду меняться по десятку, а то и сотне раз. И беда в том, что это как правило БД или почтовые ящики пользаков. И останавливать сервис на долго нельзя. Ну т.е. если на 3-4 минуты, нас с тобой никто не убьет (ну в общем всё зависит от того, чем занимаемся, на фондовой бирже так делать не стоит), а вот если на час или два ... в общем без комментариев.

Статику мы можем копировать, а вот с динамикой ... останови БД, скопируй, запусти. Вот как раз процесс копирования может быть очень долог. Что делать?


Вот тут на помощь нам может прийти такая технология как snapshot. Она позволяет делать моментальный снимок раздела. Если вкратце, то суть такая:

Создается доп. раздел на какой-то объем, замораживается основной раздел, он становится доступным только для чтения, все изменения пишутся на доп. раздел. Пространство надо выделять исходя из количества изменений. Обычно 500-600 МБ достаточно. Когда мы сделали всю черную работу, то основной и доп. раздел сливаются воедино, а могут и не сливаться.

Операция происходит крайне быстро. Т.е. что мы можем сделать.
1. Остановить БД
2. Создать lvm snapshot
3. Возобновить БД
4. Скопировать раздел

А в обычном виде 3 и 4 поменялись бы местами, а 2-го пункта не было.
Т.е. мы упростим работу с самой долгой операцией.

Как останавливать БД или почту, или что там у тебя, может помесь какая дикая типа lotus domino, я описывать не стану.
Создать lvm snapshot просто:
~# lvcreate -L500M -s -n snap01 /dev/sas-vol/databases

Вот, теперь появится /dev/sas-vol/snap01 и можно с ним работать.
Т.е. примонтировать его, скопировать и пр. пр. пр.

Только стоит помнить несколько вещей.
При работе с xfs, перед тем как создавать снапшот, необходимо заморозить том.
xfs_freeze -f
а после создания снапшота надо разморозить
xfs_freeze -u

И монтировать для xfs снапшот надо с флагом nouuid.

И самый большой минус. Это так сказать оверхед снапшота. Скорость записи на основной раздел(в моем примере это /dev/sas-vol/databases) падает в 5-10 раз. Это надо помнить, что бы не было грустно.

Так же у lvm snapshot есть ещё один важный вариант использования.
Это создание эталонной виртуальной машины, и последующее создание виртуалок.
И это существенно помогает, если виртуальных машин много. И как раз тут скорость записи на эталонный том виртуальной машины для нас роли не имеет.

P.S.: внимательный читатель мне тут может сказать, что падение производительность на запись в 5-10 раз это очень критично, особенно для БД. На что я отвечу: "используй репликацию". И со slave машины можно очень удачно всё содрать. Тем более, что при асинхронной реплике задержка в 10-20 секунд, это не конец света.

Комментариев нет: