|
Как реализовать failover без потерь?
|
|||
---|---|---|---|
#18+
Доброго дня всем! Уже несколько дней пытаюсь найти решение этого вопроса. Т.е. имеется приложение которое работает с PG, есть PG(мастер-реплика), есть ли возможность реализовать переключение на реплику без потерь данных\соединения. Понимаю, что нужен какой-то слой "буферизации" между приложением и PG, но какой? Пробовал pgbench -> pgbouncer -> HAproxy -> patroni. HAproxy достаточно быстро определяет переключение, но все равно операция занимаем несколько секунд, и pgbench отваливается. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2020, 21:39 |
|
Как реализовать failover без потерь?
|
|||
---|---|---|---|
#18+
Guzya Доброго дня всем! Уже несколько дней пытаюсь найти решение этого вопроса. Т.е. имеется приложение которое работает с PG, есть PG(мастер-реплика), есть ли возможность реализовать переключение на реплику без потерь данных\соединения. Понимаю, что нужен какой-то слой "буферизации" между приложением и PG, но какой? Пробовал pgbench -> pgbouncer -> HAproxy -> patroni. HAproxy достаточно быстро определяет переключение, но все равно операция занимаем несколько секунд, и pgbench отваливается. pgbouncer pause (в transaction pooling) switchover смена хоста в конфиге pgbouncer куда ходим на новый мастер отстрел коннектов от pgbouncer к старому мастеру pgbouncer resume *profit* и никаких haproxy не надо даже... ну или pgbouncer на паузу пока там haproxy разбирается что там и где. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2020, 21:58 |
|
Как реализовать failover без потерь?
|
|||
---|---|---|---|
#18+
Спасибо, буду пробовать! Но при failower получается не поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2020, 22:24 |
|
Как реализовать failover без потерь?
|
|||
---|---|---|---|
#18+
Guzya, А вот если вам надо именно failover неплановый - то это очевидно невозможно. Вот код у вас на полпути в середине транзакции... мастер умер.. кто и как будет вам без обрыва эту транзакцию продолжать? Нулевые потери в такой ситуации на уровне кода делаются который должен уметь retry транзакции в случае какого то сбоя (будь то сеть падала или мастер упал или deadlock словили), никакие прослойки между кодом который это не умеет и базой вам это не сделают. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2020, 22:26 |
|
Как реализовать failover без потерь?
|
|||
---|---|---|---|
#18+
Maxim Boguk Guzya, А вот если вам надо именно failover неплановый - то это очевидно невозможно. Вот код у вас на полпути в середине транзакции... мастер умер.. кто и как будет вам без обрыва эту транзакцию продолжать? Нулевые потери в такой ситуации на уровне кода делаются который должен уметь retry транзакции в случае какого то сбоя (будь то сеть падала или мастер упал или deadlock словили), никакие прослойки между кодом который это не умеет и базой вам это не сделают. То же думаю, что если та самая программа не умеет обрабатывать такие ситуации, то выхода особого нет. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2020, 22:31 |
|
Как реализовать failover без потерь?
|
|||
---|---|---|---|
#18+
Maxim Boguk смена хоста в конфиге pgbouncer куда ходим на новый мастер отстрел коннектов от pgbouncer к старому мастеру Да сам при reload закроет все коннекты к старому адресу при первой возможности (то есть по окончании транзакции в пуле транзакций). С примечанием "closing because: database configuration changed" если log_disconnections вдруг включен. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2020, 22:44 |
|
|
start [/forum/topic.php?fid=53&msg=39983372&tid=1994564]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 170ms |
0 / 0 |