Наша установленная репликация не работает («запрошенный сегмент WAL уже удален» во время простоя) Мы не можем легко снова остановить мастер.
Можем мы сделать
pg_start_backup()
,rsync ${PGDATA}/
хозяин рабу,pg_stop_backup()
... в то время как мастер postgresql все еще находится под полной нагрузкой? (Или pg_start_backup()
приведет к
- настольные замки,
- Блоки ввода / вывода,
- несогласованности,
- Пожарная тревога,
- медленный ответ дБ
Другими словами, pg_start_backup()
повлияет ли наше приложение?
postgresql
replication
Даниил
источник
источник
Ответы:
pg_start_backup
будет выполнять контрольно-пропускной пункт, как отмечает Дезсо. Это оказывает влияние, но ваша база данных в любом случае выполняет контрольные точки довольно регулярно, и должна работать так, чтобы они явно не были для вас проблемой. Ранняя контрольная точка означает, что было накоплено меньше данных, а это означает, что контрольная точка, с которой она работает,pg_start_backup
будет иметь меньшее воздействие, чем обычно.Где вам нужно беспокоиться, это rsync или эквивалентный
pg_basebackup
шаг. Чтение ввода-вывода из этого не будет слишком плохим, поскольку оно последовательное, но оно все же, вероятно, значительно ухудшит производительность ввода-вывода вашей базы данных, а также будет стремиться вытеснить горячие данные из кеш-памяти в пользу меньшего количества -используемые данные, что приводит к перебоям в кеше, поскольку более необходимые данные затем считываются обратно.Вы можете использовать
nice
и,ionice
чтобы помочь ограничить влияние ввода-вывода (но не влияние кэша); Тем не менее, есть цена для этого. Резервное копирование займет больше времени, и до тех пор, пока вы не завершите резервное копирование и не запуститеpg_stop_backup
свою систему - как я понимаю, - накапливается WAL, который она не может удалить, накапливает задолженность контрольных точек для БОЛЬШОЙ контрольной точки в конце выполнения резервного копирования и накапливает таблицу и индекс раздувать, потому что он не может очистить мертвые ряды. Таким образом, вы действительно не можете позволить себе резервное копирование навсегда, особенно если у вас очень высокие показатели оттока.В конце концов, трудно сказать, можете ли вы безопасно использовать
pg_start_backup
иpg_stop_backup
горячее резервное копирование в вашей среде. Большинство людей могут, но если вы близки к тому, что может сделать ваше оборудование, у вас жесткие требования к срокам, вы не можете позволить себе риск остановки, и у вас очень высокие таблицы оттока, а также очень большие таблицы, это может быть проблематично. ,К сожалению, вам в значительной степени нужно проверить это и посмотреть.
Если вы можете, то, возможно, стоило бы выпустить
CHECKPOINT
атомный снимок тома, на котором находится ваша база данных, вместо этого, используя LVM, инструменты вашей SAN, EBS или что-то еще. Если вы можете сделать это, вы можете скопировать снимок на досуге. Этот подход не подходит для создания базовой резервной копии для PITR / горячего резервирования / горячего резервирования, но он идеально подходит для статической резервной копии и оказывает гораздо меньшее влияние на систему. Вы можете сделать это только в том случае, если ваши снимки являются атомарными, а вся база данных, включая WAL, находится на одном томе.Одна возможность, которую я еще не исследовал, - это объединение двух подходов. Мне приходит в голову, что кто-то может ( непроверенный и, возможно, неправильный и небезопасный , я еще не знаю):
pg_start_backup
pg_stop_backup
pg_stop_backup
По сути, идея состоит в том, чтобы сократить длительность задержки БД на своих контрольных точках, используя момент времени для каждого тома, который вы можете скопировать на досуге.
источник
Это могила, но я должен кое-что исправить здесь.
Предыдущий ответ гласит:
Это не правда. Система сохранит количество WAL, указанное в вашей конфигурации (см. Онлайн-документацию ). Таким образом, в основном, чем выше значение между:
Давайте представим этот случай:
затем после запуска pg_start_backup () ваши файлы WAL будут вращаться во время резервного копирования. Когда резервное копирование будет завершено, вы попытаетесь восстановить его на другом ядре базы данных. Движок при запуске будет запрашивать как минимум файл WAL, сгенерированный при запуске pg_start_backup ().
База данных не примет загрузку, пока вы не предоставите файл WAL «0000000x0000000B000000D0» (где x - ваш TimelineID ). Этот файл WAL является минимальным для загрузки системы. Конечно, только с этим файлом вы потеряете данные, так как остальные данные находятся в файлах WAL, которых у вас нет, но, по крайней мере, у вас будет работающее ядро базы данных.
Таким образом, либо вы должны выполнить архивирование WAL, либо вы должны сохранить необходимые файлы WAL самостоятельно, но Postgresql не сделает это за вас.
источник
pg_basebackup --xlog-method=stream
хотя, если я не ошибаюсь.max_wal_senders
установить минимум на 2. Это хороший способ избежать проблемы «отсутствующего WAL» в конце резервного копирования.Что касается моего опыта работы с PostgreSQL, то это относительно безопасная операция, если вы не оказываете существенного влияния на производительность в этот момент. Если он у вас есть, то лучше временно приостановить запись от всех ваших клиентов.
У меня был только один критический случай при синхронизации моего мастера с ведомым устройством под нагрузкой, и это было вызвано OOM killer (да, вам действительно следует ПОЛНОСТЬЮ отключить OOM Killer на узлах базы данных, я не знал этого в тот день).
Поэтому я восстановил базу данных из ночной резервной копии и передал postgres все сегменты WAL из каталога pg_archive для воспроизведения (просто скопировал их в папку pg_xlog). Все прошло нормально, но простои были неизбежны, конечно.
источник