今日、Parallels Cloud Serverの最新リリースのお気に入りの機能、つまり再起動のない更新、または再起動なしの更新についてお話します。
再起動は単純なサーバーであり、現在のアクティビティの状態が失われます。 多数の人々が使用するサーバーにとっては望ましくありません。 現時点では、人気のあるKspliceテクノロジーがあり、そこでは変更がリビングシステムに反映されます。 これは信頼性が低く、すべての更新プログラムがそのように機能するわけではありません。 一般に、問題のコードが継承に成功しなかったという保証はありません。 別の重要な問題は、開発者がそのような更新後にバグに取り組むことに消極的であることです。 この寄せ集めで何が煮詰められたのか誰が知っていますか。
Parallelsでは、別の視点から問題に取り組み、すべてを正直に行うことにしました。 正直に言うと、これはカーネルをリブートすることを意味しますが、だれも気付かないでしょう。 新しいカーネルをロールする最も速い方法は、kexecを使用することです。 コンテナと仮想マシンの両方がそれらの状態(サスペンド/レジューム、ダンプ/リストア、スナップショットなど)を保存できることを覚えておいてください。 したがって、すべての仮想環境をスリープ状態にし、カーネルをすばやく再起動して環境を復元すると、ユーザーはネットワークの問題のように見えるメンテナンスのわずかな遅延のみに気付くでしょう。 最初の概算では、これが再起動不要の更新の仕組みです。
Parallels開発者はさらに一歩進んで、仮想マシンのダウンタイムを大幅に削減しました。 まず、tmpfsと同様にPramFSファイルシステムが作成されましたが、その状態はkexecを介してカーネルを再起動するまで持続します。 仮想マシンとコンテナの状態がこのファイルシステムに追加されます。 PramFSはディスクよりも数桁高速であるため、環境を保存および復元する時間は大幅に短縮されました。
コンテナの状態を保存すると、そのオブジェクト(開いているファイル、ソケット、パイプ、タイマー、プロセスの状態など)とユーザーメモリがすべて保存されます。 次の最適化ステップでは、ユーザーのメモリとファイルシステムのキャッシュを再起動前と同じ場所に残すことができました。 また、この手順により、コンテナの保持時間と回復時間が短縮され、ダウンタイムが短縮されました。
その結果、そのような更新の後、新しいカーネルは古いカーネルのトレースなしでサーバーにロードされます。 すべてのカーネルオブジェクトが再作成され、状態が復元されます。 ユーザーメモリとファイルシステムキャッシュは変更されません。 サーバーの再起動時間は、通常の再起動に比べて数倍短縮されました。
現在、この機能はParallels Cloud Serverユーザーのみが利用できますが、Linuxコミュニティにこの機能を提供する計画があります。 また、コンテナの保存と復元は、CRIUプロジェクトの一環として実施されます。
www.parallels.com/products/pcs
en.wikipedia.org/wiki/Kexec
en.wikipedia.org/wiki/Ksplice
criu.org/Main_Page