Мы запускаем много виртуальных машин Linux в среде vmware / shared storage, каждая из которых работает со своим собственным экземпляром postgreSQL (смесь 9.0 и 9.3). В настоящее время вся виртуальная машина находится в одном корневом разделе / томе, и мы добились большого успеха (~ 8 лет), используя снимки на основе хранилища базовых томов VMFS для процесса резервного копирования / восстановления (и репликации на наш сайт DR).
Из-за архитектуры нашего хранилища было бы выгодно разделять файлы WAL postgres на некэшируемый том, в основном для записи, чтобы уменьшить отток кэша на стороне хранилища. С нашим хранилищем (Nimble Storage) мы можем назначить оба тома одной группе защиты / моментального снимка, но я не смог выяснить у нашего поставщика, что моментальные снимки будут происходить ровно в одно и то же время на всех томах в группе защиты - вероятно, так и будет, но всегда есть вероятность того, что его миллисекунды разделены.
С этой целью мы провели несколько экспериментов, все во время записи данных в БД как можно быстрее, используя pg_bench. После экспериментов мы восстановили тома с моментальными снимками и запустили VM + postgres.
- Снимок данных и томов журналов, близких к одновременно, - результат: БД восстановлена
- Сначала объем данных снимка, объем журнала ~ 1 минута спустя - результат: восстановлена БД
- Сначала том журнала снимков, объем данных ~ 1 минута спустя - результат: восстановлена БД
- Сначала том журнала снимков, объем данных ~ 3 минуты спустя, после того, как контрольная точка WAL записала новые данные в файлы данных: результат: БД восстановлена
Таким образом, похоже, что тестирование говорит нам о том, что оба снимка согласованы на уровне тома и относительно близко друг к другу, и вы получите согласованную копию БД, основанную на времени снимка тома WAL / Log.
Мой вопрос: это безопасно? Какие основные случаи мы пропускаем в нашем тестировании, и что может пойти не так?
Документ Postgres указывает, что это небезопасно, но тестирование показывает, что оно довольно надежное: http://www.postgresql.org/docs/9.1/static/backup-file.html.
Если ваша база данных распределена по нескольким файловым системам, не может быть никакого способа получить точно одновременные замороженные снимки всех томов. Например, если ваши файлы данных и журнал WAL находятся на разных дисках, или если табличные пространства находятся в разных файловых системах, может быть невозможно использовать резервное копирование моментального снимка, поскольку моментальные снимки должны быть одновременными. Внимательно прочитайте документацию по файловой системе, прежде чем доверять методике непротиворечивых снимков в таких ситуациях.
ПРИМЕЧАНИЕ. Да, мы знаем о других параметрах, обеспечивающих их согласованность, таких как перевод PostgreSQL в режим «горячего» резервирования или использование интеграции VMware в нашем хранилище для успокоения самих ВМ, но мы ищем решение только для хранилища для скорости, удобства, и нулевое влияние на наших клиентов.