Хитрая репликация, возможно ли?

Для одного проекта потребовалась довольно специфичная конфигурация из нескольких серверов БД. Суть в следующем. Есть один центральный узел и N региональных узлов. Связи между региональными узлами нет, но все региональные узлы связаны с центральным. Нужно поддерживать все базы в синхронном состоянии. Т.е. при изменении таблицы на одном из региональных узлов эти изменения должны отразиться на центральном узле и на всех остальных региональных (через центр). Аналогично, при изменении данных на центральном сервере они должны быть перенесены на региональные.

Можно ли организовать подобное с PostgreSQL? Если да, то в каком направлении смотреть, буду признателен за ссылки на документацю.

И второй вопрос, отчасти связанный с первым. Можно ли процесс синхронизации пустить «в обход», чтобы пакеты изменений шли не напрямую от центра к региону, а через один или несколько промежуточных узлов-маршрутизаторов. Что-то вроде форвардинга пакетов.

Опции просмотра комментариев

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

Ответ на второй вопрос сперва

Ответ на второй вопрос сперва - главное, чтобы сервервы видели друг друга по TCP/IP.

Ответ на первый вопрос не столь очевиден. У меня встречный вопрос - а что мешает региональным серверам общаться друг с другом через канал центрального? Раз региональные серверы оба видят центральный, то дело лишь за правильной маршрутизацией пакетов. Настройте и будет вам счастье и мультимастер-репликация, т.е. каждый сервер будет одновременно и мастер и слейв.

Спасибо за ответ! По поводу

Спасибо за ответ!

По поводу топологии. По идее ничего не мешает региональным базам общаться друг с другом через центр, но региональных серверов достаточно много (около 40), и как понимаю, в этом случае число сетевых запросов, проходящих через центр будет очень большим. Т.е. от каждого региона надо послать данные в центр и остальные N-1 регионов.

А не посоветует софт для организации мультимастр-репликации? Пока присматриваемся к Bucardo, но может упустили какие-то ещё варианты.

Кстати, возник ещё такой

Кстати, возник ещё такой вопрос. А не возникнет ли зацикливания когда от одного региона приходят изменения в центр, а центр эти изменения рассылает во все регионы, в том числе и тот, который их и прислал?

Если репликация настроена

Если репликация настроена грамотно никаких зацикливаний не наступает

Собственно всё написано в

Собственно всё написано в мануале:
http://postgresql.ru.net/manual/different-replication-solutions.html

Могу лишь высказать своё мнение. В вашем случае я бы рассмотрел такой вариант.
Приложение в регионе не работает напрямую ни с каким PostgreSQL-сервером. Вместо этого оно работает с промежуточным сервером, который запросы измеряющие данные - отправляет в центр, а запросы читающие данные отправляет на обработку региональному серверу. При этом настроена удалённая репликация типа master-hot standby или master-slave, где master - центральный сервер, а slave-серверы региональные. Подавляющее большинство запросов как правило касается чтения данных, поэтому такая архитектура кажется мне наиболее подходящей.

Опции просмотра комментариев

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

Back to top

(С) Виктор Вислобоков, 2008-2023