Как избежать простоев с Linux?


13

Часто обновления программного обеспечения для Ubuntu требуют перезагрузок (что может иметь побочные эффекты, такие как время простоя).

Я вижу, что в Ubuntu есть https://www.ubuntu.com/livepatch, который позволяет обновлять ядро ​​без перезагрузок, однако это платный сервис. Также есть ksplice .

Существуют ли дистрибутивы / процессы Linux, где обновления / исправления никогда не требуют перезагрузок?

(Я знаю, что настройка серверов высокой доступности (HA) и наличие одноразовых серверов - это лучшие практики, поэтому я не спрашиваю о поддержании сервиса, а на реальных серверах.)


1
Будет ли сервер с воздушным зазором работать как машина, которая никогда не нуждается в перезагрузке? В конце концов, если никто не может получить к нему доступ, вам никогда не нужно его перезагружать? ;) - Например, сервер мониторинга на атомной электростанции, который просто издает сигнал тревоги, если что-то не так. (Да, я знаю, что это, скорее всего, будет выделенная система, а не случайный сервер, но я использую этот пример только для того, чтобы подчеркнуть, что иногда при перезагрузке для «обновлений безопасности» может быть совершенно привередливая идея.
djsmiley2k TMW

3
@ djsmiley2k Это один из тех случаев, когда машина, которую вы никогда не перезагружаете, все еще не обеспечивает достаточную доступность. Вместо этого вам нужна избыточность.
Касперд

@ kasperd хорошо, так что кластер никогда не перезагруженных машин?
djsmiley2k TMW

3
@ djsmiley2k Мой ответ на этот вопрос уже доказывает, почему я считаю кластер машин, которые перезагружаются по одной, более надежным, чем тот, который вы никогда не перезагружаете.
Касперд

2
Почему вы предпочитаете избегать простоев отдельных систем?
садок

Ответы:


12

На ваш вопрос: «Существуют ли дистрибутивы / процессы Linux, где обновления / исправления никогда не требуют перезагрузок?», Я ничего об этом не знаю, и я очень сомневаюсь, что когда-нибудь будут такие, которые действительно не требуют перезагрузки. В дополнение к комментарию Майкла Хэмптона о том, почему исправление в реальном времени не является готовым решением, исправление в реальном времени также не дает того же результата, что и перезагрузка.

Анекдот, чтобы проиллюстрировать это: я недавно исследовал проблему, когда одна конкретная утилита начала segfaulting на большом количестве машин. Я попытался просмотреть общие библиотеки, которые он использовал, чтобы увидеть, не сломалось ли что-то недавно обновленное; ldd сказал, что это не исполняемый файл (хотя когда я вытащил тот же самый двоичный файл на свой ноутбук, ldd мог видеть зависимости разделяемой библиотеки просто отлично). Я попытался пройти через это в GDB; он вышел из строя еще до того, как добрался до первой инструкции.

Глядя на время ошибки, я обнаружил, что недавно был применен патч Ksplice. Я отказался от патча, и бинарный файл не перешел на segfault, затем добавил его обратно, и он снова начал segfaulting. Перезагрузка на эквивалентно исправленное ядро ​​работала нормально. Это оказался патч для 32-битной поддержки, который ребята из Ksplice применили не совсем корректно. К их чести, они выпустили исправленную заплатку в течение нескольких часов, и она вернулась к правильной работе на нашем автопарке без вмешательства.

Другой пример: исправления Meltdown / Spectre были настолько инвазивны, что команда ядра Ubuntu решила, что оперативное исправление нецелесообразно, и потребовала, чтобы люди перезагрузили свои системы в исправленное ядро, прежде чем снова получать живые исправления.

Мы работаем с большим парком физических и виртуальных серверов с большим количеством систем Ksplice и Canonical Livepatch. Они оба были гораздо более надежными, чем многие другие программы, но я все равно предпочел бы, чтобы наши сервисы были спроектированы с дружественной для перезагрузки архитектурой, чем полагаться на исправления ядра в реальном времени.


30

Существует важное различие между высокой доступностью услуги и высокой доступностью отдельной машины.

В большинстве случаев цель состоит в том, чтобы сделать сервис высокодоступным, а доступность отдельных машин является лишь средством достижения этой цели. Однако есть предел того, насколько далеко вы можете достичь цели, улучшая доступность отдельных машин.

Даже если вы можете устранить все простои из-за необходимости обновления программного обеспечения, отдельные машины все равно не будут доступны на 100%. Таким образом, чтобы увеличить доступность сервиса выше доступности отдельных машин, вы должны спроектировать избыточность на более высоком уровне. Последнее предложение вашего вопроса показывает, что по крайней мере в принципе вы это знаете.

Если вы разрабатываете услугу, которая будет более доступной, чем отдельные машины, вам больше не нужно будет добиваться высокой доступности отдельных машин. Таким образом, для высокодоступных сервисов нет необходимости избегать перезагрузок. Вместо этого вы можете пожертвовать некоторой надежностью отдельных машин, чтобы сэкономить средства, которые могут быть направлены на другие области, где вы можете получить гораздо более высокий прирост надежности.

Как только система высокого уровня спроектирована так, чтобы быть надежной в случае сбоя отдельных компонентов оборудования, исправление ядра в реальном времени превращается из преимущества в риск.

Это риск, потому что могут быть тонкие различия между поведением машины, которая была исправлена, и машиной, которая была загружена с последней версией ядра. Это может привести к скрытой ошибке, которая может вызвать сбой при следующей перезагрузке компьютера. Этот риск усиливается перезагрузкой, чтобы получить чистый лист, который рассматривается как способ смягчения некоторых сбоев.

Однажды у вас может произойти сбой, когда вы думаете, что перезагрузка машины может помочь. Но когда вы перезагружаетесь, вы получаете скрытую ошибку, которая не позволяет машине вернуться в нужное состояние. Активное исправление не единственный способ, которым может происходить такая скрытая ошибка, она может также произойти из-за чего-то такого, как обычная служба, которая была включена вручную и никогда не была настроена на запуск во время загрузки, или была настроена на слишком ранний запуск, так что она не подходит из-за неудовлетворенных зависимостей.

По этим причинам высокодоступный сервис может быть на самом деле легче обеспечить с помощью регулярных перезагрузок отдельных машин с достаточно медленной скоростью, чтобы вы могли обнаруживать проблемы и приостанавливать последовательность перезагрузок, когда проблемы возникают.


Мне понравилось ваше описание риска; "исправлено против загрузки с новейшим ядром" .. Однако вы не ответили на мой вопрос ... который я мог перефразировать, есть ли дистрибутивы Linux, которые поставляются с "livepatch" из коробки?
user75126

@ user75126 Я вижу это как функцию, которая больше подходит для клиентских компьютеров, чем для серверов. Более того, вопрос о том, какие дистрибутивы поддерживают, звучит как вопрос о рекомендации продукта. Для меня это звучит как две причины, по которым перефразирование такого вопроса сделало бы его не по теме для этого сайта.
Касперд

3
@ user75126 Oracle Ksplice имеет бесплатную пробную версию и бесплатный уровень для рабочих столов Ubuntu и Fedora (только, но они на самом деле не применяют это). Проблема в том, что создание живых исправлений сложно автоматизировать, и даже части, которые можно автоматизировать, также отнимают много времени. Создание этих исправлений является относительно трудоемкой операцией, и компании должны брать за это плату. Я сам посмотрел на то, что нужно для создания живых патчей, и сразу же сделал это. У меня нет такого времени в моем дне.
Майкл Хэмптон

12
@ user75126 На этом сайте очень плохо менять название и текст вопроса таким образом, чтобы сделать недействительным существующий ответ. Если вы хотите задать другой вопрос, задайте другой вопрос.
Грег Шмит

2
@ user75126 Спасибо. Я прочитал ваш вопрос, и я не думал, что это был действительно ответ на него. Я просто комментировал, почему это платная услуга.
Майкл Хэмптон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.