web-dev-qa-db-ja.com

Linuxでダウンタイムを回避する方法は?

Ubuntuへのソフトウェアアップデートを頻繁に行うと、再起動が必要になります(ダウンタイムなどの副作用が生じる可能性があります)。

Ubuntuには https://www.ubuntu.com/livepatch があるため、再起動せずにカーネルを更新できますが、これは有料サービスです。 ksplice もあります。

アップグレード/パッチが再起動を必要としないLinuxディストリビューション/プロセスはありますか?

(私は高可用性(HA)サーバーのセットアップと使い捨てサーバーを使用することがベストプラクティスであることを知っています-したがって、私はではありませんサービスを維持することについて尋ねていますが、実際のサーバーで。)

13
user75126

「アップグレードやパッチが再起動を必要としないLinuxディストリビューション/プロセスはありますか?」という質問に対して、私は何も知らず、本当に再起動の必要がないものがあるかどうか非常に疑問です。マイケルハンプトンが、ライブパッチがどこでもすぐに使えるわけではない理由についてのコメントに加えて、ライブパッチも再起動と同じ結果にはなりません。

これを説明する逸話:私は最近、特定のユーティリティが多数のマシンでセグメンテーション違反を開始した問題を調査しました。最近アップグレードしたものが壊れているかどうかを確認するために使用していた共有ライブラリを調べてみました。 lddは、これは実行可能ファイルではないと述べました(同じバイナリをラップトップにダウンロードしたときでも、lddは共有ライブラリの依存関係を問題なく確認できました)。私はそれをgdbでステップスルーしてみました。最初の命令に到達する前にセグメンテーション違反が発生しました。

障害のタイミングを見ると、Kspliceパッチが最近適用されていることがわかりました。パッチをバックアウトしましたが、バイナリはsegfaultせず、再度追加すると、segfaultが再開されました。同等にパッチされたカーネルで再起動しても問題なく動作しました。これは、Kspliceの人々がまったく正しく適用していなかった32ビットサポート用のパッチであることがわかりました。彼らの功績として、彼らは数時間以内に修正パッチを発行し、介入なしで艦隊で正しく動作するように戻りました。

別の例:Meltdown/Spectreパッチは非常に侵略的だったため、Ubuntuカーネルチームはライブパッチが実用的ではないと判断し、ライブパッチを再度受信する前にシステムを固定カーネルで再起動する必要がありました。

私たちは、KspliceシステムとCanonical Livepatchシステムの両方を多数使用して、物理サーバーと仮想サーバーの大規模なフリートを稼働させています。どちらも他の多くのソフトウェアよりもはるかに信頼性が高くなっていますが、カーネルのライブパッチに依存するよりも、再起動に適したアーキテクチャで設計されたサービスを見たいと思います。

12
Paul Gear

サービスを高可用性にすることと、個々のマシンを高可用性にすることの間には重要な違いがあります。

ほとんどの場合、目標はサービスの可用性を高めることであり、個々のマシンの可用性はその目標を達成するための手段にすぎません。ただし、個々のマシンの可用性を向上させることで、目標にどの程度到達できるかには限界があります。

ソフトウェアを更新する必要があるためにすべてのダウンタイムを取り除くことができたとしても、個々のマシンは100%利用できません。したがって、個々のマシンの可用性よりもサービスの可用性を高めるには、より高いレベルで冗長性を設計する必要があります。あなたの質問の最後の文は、少なくとも原則としてこれを知っていることを示しています。

個々のマシンが提供できるよりも可用性の高いサービスを設計すると、個々のマシンの高可用性を実現する必要がなくなります。したがって、高可用性サービスの場合、再起動を回避する必要はありません。代わりに、個々のマシンの信頼性をいくらか犠牲にして節約を行うことで、信頼性を大幅に向上できる他の領域に費やすことができます。

個々のハードウェアコンポーネントがカーネルのライブパッチに失敗した場合に高レベルシステムが信頼できるように設計されると、利点になることからリスクになることへと変わります。

ライブパッチが適用されたマシンと最新のカーネルバージョンで起動されたマシンの動作には微妙な違いがあるため、これはリスクです。これにより潜在的なバグが発生し、次にマシンを再起動したときに停止する可能性があります。このリスクは、再起動することで拡大し、停止状態を緩和する方法として白紙の状態が表示されるようになります。

ある日、マシンの再起動が役立つと思われる停止が発生する可能性があります。しかし、再起動すると潜在的なバグに遭遇し、マシンが望ましい状態に戻るのを妨げます。このような潜在的なバグが発生する可能性があるのはライブパッチだけではありません。サービスが手動で有効にされていて、起動時に開始するように設定されていない、またはサービスが早く開始するように設定されているなど、ありふれた問題が原因である可能性もあります。依存関係が満たされていないため、起動できません。

これらの理由により、問題を検出し、問題が発生した場合に一連の再起動を一時停止できるほど遅い速度で個々のマシンを定期的に再起動すると、高可用性サービスを実際に実現しやすくなります。

30
kasperd