Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Как реализовать failover без потерь?  [new]
Guzya
Member

Откуда:
Сообщений: 571
Доброго дня всем!
Уже несколько дней пытаюсь найти решение этого вопроса.
Т.е. имеется приложение которое работает с PG, есть PG(мастер-реплика), есть ли возможность реализовать переключение на реплику без потерь данных\соединения.
Понимаю, что нужен какой-то слой "буферизации" между приложением и PG, но какой?

Пробовал pgbench -> pgbouncer -> HAproxy -> patroni.

HAproxy достаточно быстро определяет переключение, но все равно операция занимаем несколько секунд, и pgbench отваливается.
23 июл 20, 21:39    [22172764]     Ответить | Цитировать Сообщить модератору
 Re: Как реализовать failover без потерь?  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4233
Guzya
Доброго дня всем!
Уже несколько дней пытаюсь найти решение этого вопроса.
Т.е. имеется приложение которое работает с PG, есть PG(мастер-реплика), есть ли возможность реализовать переключение на реплику без потерь данных\соединения.
Понимаю, что нужен какой-то слой "буферизации" между приложением и PG, но какой?

Пробовал pgbench -> pgbouncer -> HAproxy -> patroni.

HAproxy достаточно быстро определяет переключение, но все равно операция занимаем несколько секунд, и pgbench отваливается.


pgbouncer pause (в transaction pooling)
switchover
смена хоста в конфиге pgbouncer куда ходим на новый мастер
отстрел коннектов от pgbouncer к старому мастеру
pgbouncer resume

*profit*

и никаких haproxy не надо даже... ну или pgbouncer на паузу пока там haproxy разбирается что там и где.
23 июл 20, 21:58    [22172767]     Ответить | Цитировать Сообщить модератору
 Re: Как реализовать failover без потерь?  [new]
Guzya
Member

Откуда:
Сообщений: 571
Спасибо, буду пробовать!
Но при failower получается не поможет.

Сообщение было отредактировано: 23 июл 20, 22:24
23 июл 20, 22:24    [22172774]     Ответить | Цитировать Сообщить модератору
 Re: Как реализовать failover без потерь?  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4233
Guzya,

А вот если вам надо именно failover неплановый - то это очевидно невозможно.
Вот код у вас на полпути в середине транзакции... мастер умер..
кто и как будет вам без обрыва эту транзакцию продолжать?

Нулевые потери в такой ситуации на уровне кода делаются который должен уметь retry транзакции в случае какого то сбоя (будь то сеть падала или мастер упал или deadlock словили), никакие прослойки между кодом который это не умеет и базой вам это не сделают.
23 июл 20, 22:26    [22172775]     Ответить | Цитировать Сообщить модератору
 Re: Как реализовать failover без потерь?  [new]
Guzya
Member

Откуда:
Сообщений: 571
Maxim Boguk
Guzya,

А вот если вам надо именно failover неплановый - то это очевидно невозможно.
Вот код у вас на полпути в середине транзакции... мастер умер..
кто и как будет вам без обрыва эту транзакцию продолжать?

Нулевые потери в такой ситуации на уровне кода делаются который должен уметь retry транзакции в случае какого то сбоя (будь то сеть падала или мастер упал или deadlock словили), никакие прослойки между кодом который это не умеет и базой вам это не сделают.


То же думаю, что если та самая программа не умеет обрабатывать такие ситуации, то выхода особого нет.

Спасибо!
23 июл 20, 22:31    [22172776]     Ответить | Цитировать Сообщить модератору
 Re: Как реализовать failover без потерь?  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1122
Maxim Boguk
смена хоста в конфиге pgbouncer куда ходим на новый мастер
отстрел коннектов от pgbouncer к старому мастеру

Да сам при reload закроет все коннекты к старому адресу при первой возможности (то есть по окончании транзакции в пуле транзакций). С примечанием "closing because: database configuration changed" если log_disconnections вдруг включен.
23 июл 20, 22:44    [22172783]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить