Как сделать бекап OpenVZ контейнера без даунтаймов
OVZ - это просто грамотный chroot.
Виртуальные сервера — это очень удобно. Можно разделять проект на задачи и для каждой выделять VPS, и по мере роста проекта разносить эти виртуалки по разным физическим серверам.
Но удобство этим еще не заканчивается. В OpenVZ меня очень привлекает возможность создания полного бекапа без даунтаймов. Так как не все знают о такой возможности, я хочу описать ее более детально.
Прежде всего нам потребуется удаленный хост с поддержкой ssh протокола и наличием rsync. Сам бекап состоит из трех этапов:
- Первоначальная копия всех файлов (можно запускать только для первого бекапа)
- Копия дельты измененных файлов от первоначальной копии до текущего состояния контейнера
- Финальная копия остатка измененных файлов с заморозкой контейнера
Допустим нам нужно сделать копию контейнера 110 на сервер с именем host от пользователя user.
Первоначальный этап выполняется командой:
RSYNC_RSH="ssh Compression=no" rsync -aHz \ --numeric-ids --bwlimit=1024 /vz/private/110 user@host:/backup/110
Рассмотрим опции более детально.
- -o Compression=no — Отключаем сжатие средством ssh
- -a — Сохранение прав доступа к файлам
- -z — Использовать сжатие средством rync
- --numeric-ids — Сохранять информацию о владельцах и группах в числовом формате
- --bwlimit=1024 — Использовать 1Mb пропускной способности канала
Итак, первая часть бекапа проходит медленно и незаметно для работы VPS. Вторую часть следует выполнить в точности как и первую, добавив только опцию --delete, для удаления ненужных файлов и отключив лимитирование канала:
RSYNC_RSH="ssh Compression=no" rsync -aHz --delete \ --numeric-ids /vz/private/110 user@host:/backup/110
Вторая часть бекапа пройдет быстрее, а пользователи VPS почувствуют только небольшие сетевые тормоза на короткое время.
А вот для третьего этапа мы сначала заморозим контейнер, потом быстро скинем изменившиеся файлы и вернем контейнер обратно в рабочее состояние.
vzctl chkpnt 110 --suspend
RSYNC_RSH="ssh Compression=no" rsync -aHz --delete \ --numeric-ids /vz/private/110 user@host:/backup/110
vzctl chkpnt 110 --resume
Для пользователей VPS это будет выглядеть как небольшая задержка в сети на несколько десятков секунд, после чего работа будет продолжена, в том числе с сохранением всех сессий.
vzctl chkpnt VEID --suspend


(4 голосов, средний: 3.50 из 5)

Октябрь 12th, 2009 at 18:15
Есть еще vzdump, он умеет делать бэкап с использованием LVM, тогда задержек никаких нет.
Октябрь 14th, 2009 at 9:02
[...] This post was mentioned on Twitter by mudlo, Fun With Linux. Fun With Linux said: Как сделать бекап OpenVZ контейнера без даунтаймов · Повелитель серверов / [...]