Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

15.5. virsh を使用した KVM のライブ移行

virsh コマンドを使用すると、ゲスト仮想マシンを別のホスト物理マシンに移行できます。migrate コマンドは、以下の形式のパラメーターを受け付けます。
# virsh migrate --live GuestName DestinationURL
ライブマイグレーションが必要ない場合に、--live オプションが削除される可能性がある点に注意してください。追加オプションは、「virsh migrate コマンドの追加オプション」 にリスト表示されています。
GuestName パラメーターは、移行するゲスト仮想マシンの名前を表します。
DestinationURL パラメーターは、宛先ホスト物理マシンの接続 URL です。移行先システムで同じバージョンの Red Hat Enterprise Linux を実行し、同じハイパーバイザーを使用し、libvirt を実行している必要があります。
注記
通常の移行と peer2peer の移行の DestinationURL パラメーターのセマンティックは異なります。
  • 通常の移行 - DestinationURL は、移行元ゲスト仮想マシンから見た、移行先ホストの物理マシンの URL です。
  • peer2peer 移行: DestinationURL は、ソースホスト物理マシンから見たターゲットホスト物理マシンの URL です。
コマンドを入力すると、インストール先システムの root パスワードを求められます。
重要
移行を成功させるには、名前解決が両方 (移行元と移行先) で機能している必要があります。両側が互いを見つけられるようにする必要があります。名前解決が機能していることを確認するために、一方を他方に ping できることを確認してください。

例: virsh を使用したライブマイグレーション

この例では、host1.example.com から host2.example.com に移行します。使用環境に合わせて、ホストの物理マシン名を変更します。この例では、guest1-rhel6-64 という名前の仮想マシンを移行します。

この例では、共有ストレージを完全に設定し、すべての前提条件 (ここでは 移行の要件) を満たしていることを前提としています。
  1. ゲスト仮想マシンが実行していることを確認します。

    移行元システムで、host1.example.com を実行し、guest1-rhel6-64 が実行していることを確認します。
    [root@host1 ~]# virsh list
    Id Name                 State
    ----------------------------------
     10 guest1-rhel6-64     running
    
  2. ゲスト仮想マシンの移行

    次のコマンドを実行して、ゲスト仮想マシンを移行先 host2.example.com にライブ移行します。リンク先の URL の末尾に /system を追加し、フルアクセスが必要であることを libvirt に指示します。
    # virsh migrate --live guest1-rhel7-64 qemu+ssh://host2.example.com/system
    コマンドを入力すると、インストール先システムの root パスワードを求められます。
  3. Wait

    負荷やゲスト仮想マシンのサイズによっては、移行に時間がかかる場合があります。virsh はエラーのみを報告します。ゲスト仮想マシンは、完全に移行するまで、移行元ホストの物理マシンで実行し続けます。
  4. ゲスト仮想マシンが移行先ホストに到達していることを確認する

    移行先システムから、host2.example.comguest1-rhel7-64 が実行していることを確認します。
    [root@host2 ~]# virsh list
    Id Name                 State
    ----------------------------------
     10 guest1-rhel7-64     running
    
これで、ライブマイグレーションが完了しました。
注記
libvirt は、TLS/SSL ソケット、UNIX ソケット、SSH、暗号化されていない TCP など、さまざまなネットワーク方式をサポートしています。他の方法の使用方法は、18章ゲストのリモート管理 を参照してください。
注記
実行中でないゲスト仮想マシンは、次のコマンドを使用して移行できます。
# virsh migrate --offline --persistent 

15.5.1. virsh を使用した移行に関する追加のヒント

