следовательно не может быть понятия "автоматический force promote" ... цель таймаутов в том чтобы выждать временное окно после которого автоматический штатный promote станет безопасным
... поскольку возражений нет продолжу свою мысль... из описанного выше следует что штатный 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
Обсуждают сегодня