воскресенье, 1 мая 2011 г.

Снапшуты zfs и бекап баз

В одной и предыдущих заметок я рассказывал о резервном копировании баз postgresql, но тот метод основан на применении pgdump и не всегда подходит. У него есть минимум два недостатка:
  • Большая длительность операций, особенно для крупных баз. Это касается как сохранения, так и восстановления.
  • Снятие дампа - это достаточно дорогая с точки зрения ввода-вывода операция и может негативно отразиться на состоянии сервера, если снимать дамп с боевой машины.


В качестве обоих проблем можно предложить использования снаптутов zfs. Этот метод позволяет почти мгновенно выполнять, как резервное копирование, так и восстановление практически вне зависимости от объемов данных.
Для упрощения управления снапшутами можно использовать утилиту zfSnap:
# make install clean -C /usr/ports/sysutils/zfsnap
У меня данные находятся в /var/db/pgsql/data. Прописываю в крон следующие строки:

@daily    /usr/local/sbin/zfSnap -d
@hourly    /usr/local/sbin/zfSnap -a 7d zroot/var/db/pgsql/data

Первая команда удаляет раз в день устаревшие снапшуты, а вторая ежечасно создает новые с периодом жизни 7 дней.
Восстановление:
Выбираем нужный снапшут из доступных:
zfs list -t all
Останавливаем базу
/usr/local/etc/rc.d/postgresql stop
Далее выполняем rollback
zfs rollback zroot/var/db/pgsql/data@2011-05-01_17.00.01--7d
И заново запускаем базу:
/usr/local/etc/rc.d/postgresql start

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

Отправить комментарий