※ 本記事は、Neil Soman, Pradeep Vincentによる”First principles: Eliminating VM downtime with OCI’s live migration“を翻訳したものです。

2023年5月11日


現代の企業では、仮想マシン(VM)のワークロードを混乱なく継続的に稼働させる必要がありますが、Oracle Cloud Infrastructure (OCI)などのハイパースカラー・クラウド環境では、セキュリティや操作上の理由から、コンピュートVM上のメンテナンス・イベントが定期的に発生する必要があります。このブログでは、OCI VMライブ・マイグレーションのアーキテクチャを確認します。これは、メンテナンス・イベントに対処する必要のあるお客様のオーバーヘッドをなくす機能です。

次のビデオは、移行する必要のあるVMコンポーネントの概要から開始し、各コンポーネントの移行方法と移行の様々なフェーズを詳細に説明します。最後に、お客様VMの大規模なライブ・マイグレーションを設計する際の可用性とパフォーマンスに関するお客様のリスクを伴う重要な設計のトレードオフについて説明します。

 
 
 

ライブ・マイグレーションの概要

OCIには、41以上のパブリック・リージョンと多くの専用顧客リージョンを備えたグローバルなフットプリントがあります。この大規模スケールでは、常に複数のリージョンでVMメンテナンスが発生します。OCIは、VMをある物理サーバーから別の物理サーバーに移動するメカニズムとして「ライブ・マイグレーション」を実装しています。これにより、移行完了後、VMが新しいサーバーで動作していることに気づかないように、VMがまだ動作している間、最小限の影響しか与えません。

A graphic depicting the overview of VM states for live migration.
図1: ライブ・マイグレーションのVM状態の概要

ライブ・マイグレーションの一部として、図1に示すように、永続的な状態とランタイム状態を含むVMの状態が移動します。永続的な状態には、ブロック・ボリュームのデータ、NVRAMの内容、VMの構成、およびシステムバスでのデバイスの配置方法が含まれます。実行時の状態には、VMのメモリーの内容、接続されたデバイスのデバイス状態、およびネットワーク仮想化レイヤーに格納されている状態が含まれます。パス・スルー・ネットワーク・インタフェース・カード(NIC)などの直接デバイス・アタッチメントがVMにある場合、物理デバイスもランタイム状態になります。

VMランタイム状態移行

A graphic depicting the VM state migration process.
図2: VMランタイム・ステージの移行

最大の実行時状態は、VMのメモリーの内容です。この大部分は、VMの実行中にコピーされます。メモリーの移行には、いくつかの方法があります。コピー・メモリー・ページの事前コピーまたはポスト・コピーを選択できます。OCIでは、事前コピー・オプションを実装して、VMの一時停止を10ミリ秒に制限し、基本原則として可用性を重視しました。ビデオでは、図1および図2に示されているすべてのランタイム状態コンポーネントについて説明します。

VM永続的な状態移行

永続デバイス(ブロック・ストレージおよびネットワーク)は、ソースVMの実行中に宛先にアタッチされます。ブロック・ストレージの移行では、リモート・ブロック・ストレージ・デバイスを宛先にアタッチすることで、リモート・ブロック・ストレージ・デバイスが宛先に引き継がれます(つまり、宛先VMが接続し、起動時にそれらの使用を開始します)。しばらくすると、ブロック・デバイスはソースVMと宛先VMの両方に接続されます。宛先VMが起動されると、宛先からの書込みI/O後にVMの一時停止前にすでに実行されていたソースからの古い書込みI/Oが到着する可能性があります。この競合状態は、データ破損の原因となる可能性があります。この競合状態を回避するために、ブロック・ボリュームが宛先VMからの書込みI/Oを受け入れると、ソースVMからの遅延書込みI/Oがすべて削除されるように、フェンシング・メカニズムを実装します。

A graphic depicting live migration of block storage.
図3: ブロック・ストレージの移行

準仮想化デバイスSR-IOVパススルーデバイスでは、ネットワーク移行の動作が異なります。ハイパーバイザは状態を抽出およびリストアできるため、準仮想化デバイスの移行が簡単になります。パス・スルー・デバイスの場合、ハイパーバイザがネットワーク状態移行のデータ・パスにないため、移行は少し困難です。 

