Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

Асинхронная репликация 3х баз postgress с помощью bucardo

Есть три базы на трёх хостах.(host1, host2 - debian, main - centos, postgress 9.4) Настроена репликация с помощью букардо тремя синками.
т.е. есть три базы
main host1 host2
и синки
main:source host1:source main:source host2:source
Сделано разными, т.к. если все объединить в одну, то при недоступности host1 или host2 отваливается вся цепочка синхронизации. (Это если настраивать как в примерах, одна группа main host1 host2 и один синк)
Есть следующая проблема - при изменении (не синхронизацией) main - host1 и host2 получают необходимые изменения, но при изменении только в host1 изменения получает только main, в host2 оно не идёт.
Вопрос - как решить проблему? Возможно подойдёт другое решение, общая проблема в том чтобы эти три базы реплицировались не зависимо, т.е. чтобы если один из хостов отваливается остальные не переставали синхронизироваться


Ответ

В итоге, для того чтобы независимо синхронизировать N узлов, необходимо создать парные звенья между всеми участниками (звезда, если не ошибаюсь то будет N*(N-1)/2 синков). Т.е. например для 4тырёх баз надо сделать следующие группы и синки:
dbgoups(и синки на них):
g_1_2 (db_1:source db_2:source) g_1_3 (db_1:source db_3:source) g_1_4 (db_1:source db_4:source) g_2_3 (db_2:source db_3:source) g_2_4 (db_2:source db_4:source) g_3_4 (db_3:source db_4:source)
Правда остаются ещё глюки букардо, по восстановлению при пропажи связи кусков звеньев, но это можно решать костылями в виде проверки статуса кроном и перезапуском синков (bucardo activate/deactivate, причём, ещё заметил, чтобы выйти из статуса Stalled надо сначала сделать deactivate, дождаться Inactive, и потом сделать activate. При этом, если база не доступна, то он будет висеть на этом процессе и не активировать другие, пока статус самой базы не поставить в inactive. Т.е. по факту, прежде чем выводить из статуса Stalled, надо убедиться что база действительно доступна)
К сожалению их решить можно только крон скриптом который будет смотреть статус и пытаться их активировать заново. Текущая версия букардо имеет ряд ошибок которые это делают неправильно, как признаётся сам разработчик

Комментариев нет:

Отправить комментарий