Данные последовательности и логическая репликация

Насколько я понимаю, логическая репликация в Postgres не реплицирует данные последовательности. Предположим, у нас есть два сервера postgres с несколькими мастерами.

server1
test_table
current sequence 100

server2
test_table
current sequence 90

Если server1 выйдет из строя и server2 возьмет на себя запись, что произойдет, когда он попытается вставить строку с последовательностью 90? Поскольку server1 уже вставил строку с идентификатором 90. Какие есть обходные пути для этого?


person Arya    schedule 02.05.2019    source источник


Ответы (1)


настройте две последовательности так, чтобы они не конфликтовали.

например, используйте INCREMENT BY 2 в обеих последовательностях и пусть сервер 1 дает нечетные числа, а сервер 2 дает четные числа.

person Jasen    schedule 02.05.2019
comment
спасибо, это хороший вариант. Знаете ли вы, возможно ли синхронизацию с несколькими мастерами с помощью физической репликации? или мой единственный выбор - логическая репликация, если я хочу синхронную работу с несколькими мастерами? - person Arya; 02.05.2019
comment
Physical - это только главный-подчиненный, потому что он сохраняет порядок операций. логический может быть мульти-мастером. - person Jasen; 02.05.2019
comment
Что, если мы планируем иметь кластер из 5 серверов? что вы думаете об использовании UUID вместо последовательности? - person Arya; 02.05.2019
comment
У вас не может быть репликации с несколькими мастерами с логической репликацией PostgreSQL (пока). На самом деле, как правило, лучше всего этого избежать, поскольку последующие конфликты репликации нарушат работу любого приложения, которое специально для этого не предназначено. - person Laurenz Albe; 02.05.2019
comment
@LaurenzAlbe, вы правы, у меня сложилось впечатление, что он его поддерживает, мне нужно изучить активный / резервный отказоустойчивость - person Arya; 02.05.2019
comment
Активное / резервное переключение при отказе снова на физическом (файловом) уровне, с одним одновременным мастером. - person Jasen; 03.05.2019
comment
чтобы получить мультимастер, вам необходимо использовать логическую (уровень DML) репликацию. Я не смотрел внимательно на встроенную репликацию postgresql, с несколькими мастерами требуется способ репликации, чтобы не создавать петли обратной связи, иначе вы получите эффект программного лазера. - person Jasen; 03.05.2019