Организация репликации для Postgres
Нужно следующее: есть два сервера с базами Postgres, которые между собой синхронизируются, то есть обе базы в любой момент содержат между собой одну и ту же информацию, но запросы на выборку идут к одному серверу, если он выходит из строя то на другой.
Нужны 2 вещи:
1. репликация для постгреса
2. автоматическая машрутизация между двумя серверами
Может у кого-то возникала такая задача?
>1. репликация для постгреса
У нас сделано так:
- На ведущем сервере (или где-нибудь в сети) крутится демон (серверная программа). Он может соединиться с БД, опросить специальную таблицу, в которой сохраняются логи изменений реплицируемых таблиц, выбрать данные и передать их клиенту.
- На ведомой машине есть клиент, который, например, по крону соединяется с сервером и требует передать ему текущие изменения. По получении обновляет таблицы ведомой БД.
- В БД на ведущем сервере таблицах, которые нужно реплицировать, есть триггеры, которые при модификации таблиц (insert,update, delete) помещают в специальную таблицу запись с id модифицированной записи, наименованием таблицы, типом изменения, датой и т.д.
Вот, собственно, и все.Чтобы обеспечить целостность ведомой БД, процедура репликации выполняется в транзакции (2-фазной). У меня есть схемы организации такой транзакции в MS Visio. Но главная сложность - в серверном демоне и клиентской программе. Здесь я использую свою собственную библиотеку (объектный интерфейс удаленных вызовов) на основе сокетов с установлением соединения. Выложить ее для общего использования еще не готов :) Думаю, здесь можно использовать что-то еще, например, RPC, какой-нибудь ORB (TAO, ACE).
>Организация репликации для PostgresПервая ссылка при поиске по ключам "postgresql replication":
http://www.opennet.me/base/dev/sql_relication.txt.html