Машина не выключается: запрос это не выключатель
Выключение просит, остановка выдёргивает шнур. Всё непонятное в машине, отказывающейся выключаться, вытекает из этого единственного различия и из того, что запрос требует, чтобы внутри кто-то слушал.
AtlasPVE ·
Эта статья отвечает на
- proxmox вм не выключается
- proxmox stop или shutdown
- proxmox корректное выключение
- proxmox ибп выключение вм
- proxmox vm won't shut down
Вы нажимаете выключить. Задача запускается, колёсико крутится, а через три минуты машина всё ещё работает. В конце концов вы нажимаете остановить, и она умирает мгновенно, что вызывает очевидный вопрос: почему первое не сработало, если второе явно способно?
Это не две степени одного действия. Это две совершенно разные вещи.
Различие, на котором держится всё
Выключение это запрос. Слой виртуализации просит гостя выключиться самому, так же как нажатие кнопки питания на физической машине просит операционную систему завершиться аккуратно. Что делать с этим запросом, решает гость.
Остановка это обрыв питания. Она мгновенно снимает питание с виртуальной машины без всякого разговора. Документация предупреждает об этом прямым текстом: остановка может привести к потере данных, применяйте с осторожностью.
Как только вы разводите эти два понятия, машина, которая не выключается, перестаёт быть загадкой. Она не отказывается. Внутри никто не услышал запрос.
Кто должен слушать
Слушателей может быть двое, и у здоровой машины есть хотя бы один.
Обработчик кнопки питания в операционной системе. На госте с Linux он обычно есть. На минимальном образе, на устройстве контейнерного типа или в системе, ушедшей в раннюю стадию загрузки либо в аварийную оболочку, его может не быть.
Гостевой агент. Когда он включён и действительно работает, он даёт слою виртуализации прямой канал внутрь, и запрос идёт этим путём.
Если агент выключен, а обработчик кнопки отсутствует или молчит, запрос уходит и не приходит никуда. Слою виртуализации не говорят "нет". Ему не говорят ничего, что снаружи выглядит ровно так же и объясняет, почему задача кажется зависшей, а не провалившейся.
Если ваши машины регулярно выключаются слишком долго, проверить, действительно ли работает агент, лучший первый шаг, чем сокращать тайм-ауты.
Затем тайм-аут, затем сила
Ожидание ограничено. На гостя тайм-аут выключения по умолчанию составляет 180 секунд; по его истечении машина останавливается принудительно.
У массовой остановки всего на узле собственный бюджет: она пробует аккуратное выключение, ждёт по умолчанию до трёх минут, а затем жёстко останавливает всё ещё работающее.
Честное описание автоматического выключения звучит так: вежливо попросить, подождать фиксированное время, затем выдернуть шнур. Если вашей базе данных нужно четыре минуты, чтобы дописать, значения по умолчанию уже решили, что она получит три.
Поднимите число, но не пропускайте вопрос
Соблазнительно считать тайм-аут той самой ручкой, которую надо подкрутить. Для машины, которой действительно нужно больше времени, поднять его правильно.
Но у машины, которая не выключается никогда, сколько ни жди, проблема не в тайм-ауте, и десять минут означают лишь десять минут ожидания перед той же принудительной остановкой. Сначала выясните, слушает ли кто-нибудь.
Когда задача выключения уже застряла
Если задача выключения висит, а машина нужна выключенной сейчас, существует явный способ остановить её, перекрыв текущую задачу выключения, вместо того чтобы вставать за ней в очередь. Он существует именно потому, что случай застрявшей задачи встречается достаточно часто, чтобы требовать ответа.
Пользуйтесь, понимая, что это: всё тот же обрыв питания, с тем же предупреждением при нём.
Случай, который застаёт врасплох: отключение электричества
Здесь весь текст перестаёт быть теоретическим.
Сценарий на случай отключения, выключающий гостей до того, как сядут батареи, наследует каждое свойство выше. Он отправляет запросы. Гости, которые не слушают, их игнорируют. Тайм-аут идёт. Затем всё ещё работающее останавливается жёстко, возможно при уже низкой батарее и возможно всё разом.
Прежде чем полагаться на такую схему, стоит проверить две вещи, и обе дёшевы:
Отвечают ли гости на запрос выключения на самом деле? Проверьте одного, с секундомером, обычным днём.
Помещается ли общий бюджет в батарею? Гости выключаются по очереди, и тайм-ауты складываются. Ряд машин, каждая из которых тратит две минуты, это не двухминутное выключение.
План на случай отключения, который ни разу не репетировали, это план, который отрепетируют ровно один раз: в темноте, под давлением времени.
Что делает Atlas
Atlas не изобретает третий вид выключения. Просить и снимать питание это те две вещи, что существуют, и притворяться иначе означало бы ложь с последствиями.
Atlas отказывается их смешивать. Разрушительное действие сообщает, что оно разрушительное, до того как вы его подтвердите, поэтому "остановить" никогда не приходит переодетым в чуть более решительное "выключить". Это различие и есть весь предмет текста, а панель, показывающая эти два действия как соседние кнопки равного веса, его уже потеряла.
Ежедневная сводка несёт вторую половину: незапланированная перезагрузка сообщается как факт. Машина, принудительно остановленная после неудавшегося аккуратного выключения, наутро выглядит ровно как машина, которая рухнула. Обе заслуживают внимания.
Источники
Собственная документация Proxmox. На английском, и последнее слово в этом вопросе за ней.