Як уникнути простоїв з Linux?


13

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

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

Чи є дистрибутиви / процеси Linux, де оновлення / виправлення ніколи не потребують перезавантаження?

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


1
Чи може сервер, на якому працює повітря, працює як машина, яка ніколи не потребує перезавантаження? Зрештою, якщо ніхто не може отримати до нього доступ, вам ніколи не потрібно перезавантажувати його? ;) - Наприклад, сервер моніторингу на атомній електростанції, який просто звучить тривогу, якщо щось не так. (Так, я знаю, що це, швидше за все, буде спеціалізованою системою, а не випадковим сервером, але я використовую приклад просто для того, щоб зазначити, що трапляються випадки перезавантаження для "оновлень безпеки", можливо, цілком
хитра

3
@ djsmiley2k Це один з тих випадків, коли машина, яку ви ніколи не перезавантажуєте, все ще не забезпечує достатню доступність. Натомість вам потрібна надмірність.
kasperd

@kasperd Ок, значить, кластер ніколи не перезавантажуваних машин?
djsmiley2k TMW

3
@ djsmiley2k У моїй відповіді на питання вже йдеться про те, чому я вважаю, що кластер машин, які перезавантажуються одна за одною, є більш надійними, ніж ті, які ви ніколи не перезавантажуєте.
kasperd

2
Чому ви вважаєте, що краще уникати простоїв у системі?
warren

Відповіді:


12

На ваше запитання "Чи існують дистрибутиви / процеси Linux, де оновлення / патчі ніколи не потребують перезавантаження?", Я не знаю жодного, і я дуже сумніваюся, що коли-небудь знайдуться справді без перезавантаження. На додаток до коментаря Майкла Хемптона про те, чому виправлення "патч" не є вичерпним досвідом, патч "live" також не дає такого ж результату, як перезавантаження.

Анекдот для того, щоб проілюструвати це: я нещодавно досліджував проблему, коли одна конкретна утиліта почала сегментацію на великій кількості машин. Я спробував розглянути спільні бібліотеки, які раніше використовував, щоб побачити, чи щось порушено нещодавно оновлене; ldd сказав, що це не виконується файл (навіть коли я тягнув той самий двійковий файл до свого ноутбука, ldd міг добре бачити залежність від спільної бібліотеки). Я спробував переступити через нього в gdb; воно зафіксувалося перед тим, як потрапити до першої інструкції

Переглядаючи терміни несправності, я виявив, що нещодавно застосовано патч Ksplice. Я створив резервну копію виправлення, і двійковий файл не сегментувався, потім додав його знову, і він знову почав сегментувати. Перезавантаження на еквівалентно виправлене ядро ​​спрацювало чудово. Це виявилося патчем для 32-бітної підтримки, яку люди Ksplice застосували не зовсім коректно. На їхню честь, вони видали фіксований патч протягом декількох годин, і він знову працював правильно на нашому флоті без втручання.

Інший приклад: патчі Meltdown / Spectre були настільки інвазивними, що команда ядра Ubuntu вирішила, що живий патч непрактичний і вимагає від людей перезавантажувати свої системи у фіксованому ядрі, перш ніж знову отримувати живі патчі.

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


30

Існує важлива відмінність між тим, щоб зробити послугу високодоступною і зробити індивідуальну машину високо доступною.

У більшості випадків мета - зробити послугу високодоступною, а наявність окремих машин є лише засобом для досягнення цієї мети. Однак існує обмеження в тому, наскільки далеко до мети ви можете досягти, покращуючи доступність окремих машин.

Навіть якщо ви зможете зняти всі простої через необхідність оновлення програмного забезпечення, окремі машини все одно не будуть доступні на 100%. Таким чином, щоб збільшити доступність послуги вище наявності окремих машин, ви повинні розробити надмірність на більш високому рівні. Останнє речення вашого запитання показує, що ви принаймні в принципі це знаєте.

Якщо ви проектуєте послугу, яка буде доступнішою, ніж можуть поставляти окремі машини, більше немає тиску для досягнення високої доступності окремих машин. Таким чином, для високодоступних послуг не потрібно уникати перезавантажень. Натомість ви можете пожертвувати деякою надійністю окремих машин, щоб заощадити, які можна досягти в інших сферах, де ви можете отримати набагато більші виграші в надійності.

Після того, як система високого рівня стане надійною у випадку відмови окремих апаратних компонентів, жива виправлення ядер змінюється від переваги до стану ризику.

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

Одного разу у вас може виникнути аварія, де ви думаєте, що перезавантаження машини може допомогти. Але під час перезавантаження ви потрапляєте на приховану помилку, що запобігає поверненню машини в потрібному стані. Виправлення в прямому ефірі - не єдиний спосіб, коли може статися така прихована помилка, вона також може статися через щось настільки приземлене, як послуга, яка була ввімкнена вручну і ніколи не налаштована для запуску під час завантаження, або налаштована для запуску занадто рано, щоб вона не з'являється через незадоволених залежностей.

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


Мені сподобався ваш опис ризику; "виправлена ​​в порівнянні з завантаженим найновішим ядром" .. Однак ви не відповіли на моє запитання .. що я можу перефразувати, чи є Linux-дистрибутиви, які постачаються з "livepatch" поза коробкою?
user75126

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

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

12
@ user75126 На цьому веб-сайті дійсно погана практика змінювати назву та тіло питання таким чином, що визнає недійсною відповідь. Якщо ви хотіли задати інше питання, то задайте інше питання.
Грег Шміт

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