Задать вопрос
@pashtet51

Почему в PostgreSQL происходит задержка записи с мастера на слэйв?

Доброго времени суток!

На данный момент вожусь с потоковой репликацией и по ходу дела возникает куча непоняток.

Поставил цель сделать связку ведущий-ведомый сервер. Но не просто с потоковой репликацией, а с некоторой задержкой. То есть, на слэйве данные должны появляться, допустим, через 30 мин после записи на мастере. Связано это с тем, что если юзер накосячит в основной базе можно было накатить бэкап на состояние "было 30 мин назад", так как изменения в БД происходят достаточно часто, а накатывать суточный бэкап будет очень болезненно, так как потеряется куча данных.

Исходя из поставленной задачи начал ковырять в сторону WRITE AHEAD LOG. Наковырялся до такой степени, что в конец запутался.
Что имеется на данный момент. Привожу отдельные строки конфига postgresql.conf

1. На мастере:
wal_level = hot_standby
#checkpoint_segments = 16
checkpoint_timeout = 30min
archive_mode = on
archive_command = 'copy %p "path_to_wal\\%f"'
archive_timeout = 3600

max_wal_senders = 2
wal_keep_segments = 32


2. На слэйве:
postgresql.conf
wal_level = hot_standby
checkpoint_timeout = 30min

max_wal_senders = 2
hot_standby = on

recovery.conf
standby_mode = on
primary_conninfo = 'host port user'
trigger_file = '%\\PostgreSQL\\9.1\\failover'
restore_command = 'copy "\\X: %f" %p'
archive_cleanup_command = '"%\\PostgreSQL\\9.1\\bin\\pg_archivecleanup" %r'

Остальные строки в разделе WAL и Replication закомментированы.

Возможно ли сделать задержку? Если да, то как?
  • Вопрос задан
  • 2864 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Ну можете тупо в лоб. Замените archive_command = 'copy %p "path_to_wal\\%f"' на archive_command = 'copy %p "path_to_temp_wal\\%f"'

Потом сделайте скрипт в планировщике который будет раз в пол часа переносить архивлоги из path_to_temp_wal в path_to_wal.
Ответ написан
@Pilat
Есть barman - менеджер архивных логов. Он делает как раз то что Вам нужно, с некоторой задержкой, и позволяет простыми средствами получить базу на любую дату.
Ответ написан
smagen
@smagen
Руководитель разработки Postgres Professional
В 9.4 будет поддерживаться, закомичено в master ветку
git.postgresql.org/gitweb/?p=postgresql.git;a=comm...
А задачу
Связано это с тем, что если юзер накосячит в основной базе можно было накатить бэкап на состояние "было 30 мин назад", так как изменения в БД происходят достаточно часто, а накатывать суточный бэкап будет очень болезненно, так как потеряется куча данных.

сейчас обычно решают с помощью PITR.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы