после того как истек "FENCING_TIMEOUT" force promote автоматически перестает быть "force" поскольку к этому моменту мы точно уверены что старый мастер не вернется в кластер "без спросу" ... ну это как я вижу эту терминологию
... поскольку возражений нет продолжу свою мысль...
из описанного выше следует что штатный failover заблокирован до тех пор пока не случится fencing (изоляция/самоизоляция) узла.
Таким образом для поддержки внешнего fencing агента нужна ручка которая отключит ожидание (FENCING_TIMEOUT) и разрешит выбрать нового мастера "прямо сейчас" .
Как это примерно можно реализовать:
api fence(uuid узла + timestamp)
на такой запрос координатор проверяет что такой uuid в это время действительно числится мастером, после чего сичтается "изолированным" что приводит к мгновенному выбору нового мастера.
Как это будет работать на практике:
k8s оператор картриджа слушает api кубера и как только тот ему говорит что пода была удалена посылает fence в координатор.
Т.е. например
рубанем тарантул,
kubectl delete pods pod_name --grace-period=0 --force
он выхватит kill -9 (если процесс вообще есть)
оператор узнает об этом и тут же сообщает координатору о том что узел изолирован....
Сам же тарантул если вдруг включится проверит что выход был "грязный" и не вернется в кластер без "разрешения" координатора...
Такким же образом в зависимости от платформы можно реализовать любой внешний fence agent