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

> после рестарта локальные изменения видны пользователю, а после

фейловера - уже нет. Этот кейс я уже вроде приводил
И надёжно решить его, насколько я вижу, невозможно. Или Вы считаете иначе?

> Поэтому я и предлагаю закрывать соединения к базе
Каким именно образом "закрывать"? Immediate shutdown (по любому "чиху")?
Я почему-то не думаю, что пользователи (включая DBA) этому обрадуются...

> Синхронная репликация (по-хорошему) обещает нулевые потери при цельном кластере
Нет, не обещает. Т.е. реальность такова, что средствами синхронной репликации этого достигнуть во всех без исключения случаях невозможно.
Простой пример — primary crash в процессе ожидания ответа синхронной реплики.
После recovery primary оказывается ровно в той же ситуации (эта транзакция оказывается committed). Что с этим можно сделать?

> и именно к этому мы и стремимся
Да стремитесь, только зачем vanialla PostgreSQL ради этого "ломать"? ;)
Почему бы Вам не сделать extension на эту тему, например?

> что проверка по данным на 100% не работоспособна в кластере даже при синхронной репликации
"Проверка по данным" должна работать всегда, иначе приложения/схемы (с которыми не работает) — просто "косые".

> вступает в дело HA обвязка, либо будет автофейловер
Хорошо, это плюс в такой ситуации. А если не вступает, что дальше будет?

> либо переключение в асинхронный режим мастера без дальнейшего фейловера
Эээ... а технически это как будет реализовано?
Я к тому, что вот "висит" backend, ждёт только ответа реплик... и тут он как-то должен узнать, что надо прекратить это делать, я правильно понял?

> Мы боремся, чтобы эта убиваемость не порождала локальных коммитов, потенциональных на откат в кластере
Да нет никакого "кластера"! Вы его себе вообразили, извините, и потому мечтаете о том, чего нет и не должно быть, мне кажется. :(

> В самом простом случае, DBA выключает (или даже ослабляет) синхронную репликацию через модификацию synchronous_standby_names
В конце концов... у Вас уже есть рабочий, оттестированный patch на эту тему? И хоть один committer, который вообще согласен с этим подходом? ;)

2 ответов

4 просмотра

>> после рестарта локальные изменения видны пользователю, а после фейловера - уже нет. Этот кейс я уже вроде приводил И надёжно решить его, насколько я вижу, невозможно. Или Вы считаете иначе? Если закрывать соединения к базе после рестарта до момента синхронизации синхронных реплик, тогда база откроется после фейловера. Тут надо отметить, что открывание базы должно быть после того как соберётся кворум (необходимый набор сихронных реплик с положительными ответами о синхронизации) вокруг нового мастера. И можно будет уже спокойно проверять статус прерванных транзакций, потому как они здесь и далее будут стабильны. >> Поэтому я и предлагаю закрывать соединения к базе Каким именно образом "закрывать"? Immediate shutdown (по любому "чиху")? Выключать узел ни в коем случае не нужно, необходимо, чтобы узел принимал соединения на репликацию и от суперюзера. HA обвяка это может осуществить через манипуляцию с pg_hba.conf, как это делает столон https://github.com/sorintlab/stolon/blob/master/doc/syncrepl.md#handling-postgresql-sync-repl-limits-under-such-circumstances > Я почему-то не думаю, что пользователи (включая DBA) этому обрадуются... Всё это рассчитано на DBA, для которых гораздо большей проблемой становится потеря данных при синхронной репликации >> Синхронная репликация (по-хорошему) обещает нулевые потери при цельном кластере Нет, не обещает. Т.е. реальность такова, что средствами синхронной репликации этого достигнуть во всех без исключения случаях невозможно. В моей схеме потеря будет лишь при краше постгресового кворума > Простой пример — primary crash в процессе ожидания ответа синхронной реплики. После recovery primary оказывается ровно в той же ситуации (эта транзакция оказывается committed). Что с этим можно сделать? см. выше >> и именно к этому мы и стремимся Да стремитесь, только зачем vanialla PostgreSQL ради этого "ломать"? ;) в треде патч предполагает опциональность реакции на Ctrl+C / Сtrl+D > Почему бы Вам не сделать extension на эту тему, например? К сожаления со стороны экстеншна не подобраться к логике ожидания синхронного коммита

>> вступает в дело HA обвязка, либо будет автофейловер Хорошо, это плюс в такой ситуации. А если не вступает, что дальше будет? тут либо никаких фейлов нет и синхронный коммит рано или поздно завершится, либо HA движок не детектирует фейл, что требует его доработки. В любом случае, синхронную репликацию можно ослабить или отключить вручную и всё пойдёт далее >> либо переключение в асинхронный режим мастера без дальнейшего фейловера Эээ... а технически это как будет реализовано? Я к тому, что вот "висит" backend, ждёт только ответа реплик... и тут он как-то должен узнать, что надо прекратить это делать, я правильно понял? Это решает HA движок, и только он. По таймауту фейла синхронной реплики, если никакой замены ей нет, то кластер переключается в ассинхронный режим при условии, что кворум DCS всё ещё на стороне мастера. Это функциональность аналогична Max Availability режиму в Oracle Data Guard >> Мы боремся, чтобы эта убиваемость не порождала локальных коммитов, потенциональных на откат в кластере Да нет никакого "кластера"! Вы его себе вообразили, извините, и потому мечтаете о том, чего нет и не должно быть, мне кажется. :( Сформулируйте конкретно вашу мысль. Здесь описываемая проблема касается только кластерной инсталляции "мастер-реплика". Особенно сюда попадают кластера, где есть автоматика - на промоут узла и демоут с откатом неотреплицированных изменений (например, через pg_rewind). Говоря про "локальные коммиты, потенциальных на откат в кластере", я имею в виду откат изменений при демоуте узла, т.е. коммит мог подтвердиться на старом мастере, но после фейловера и pg_rewind он окончательно теряется > В конце концов... у Вас уже есть рабочий, оттестированный patch на эту тему? Да, на коммитфесте > И хоть один committer, который вообще согласен с этим подходом? ;) К консенсусу мы пока не пришли, но наша сторона практически полностью высказалась по этой проблеме, ответ за хакерами)

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

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

Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
3
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
у меня программа тысяч на 10 строк. Там в основном моя собственная логика. А по содержанию она просто работает с файловой системой (мастер для бэкапов) и таблицей с данными о ...
Дмитрий Завгородний
5
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Карта сайта