Зеркальное отображение базы данных / Потоковая репликация Postgres

Я не администратор базы данных; Я являюсь основным разработчиком приложения на базе корпоративной базы данных.

В настоящее время я выбираю несколько новых машин для обновления нашей существующей корпоративной базы данных. В настоящее время мы используем Postgres 8.4 с базой данных на нашем сайте аварийного восстановления, которая получает обновления через определенные промежутки времени через некоторую пользовательскую работу rsync, выполненную бывшим сотрудником.

Одной из основных проблем, которую мы пытаемся решить, является задержка между двумя глобальными офисами. У нас есть сотрудники в Нью-Йорке и сотрудники в Лондоне. В настоящее время лондонских сотрудников постигла участь нашей трубы VPN. Я действительно не в состоянии изменить эту инфраструктуру.

Что я хотел бы сделать, так это перейти на Postgres 9 и настроить потоковую репликацию. Подчиненное устройство будет находиться в лондонском офисе, что упростит проблемы чтения для пользователей. Проблема, которую я предвижу, заключается в записи на ведомое устройство (не уверен, как PG справляется с этим, насколько я понимаю, ведомое устройство находится в режиме только для чтения). В идеале записи должны быть отправлены мастеру в Нью-Йорке (записи из Лондона очень редки, но необходимы) самой базой данных. Кроме того, я могу настроить отказоустойчивость, чтобы он действовал как резервная копия с возможностью горячей замены (заменяя DR). Опять же, все содержится в конфигурации Postgres без дополнительного кода.

Это мое идеализированное решение. Как далеко я? Это вообще возможно?

Я немного ошеломлен широтой этой темы, и Google мне не особо помогает. Я был бы признателен за любые советы от некоторых опытных администраторов баз данных с анекдотами, соответствующей документацией или примерами.

В настоящее время мы используем SQLAlchemy в качестве основного интерфейса к базе данных, если это уместно. Это означает, что мы не привязаны к Postgres.

Всем спасибо.


person TrevorB    schedule 01.06.2011    source источник
comment
Если кто-то доберется до этого: Postgres в конце концов добавил репликацию Master/Master, что мы и использовали. До этого я использовал некоторый пользовательский код с отметками времени в ключевых таблицах для создания дельта-наборов и обновления БД. Каждую ночь (часы Азии) базы данных полностью синхронизировались с использованием предыдущей методологии rsync. Предложение pgpool, хотя и хорошее, страдало задержкой по обе стороны пруда. Возможно, я неправильно настроил его, но это не было идеальным решением.   -  person TrevorB    schedule 14.12.2016


Ответы (2)


pgpool-II может справиться с этим для вашего: введите здесь описание изображения

Проверьте этот пример.

person Frank Heikens    schedule 01.06.2011
comment
Прохладный. И это тоже в pkgsrc. Я попробую это. Большое спасибо. - person TrevorB; 02.06.2011
comment
Однако обратите внимание на 1 предостережение: если вы выполняете какие-либо записи через функции, то это решение не будет работать, потому что PgPool будет отправлять операции чтения только на 1 хост и функции выполняются с оператором select, что означает, что функция, выполняющая какие-либо записи, не будет синхронизирована со всеми хостами. - person StartupGuy; 08.11.2013

Документация PostgreSQL 9 дает хороший обзор доступных опций.

http://www.postgresql.org/docs/9.0/static/other-replication-solutions.html

Возможно, вы захотите взглянуть на Slony, если не возражаете против того, чтобы писать на главный, а не на подчиненный, или, если хотите, проверить любую из доступных технологий репликации с несколькими мастерами.

person Imraan    schedule 01.06.2011