172 похожих чатов

>> В это самое "почти", я полагаю, не должны входить

потери после рестарта экземпляра
Предложите хоть одно реалистичное решение. Хотя... какие конкретно потери Вы имеете в виду?

при том же нетсплите, когда после рестарта локальные изменения видны пользователю, а после фейловера - уже нет. Этот кейс я уже вроде приводил

> В норме после рестарта primary изменения "доедут" на реплики — никаких потерь.

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

> > Выше я описал случай, как локально закоммиченные *данные* могут соврать о статусе транзакции в кластере
Синхронная репликация не обещает Вам никаких "статусов транзакции в кластере" (и даже никакого "кластера" в ней нет), она вообще не для этого.

Синхронная репликация (по-хорошему) обещает нулевые потери при цельном кластере и именно к этому мы и стремимся

>> эта проблема схожа, но не столь критична, т.к. есть способы её разрулить
Вот почему бы и не использовать их и при репликации (т.е. в чём существенные отличия — я их не вижу)?

ну писал же выше, что проверка по данным на 100% не работоспособна в кластере даже при синхронной репликации

> Хорошо, вот игнорирует транзакция cancellations, пусть даже игнорирует statement_timeout и висит (ждёт ответа с реплики, которого, допустим, не будет).
Дальше-то что?

Дальше при фейле в кластере вступает в дело HA обвязка, либо будет автофейловер (при нетсплите и активной части на стороне реплики), либо переключение в асинхронный режим мастера без дальнейшего фейловера на несинхронизированную реплику (Patroni так умеет)

> Она вообще "неубиваемая", получается (это что, действительно хорошо, Вы считаете)?

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

> А далее, допустим, за ней другие встанут в очередь (особенно "приятно", когда они read only), и вот DBA наблюдает такую картину и делает... что?

В самом простом случае, DBA выключает (или даже ослабляет) синхронную репликацию через модификацию synchronous_standby_names, понимая что именно из-за этого произошло такое зависание

1 ответов

13 просмотров

> после рестарта локальные изменения видны пользователю, а после фейловера - уже нет. Этот кейс я уже вроде приводил И надёжно решить его, насколько я вижу, невозможно. Или Вы считаете иначе? > Поэтому я и предлагаю закрывать соединения к базе Каким именно образом "закрывать"? Immediate shutdown (по любому "чиху")? Я почему-то не думаю, что пользователи (включая DBA) этому обрадуются... > Синхронная репликация (по-хорошему) обещает нулевые потери при цельном кластере Нет, не обещает. Т.е. реальность такова, что средствами синхронной репликации этого достигнуть во всех без исключения случаях невозможно. Простой пример — primary crash в процессе ожидания ответа синхронной реплики. После recovery primary оказывается ровно в той же ситуации (эта транзакция оказывается committed). Что с этим можно сделать? > и именно к этому мы и стремимся Да стремитесь, только зачем vanialla PostgreSQL ради этого "ломать"? ;) Почему бы Вам не сделать extension на эту тему, например? > что проверка по данным на 100% не работоспособна в кластере даже при синхронной репликации "Проверка по данным" должна работать всегда, иначе приложения/схемы (с которыми не работает) — просто "косые". > вступает в дело HA обвязка, либо будет автофейловер Хорошо, это плюс в такой ситуации. А если не вступает, что дальше будет? > либо переключение в асинхронный режим мастера без дальнейшего фейловера Эээ... а технически это как будет реализовано? Я к тому, что вот "висит" backend, ждёт только ответа реплик... и тут он как-то должен узнать, что надо прекратить это делать, я правильно понял? > Мы боремся, чтобы эта убиваемость не порождала локальных коммитов, потенциональных на откат в кластере Да нет никакого "кластера"! Вы его себе вообразили, извините, и потому мечтаете о том, чего нет и не должно быть, мне кажется. :( > В самом простом случае, DBA выключает (или даже ослабляет) синхронную репликацию через модификацию synchronous_standby_names В конце концов... у Вас уже есть рабочий, оттестированный patch на эту тему? И хоть один committer, который вообще согласен с этим подходом? ;)

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта