25
Ограждение (fencing)
Отключение узла в неизвестном состоянии от клиентов
из-за разделения сети может возникнуть ситуация split-brain
нужно не только оградить узел,
но и не допустить в это время переход на реплику
Механизмы
отключение питания
отключение сетевого порта
завершение и перенаправление клиентских соединений
Поскольку в этом подходе серверы PostgreSQL ничего не знают о том,
что работают в кластере, важно уметь отгородить сбойный узел —
возможно, работающий, но потерявший связь с кластером — от
внешнего мира. Эта процедура называется fencing.
Если этого не сделать, то мастер, оказавшись в результате разделения
сети в меньшинстве, может продолжить работу (ситуация split-brain).
Полагаться на то, что управляющие, обнаружив сбой, сами остановят
сервер PostgreSQL, нельзя: у управляющих может не оказаться связи
с агентом, может произойти сбой в агенте и т. п.
Процедура может выполняться по-разному, но не должна рассчитывать
на доступность узла по сети. Например:
- программно отключать питание сервера (интерфейсы IPMI, PDU);
- программно отключать сетевой порт на коммутаторе;
- если соединение идет через специализированный компонент, то
клиенты могут принудительно отключаться от сбойного узла на уровне
этого компонента.
Надо заметить, что процедура ограждения уменьшает масштаб
проблемы, но сама по себе не решает ее полностью. Нужно также
гарантировать невозможность перехода на одну из реплик до тех пор,
пока сбойный мастер не будет огражден. Ведь на принятие решения
об ограждении требуется время, в течение которого узел может
продолжать функционирование, и, следовательно, часть
зафиксированных данных может потеряться при восстановлении
(нулевое RPO не достигается).