База данных Postgresql совместно используется в нескольких географических точках - PullRequest
1 голос
/ 30 сентября 2011

Я работаю над проектом, в котором база данных Postgresql должна быть общей для нескольких физических мест.Каждое местоположение имеет ограниченную возможность соединения и может иметь доступ к внешнему миру только один или два раза в день.Таким образом, база данных должна быть доступна локально в каждом месте, но также должна синхронизироваться с основной базой данных, когда это возможно.

Я еще не знаком с репликацией или кластеризацией.Это хорошие решения?Или есть лучший способ сделать это?Буду признателен за некоторые советы по этому вопросу.:)

ПРИМЕЧАНИЕ: столкновение первичных ключей из разных мест не будет проблемой, об этом позаботились.

1 Ответ

3 голосов
/ 23 марта 2012

Если для удаленных расположений требуется доступ только для чтения к данным, вы можете довольно легко настроить асинхронную репликацию, используя доставка журналов , которая является встроенной функцией PostgreSQL. В этой конфигурации главный сервер сбрасывает файлы WAL (журнал записи с опережением) в общую папку, где удаленные серверы могут периодически подключаться и читать журналы, чтобы обновляться.

Если все серверы выполняют запись независимо, то вам нужно асинхронная репликация с несколькими хозяевами . Документы Postgres упоминают Bucardo и rubyrep в качестве вариантов для достижения этой цели. Согласно документам, оба ограничены репликацией мастер-мастер (или мастером на несколько ведомых), но у Bucardo предположительно есть истинная репликация с несколькими хозяевами, запланированная для версии 5.0, и rubyrep упоминает метод для хранения синхронизировано несколько серверов.

(у меня есть серверы, использующие функции доставки журналов и потоковой репликации PostgreSQL, но я не имею прямого опыта работы с Bucardo или rubyrep.)

...