複数の同時ライブマイグレーションを実行できます。各移行は、個別のコマンドシェルで実行されます。ただし、これは慎重に行ってください。各移行インスタンスでは、双方 (ソースおよびターゲット) から 1 つの MAX_CLIENT を使用するため、注意して計算を行う必要があります。デフォルト設定は 20 であるため、設定を変更せずに 10 インスタンスを実行できます。設定を変更する必要がある場合は、手順15.1「libvirtd.conf の設定」 の手順を参照してください。
  1. 手順15.1「libvirtd.conf の設定」 の説明に従って、libvirtd.conf ファイルを開きます。
  2. Processing controls のセクションを探します。
    #################################################################
    #
    # Processing controls
    #
    
    # The maximum number of concurrent client connections to allow
    # over all sockets combined.
    #max_clients = 5000
    
    # The maximum length of queue of connections waiting to be
    # accepted by the daemon. Note, that some protocols supporting
    # retransmission may obey this so that a later reattempt at
    # connection succeeds.
    #max_queued_clients = 1000
    
    # The minimum limit sets the number of workers to start up
    # initially. If the number of active clients exceeds this,
    # then more threads are spawned, upto max_workers limit.
    # Typically you'd want max_workers to equal maximum number
    # of clients allowed
    #min_workers = 5
    #max_workers = 20
    
    
    # The number of priority workers. If all workers from above
    # pool will stuck, some calls marked as high priority
    # (notably domainDestroy) can be executed in this pool.
    #prio_workers = 5
    
    # Total global limit on concurrent RPC calls. Should be
    # at least as large as max_workers. Beyond this, RPC requests
    # will be read into memory and queued. This directly impact
    # memory usage, currently each request requires 256 KB of
    # memory. So by default upto 5 MB of memory is used
    #
    # XXX this isn't actually enforced yet, only the per-client
    # limit is used so far
    #max_requests = 20
    
    # Limit on concurrent requests from a single client
    # connection. To avoid one client monopolizing the server
    # this should be a small fraction of the global max_requests
    # and max_workers parameter
    #max_client_requests = 5
    
    #################################################################
    
  3. max_clients パラメーターおよび max_workers パラメーターの設定を変更します。両方のパラメーターの番号が同じであることが推奨されます。max_clients は、移行ごとに 2 つのクライアント (各側に 1 つ) を使用します。max_workers は、実行フェーズ中に移行元で 1 つのワーカーと、移行先で 0 のワーカーを使用し、終了フェーズ中に移行先でワーカーを 1 つ使用します。
    重要
    max_clients パラメーターおよび max_workers パラメーターの設定は、libvirtd サービスへのゲスト仮想マシンのすべての接続の影響を受けます。つまり、同じゲスト仮想マシンを使用し、同時に移行を実行しているユーザーは、max_clients パラメーターおよび max_workers パラメーターの設定で設定された制限に従います。このため、同時ライブマイグレーションを実行する前に、最大値を慎重に検討する必要があります。
    重要
    max_clients パラメーターは、libvirt への接続を許可するクライアントの数を制御します。一度に多数のコンテナーを起動すると、この制限に簡単に到達して超過する可能性があります。max_clients パラメーターの値は、これを回避するために増やすことができますが、増やすと、インスタンスに対する DoS (DoS) 攻撃に対してシステムが脆弱になる可能性があります。この問題を軽減するために、Red Hat Enterprise Linux 7.0 では、許可されているものの、まだ認証されていない接続の制限を指定する新しい max_anonymous_clients 設定が導入されました。ワークロードに合わせて、max_clientsmax_anonymous_clients を組み合わせて実装できます。
  4. ファイルを保存し、サービスを再起動します。
    注記
    起動したにもかかわらず認証されていない ssh セッションが多すぎるために、移行接続が切断する場合があります。デフォルトでは、sshd で許可されるセッションは 10 セッションのみで、常に "pre-authenticated state" となります。この設定は、sshd 設定ファイル (ここでは /etc/ssh/sshd_config) の MaxStartups パラメーターで制御されます。これには調整が必要な場合があります。この制限は DoS 攻撃 (および一般的なリソースの過剰使用) を防ぐために設定されているため、このパラメーターの調整は慎重に行ってください。この値を高く設定しすぎると、目的が無効になります。このパラメーターを変更するには、ファイル/etc/ssh/sshd_configを変更し、MaxStartups 行の先頭から#を削除して、10 (デフォルト値) をより大きな数値に変更します。必ず保存して、sshd サービスを再起動してください。詳細は、man ページの sshd_config を参照してください。

15.5.2. virsh migrate コマンドの追加オプション