OCIでは、vhostデータ・パス・アクセラレーションと呼ばれる新しい標準が使用されます。データ・パスと制御パスは分割され、データのパス・スルーが可能で、仮想インタフェースがVMに公開されます。そのため、ハイパーバイザとNICは協力してネットワーク状態を抽出およびリストアし、ライブ移行を実現します。

A graphic depicting the process for network migration.
図4: ネットワークの移行

ホスト内からのインタフェースのデバイス状態に加えて、ネットワーク仮想化レイヤーで維持されているフロー状態が宛先に引き継がれていることも確認する必要があります。これには、ステートフル・ファイアウォール・ルールを実施するためのVCNのセキュリティ・リスト機能の一部として作成される接続状態が含まれます。この状態は、確立されたネットワーク接続が移行後に削除されないように、転送する必要があります。ネットワーク・パケットが削除される可能性を最小限に抑えるために、OCI VCNは、移行プロセス中にソースと宛先の両方のVMにイングレス・トラフィックを送信します。

OCIは、データ転送の移行プロセス中に専用の移行仮想ネットワーク・インタフェースを使用します。ライブ・マイグレーション関連のネットワークトラフィック専用のネットワーク帯域幅がすべてのノードに予約されているため、移行をすばやく完了できる一方で、移行ネットワークトラフィックから発生する可能性のある「ノイジー・ネイバー」の問題から顧客を保護することもできます。

エンドツーエンドの移行

A graphic depicting the workflow for live migration.
図5: エンドツーエンドの移行

ライブ・マイグレーションは、慎重に調整する必要がある複数のステージで構成されます。OCI VM Live Migration Orchestration (LMO)サービスは、中断された宛先VMを正しい構成で作成したり、ブロック・ボリュームをアタッチしたり、仮想ネットワーク・インタフェースをアタッチしたりするなど、様々な移行ステージを処理します。

保護

ライブ・マイグレーションは複雑で、多数の複雑な操作が並行して実行されるため、可用性リスクが生じる可能性があります。OCIは、移行中にVMの可用性に影響を与えないよう、いくつかの保護手段を実装しています。VMのメモリーのコピーをその場でコピーするのではなく、コピー先に送るように、事前コピーを使用します。LMOが問題を検出した場合、ライブ・マイグレーションを取り消すことができ、VMはそれに気づきません。たとえば、ページのコピーに時間がかかりすぎるため、移行が一定期間収束しない場合、プロセスは中断されます。これらすべての作業を実際に行うことが重要です。したがって、本番前の障害インジェクション・システムは、移行が堅牢であることを確認するために、開発中のプロセスのすべての段階で障害を注入するように設計されています。

まとめ

OCIのライブ・マイグレーションは、最小の一時停止時間10ミリ秒で実行するように設計されているため、実行中のVMでは、別の物理サーバーに移行されたことが認識されません。

ライブ・マイグレーションを成功させるために、OCIはメモリーの事前コピーに優先順位を付け、ソースVMがまだ実行されている間にネットワークおよびストレージのアタッチメントを確立し、ライブ・マイグレーションに専用のネットワーク帯域幅を使用してVMを中断することなく、大部分の状態コピーの完了します。

永続的な状態が破損しないように、ライブ・マイグレーション・プロセスではブロック・ストレージにフェンシングを実装して、ブロック・ボリュームへの古いデータの偶発的な書込みが行われないようにします。ネットワーク状態も宛先ハイパーバイザに移行されます。エンドツーエンドのライブ・マイグレーション・プロセスを調整および管理するために、ライブ移行オーケストレーションを使用して、移行の様々なフェーズを推進し、移行のワークフローがリカバリ可能であることを確認します。

OCIのコンピュートに組み込まれたこれらすべての最適化により、メンテナンス・イベント中にOCIで実行されているサービスが高可用性になり、時間とコストを節約できます。

Oracle Cloud Infrastructureエンジニアリングは、オラクルのクラウド・プラットフォームの設計について別の考え方を迫っている企業顧客にとって最も要求の厳しいワークロードを処理します。Pradeep Vincentやその他の経験豊富なエンジニアがホストするFirst Principles(第1原則)シリーズの一部として、これらのエンジニアリングに関する深いダイブがさらに多くあります。

詳細は、次のリソースを参照してください。: