NTTドコモR&Dの技術ブログです。

VMライブマイグレーションで嵌まった落とし穴の話

はじめに

この記事はドコモR&D Advent Calender 2023の8日目の記事です。

皆様こんにちは!NTTドコモ サービスデザイン部の大﨑です。お客様に安定したサービスを提供できるよう、オンプレミス環境で数千台のサーバのメンテナンスを行なっています。 本記事では、サーバメンテナンス時におけるサービス継続の強い味方である仮想マシン(VM)のライブマイグレーションについて、落とし穴的な注意事項をご紹介します。 商用環境でVMを使用している方が安定したサービス提供を行う参考になれば幸いです。

ライブマイグレーションの方式について

ライブマイグレーションとは、仮想マシン上で稼働しているアプリケーションを実行状態に置いたまま、仮想マシンを自身が配置されている物理ホストから他の物理ホストにメモリの内容ごと移動することです。 一般的なPre-Copyライブマイグレーション方式は下記のステップで実行されます。詳しくはこちら [1]の記事で大変分かりやすくご説明されているのでご参照ください。

  1. 移行先の物理ホストのリソース確認を行い、転送するメモリ容量を確保できれば、仮想マシンが利用するメモリ全体のコピーを行う。
  2. メモリの転送中に変更が加えられた箇所のみ再転送を行う、ことを繰り返す。
  3. 転送が必要なメモリ容量が基準値を下回った場合、移行元の仮想マシンを停止する。
  4. 移行先の仮想マシンへ残りのメモリ内容およびメモリ以外のVM状態を転送する。
  5. 移行先の物理ホストで仮想マシンを起動させる。

ライブマイグレーションの各ステップでの注意点について

STEP1: 移行先の物理ホストのリソース確認を行い、転送するメモリ容量を確保できれば、仮想マシンが利用するメモリ全体のコピーを行う。

メモリをコピーしている間はサービスの中断は発生しませんが、短時間で終わらせるにはネットワークは高速かつ、業務で利用するネットワークとライブマイグレーションで利用するネットワークが互いの転送に影響しないよう、分けることが望ましいです。 もしも同一のネットワークで帯域を大量に使用する処理がライブマイグレーション以外にある場合、シェーピングなどで帯域制御を行いましょう。

STEP2: メモリの転送中に変更が加えられた箇所のみ再転送を行う、ことを繰り返す。

高速なネットワークを用意してライブマイグレーション用に広い帯域を確保したとしても、頻繁にメモリが書き換えられるアプリケーションでは、メモリコピーが完了せず、一定回数反復した後にタイムアウトで強制終了してしまいます。 この段階ではサービス中断は発生しませんが、タイムアウトの設定値を大きくしても強制終了してしまう場合は、通信が少ない時間帯にライブマイグレーションするか、ロードバランサーなどで負荷分散を行いましょう。

STEP3: 転送が必要なメモリ容量が基準値を下回った場合、移行元の仮想マシンを停止する。

転送が必要なメモリ容量が基準値を下回ったとしても、稼働中のプロセスで長時間の待ちが発生する場合や、他のサーバとメモリ同期をしている場合など、ライブマイグレの他にメモリ領域を確保する処理が実行中の場合、処理の競合が発生する恐れがあります。すると移行元の仮想マシンを停止できなかったり、最悪サービス提供にも影響が出てしまいます。 この場合は問題を起こす可能性のあるプロセスを事前に停止してからライブマイグレーションを行いましょう。またもしもサービス影響が発生してしまった場合、影響を局所化するために仮想マシンを速やかにネットワークから切り離しましょう。

STEP4: 移行先の仮想マシンへ残りのメモリ内容およびメモリ以外のVM状態を転送する。

仮想マシン切替の際は通信の瞬断が発生し、わずかですがサービス提供に影響が出ます。TCP通信ならば瞬断が起きても再送によってサービス提供が維持されますが、仮想マシン上のアプリケーションがUDP通信を行っていた場合、瞬断によるパケットロスが発生してしまいます。 基本的に瞬断によるサービス影響は無視できる程度ですが、あらかじめTCP通信の再送間隔や再送回数、UDP通信の内容を調査し、瞬断が起きても問題がないことを確認しましょう。

STEP5: 移行先の物理ホストで仮想マシンを起動させる。

冒頭でライブマイグレーションはサーバメンテナンスの強い味方、と述べました。ホストOSや仮想化ソフトウェアのバージョンアップを行う際、事前にライブマイグレーションによって稼働中のアプリケーションを他の物理ホストに退避しておくことで、安全にバージョンアップ作業を行うことができます。 ただし、ライブマイグレーションの移行元の仮想化ソフトウェアよりも移行先の仮想化ソフトウェアのバージョンが高い場合、バージョンに互換性があっても新機能の一部が使えないことがあります。 その場合は移行先でVMの再起動などが必要になるので、商用環境でバージョンアップを行う前に検証環境でしっかりと動作確認を行うことが大切です。

おわりに

本記事ではPre-Copyライブマイグレーション方式の各ステップでの注意点について紹介しました。安定したサービス提供に悩む方のお役に少しでも立てることを願います。お読みいただきありがとうございました。

参考URL

[1] KVM ライブマイグレーションの仕組み, Qiita, https://qiita.com/haystacker/items/e94d8670086fb7c798bc