--live のほかに、virsh migrate では以下のオプションを利用できます。
  • --direct - 直接移行に使用されます。
  • --p2p - ピアツーピア移行に使用されます。
  • --tunneled - トンネルマイグレーションに使用されます。
  • --offline - 移行先のドメインを起動せず、また、移行元ホストで停止することなく、ドメイン定義を移行します。オフラインマイグレーションは、非アクティブなドメインで使用できるため、--persistent オプションで使用する必要があります。
  • --persistent - 移行先ホストの物理マシンでドメインを永続的な状態にします。
  • --undefinesource - 移行元ホストの物理マシンでドメインの定義を解除する
  • --suspend - ドメインを移行先ホスト物理マシンで一時停止したままにします。
  • --change-protection - 移行の進行中に、互換性のない設定変更がドメインに行われないように強制します。ハイパーバイザーによるサポートがある場合にこのフラグが暗黙的に有効になりますが、ハイパーバイザーに変更保護の対応がない場合に明示的に使用して移行を拒否できます。
  • --unsafe - すべての安全手順を無視して、強制的に移行を実行します。
  • --verbose - 移行の進行状況を表示します。
  • --compressed - ライブマイグレーション中に繰り返し転送する必要があるメモリーページの圧縮をアクティブにします。
  • --abort-on-error - 移行中にソフトエラー (I/O エラーなど) が発生すると、移行をキャンセルします。
  • --domain [name] - ドメインネーム、ID、または UUID を設定します。
  • --desturi [URI] - クライアント (通常の移行) またはソース (p2p 移行) から見た宛先ホストの接続 URI。
  • --migrateuri [URI] - 移行 URI です。通常は省略できます。
  • --graphicsuri [URI] - シームレスなグラフィックス移行に使用されるグラフィックス URI。
  • --listen-address [address] - 移行先のハイパーバイザーが着信時にバインドするリッスンアドレスを設定します。
  • --timeout [seconds] - ライブマイグレーションカウンターが N 秒を超えると、ゲスト仮想マシンが強制的にサスペンドします。ライブマイグレーションでのみ使用できます。タイムアウトが開始されると、一時停止されたゲスト仮想マシンで移行が続行されます。
  • --dname [newname] - 移行中にドメインの名前を変更するために使用されますが、通常は省略できます。
  • --xml [filename] - 指定されたファイル名を使用して、宛先で使用する別の XML ファイルを提供できます。このファイル名は、基となるストレージへのアクセスで、ソースと宛先の名前の相違を考慮するなど、ホスト固有のドメイン XML の部分にさらに多くの変更を加えます。このオプションは通常、省略されます。
  • --migrate-disks [disk_identifiers] - このオプションを使用して、移行中にコピーするディスクを選択できます。これにより、特定のディスクをコピーすることが望ましくない場合 (コピー先にディスクがすでに存在する場合や、不要になった場合など) に、より効率的なライブマイグレーションが可能になります。[disk_identifiers] は、ドメイン XML ファイルの <target dev= /> 行にある引数で識別される、移行するディスクのコンマ区切りのリストに置き換える必要があります。
また、次のコマンドも役に立ちます。
  • virsh migrate-setmaxdowntime [domain] [downtime] - 別のホストにライブマイグレーションされているドメインで許容されるダウンタイムの上限を設定します。指定されたダウンタイムはミリ秒単位で表されます。指定するドメインは、移行するドメインと同じである必要があります。
  • virsh migrate-compcache [domain] --size - ライブマイグレーション中に繰り返し転送されるメモリーページを圧縮するために使用されるキャッシュのサイズ (バイト) を設定または取得します。--size を使用しないと、圧縮キャッシュの現在のサイズが表示されます。--size を使用し、バイト単位で指定すると、ハイパーバイザーは、指定されたサイズに合わせて圧縮を変更するように求められます。これに続いて、現在のサイズが表示されます。--size 引数は、ドメインがライブマイグレーション中に、マイグレーションの進捗状況と、domjobinfoから取得される圧縮キャッシュミスの数の増加への反応として使用されることになっています。
  • virsh migrate-setspeed [domain] [bandwidth] - 別のホストに移行される指定されたドメインの移行帯域幅を Mib /秒で設定します。
  • virsh migrate-getspeed [domain] - 指定されたドメインで使用可能な最大移行帯域幅を Mib /秒で取得します。
詳細は、 移行の制限 または virsh の man ページを参照してください。