Jak uniknąć przestojów w systemie Linux?

13

Często aktualizacje oprogramowania Ubuntu wymagają ponownego uruchomienia komputera (co może mieć skutki uboczne, takie jak przestój).

Widzę, że Ubuntu ma https://www.ubuntu.com/livepatch, który pozwala na aktualizacje jądra bez restartów, jednak jest to usługa płatna. Istnieje również ksplice .

Czy istnieją dystrybucje / procesy dla Linuksa, w których aktualizacje / poprawki nigdy nie wymagają ponownego uruchamiania?

(Wiem, że konfigurowanie serwerów wysokiej dostępności (HA) i posiadanie serwerów jednorazowych to najlepsze praktyki - więc nie pytam o utrzymanie usługi, ale na rzeczywistych serwerach).

użytkownik75126
źródło
1
Czy serwer z przerwami powietrznymi działałby jak maszyna, która nigdy nie wymaga ponownego uruchamiania? W końcu, jeśli nikt nie ma do niego dostępu, nigdy nie musisz go ponownie uruchamiać? ;) - Na przykład serwer monitorowania w elektrowni jądrowej, który po prostu emituje alarm, jeśli coś jest nie tak. (Tak, wiem, że prawdopodobnie byłby to system dedykowany, a nie przypadkowy serwer, ale używam tego przykładu tylko po to, aby zrezygnować z „aktualizacji zabezpieczeń”, być może całkowicie wybredny pomysł.
djsmiley2k TMW
3
@ djsmiley2k To jeden z tych przypadków, w których komputer, którego nigdy nie uruchamiasz ponownie, nie zapewnia wystarczającej dostępności. Zamiast tego potrzebujesz redundancji.
kasperd
@kasperd ok, więc klaster nigdy nie restartowanych maszyn?
djsmiley2k TMW
3
@ djsmiley2k Moja odpowiedź na to pytanie już uzasadnia, dlaczego uważam klaster komputerów, które są ponownie uruchamiane pojedynczo, za bardziej niezawodny niż taki, którego nigdy nie restartujesz.
kasperd
2
Co sprawia, że ​​uważasz, że unikanie pojedynczych przestojów systemu jest lepsze?
warren

Odpowiedzi:

12

Na twoje pytanie: „Czy istnieją dystrybucje / procesy dla Linuksa, w których aktualizacje / łaty nigdy nie wymagają ponownego uruchomienia?”, Nie jestem świadomy żadnego z nich i jestem bardzo wątpliwy, czy kiedykolwiek pojawią się takie, które są naprawdę wolne od ponownego uruchomienia. Oprócz komentarza Michaela Hamptona, dlaczego łatanie na żywo nie jest nigdzie gotowym doświadczeniem, łatanie na żywo również nie osiąga takiego samego rezultatu jak ponowne uruchomienie.

Anegdota, aby to zilustrować: Niedawno zbadałem problem polegający na tym, że pewne narzędzie zaczęło segregować na dużej liczbie komputerów. Próbowałem spojrzeć na współdzielone biblioteki, które kiedyś sprawdzały, czy coś, co ostatnio zostało zaktualizowane, zepsuło; ldd powiedział, że nie jest to plik wykonywalny (chociaż kiedy ściągnąłem ten sam plik binarny do mojego laptopa, ldd dobrze widział zależności współdzielonej biblioteki). Próbowałem przejść przez to w gdb; segregował, zanim dotarł do pierwszej instrukcji.

Patrząc na czas wystąpienia usterki, zauważyłem, że łatka Ksplice została niedawno zastosowana. Wycofałem łatkę, a plik binarny nie segregował się, a następnie dodałem go z powrotem i znów zaczął się segregować. Ponowne uruchomienie jądra z równo załatanym jądrem działało dobrze. Okazało się, że jest to łatka na 32-bitową obsługę, której członkowie Ksplice nie zastosowali całkiem poprawnie. Trzeba przyznać, że w ciągu kilku godzin wydali poprawkę, która wróciła do prawidłowego działania naszej floty bez interwencji.

Kolejny przykład: łaty Meltdown / Spectre były tak inwazyjne, że zespół jądra Ubuntu zdecydował, że łatanie na żywo jest niepraktyczne i wymagał od ludzi ponownego uruchomienia systemu w stałym jądrze przed ponownym otrzymaniem łatek na żywo.

Działamy w pracy duża flota serwerów fizycznych i wirtualnych, z dużą liczbą systemów Ksplice i Canonical Livepatch. Oba były znacznie bardziej niezawodne niż wiele innych programów, ale wolałbym raczej, aby nasze usługi były zaprojektowane z architekturą przyjazną dla restartów, niż polegać na łataniu jądra na żywo.

Paul Gear
źródło
30

Istnieje istotna różnica między uczynieniem usługi wysoce dostępną a wysoce indywidualną maszyną.

W większości przypadków celem jest zapewnienie wysokiej dostępności usługi, a dostępność poszczególnych maszyn jest jedynie środkiem do osiągnięcia tego celu. Istnieje jednak limit, jak daleko można osiągnąć cel, poprawiając dostępność poszczególnych maszyn.

Nawet jeśli możesz usunąć wszystkie przestoje z powodu konieczności aktualizacji oprogramowania, poszczególne komputery nadal nie będą w 100% dostępne. Dlatego, aby zwiększyć dostępność usługi ponad dostępność poszczególnych maszyn, należy zaprojektować redundancję na wyższym poziomie. Ostatnie zdanie twojego pytania pokazuje, że przynajmniej w zasadzie o tym wiesz.

Jeśli zaprojektujesz usługę, która będzie bardziej dostępna niż pojedyncze maszyny, to nie będzie już presji na osiągnięcie wysokiej dostępności poszczególnych maszyn. Dlatego w przypadku wysoce dostępnych usług nie trzeba unikać ponownego uruchamiania. Zamiast tego możesz poświęcić pewną niezawodność poszczególnych maszyn, aby uzyskać oszczędności, które można przeznaczyć na inne obszary, w których można uzyskać znacznie wyższy wzrost niezawodności.

Kiedy system wysokiego poziomu zostanie zaprojektowany tak, aby był niezawodny w przypadku awarii poszczególnych komponentów sprzętowych, łatanie jądra na żywo zmienia się z przewagi w ryzyko.

Jest to ryzyko, ponieważ mogą występować subtelne różnice między zachowaniem maszyny, która została załatana na żywo, a maszyną uruchomioną z najnowszą wersją jądra. Może to spowodować ukryty błąd, który może spowodować awarię przy następnym uruchomieniu komputera. Ryzyko to zwiększa się poprzez ponowne uruchomienie, aby uzyskać czystą kartę, która jest postrzegana jako metoda łagodzenia niektórych awarii.

Pewnego dnia możesz mieć awarię, w której Twoim zdaniem może pomóc ponowne uruchomienie komputera. Ale podczas restartu zostajesz dotknięty ukrytym błędem, który uniemożliwia maszynie powrót do pożądanego stanu. Patchowanie na żywo nie jest jedynym sposobem, w jaki może wystąpić taki ukryty błąd, może się również zdarzyć, ponieważ coś tak przyziemnego jak usługa została włączona ręcznie i nigdy nie została skonfigurowana do uruchamiania podczas rozruchu lub została skonfigurowana do uruchamiania zbyt wcześnie, aby nie pojawia się z powodu niezadowolonych zależności.

Z tych powodów wysoce dostępna usługa może być łatwiejsza do osiągnięcia przy regularnym ponownym uruchamianiu poszczególnych komputerów w wystarczająco wolnym tempie, aby można było wykryć problemy i wstrzymać sekwencję ponownego uruchamiania, gdy tylko wystąpią problemy.

kasperd
źródło
Podobał mi się twój opis ryzyka; „załatane vs uruchomione przy użyciu najnowszego jądra” .. Jednak nie odpowiedziałeś na moje pytanie… które mógłbym przeformułować, czy istnieją dystrybucje linux, które są dostarczane z „livepatch” po wyjęciu z pudełka?
user75126
@ user75126 Widzę to jako właściwość, która jest bardziej odpowiednia dla komputerów klienckich niż dla serwerów. Ponadto pytanie, które dystrybucje obsługują, brzmi jak pytanie o rekomendację produktu. Wydaje mi się, że to dwa powody, dla których przeformułowanie takiego pytania sprawiłoby, że ta strona byłaby nie na temat.
kasperd
3
@ user75126 Oracle Ksplice ma darmową wersję próbną i darmową warstwę dla komputerów Ubuntu i Fedora (tylko, ale tak naprawdę tego nie egzekwują). Problem polega na tym, że tworzenie poprawek na żywo jest trudne do zautomatyzowania, a nawet części, które można zautomatyzować, są również czasochłonne. Tworzenie tych poprawek jest stosunkowo pracochłonne i rozsądne jest, aby firmy pobierały za to opłaty. Spojrzałem na to, co trzeba zrobić, aby stworzyć łatki na żywo, i od razu zacząłem szukać. Nie mam takiego czasu w ciągu dnia.
Michael Hampton
12
@ user75126 Naprawdę złą praktyką na tej stronie jest zmiana tytułu pytania i treści w sposób, który unieważnia istniejącą odpowiedź. Jeśli chcesz zadać inne pytanie, zadaj inne pytanie.
Greg Schmit
2
@ user75126 Dzięki. Przeczytałem twoje pytanie i nie sądziłem, że to naprawdę odpowiedź na to pytanie. Ja tylko komentowałem, dlaczego jest to usługa płatna.
Michael Hampton