第2章 静的インスタンスの移行方法

本項には、静的なインスタンス (稼働していないインスタンス) を同じ OpenStack クラウド内にあるハイパーバイザー間、または複数の OpenStack 環境 (プロジェクト) 間で移行する手順について記載します。

2.1. 前提条件

  • コマンドラインでクラウド環境へアクセスできること。移行手順のすべてを Dashboard で実行できないため、本記事での手順はすべてコマンドラインで実行します。
  • ユーザーおよびパスワードの情報 (管理者ユーザーまたはインスタンスのプロジェクトへのアクセス権があるエンドユーザーのいずれか)。コマンドを実行するためには、まずユーザーの認証情報の変数を読み込む必要があります。以下に例を示します。

    # source ~/keystonerc_admin

    デフォルトの Red Hat OpenStack Platform 設定では、エンドユーザーによるインスタンスの移行が可能です。ただし、クラウド管理者がこの設定を変更して、管理者ユーザーしかインスタンスの移行ができないようにしている可能性があります。

警告

現在、CPU ピニングを使用するように設定されているインスタンスは移行できません。この問題に関する詳しい情報は、「Instance migration fails when using cpu-pinning from a numa-cell and flavor-property "hw:cpu_policy=dedicated"」のソリューションを参照してください。

2.2. 環境またはプロジェクト間の移行

スナップショットとは、インスタンスの特定の状態をキャプチャーしたイメージのことです。異なる OpenStack 環境間、または同じ環境内のプロジェクト間でインスタンスを移行するために、スナップショットを使用することができます。

注記

スナップショットは、同じプロジェクト内に新規インスタンスを作成するためにテンプレートとして使用することも可能です。この操作ではスナップショットをダウンロードする必要がないため、Dashboard の プロジェクト > コンピュート > インスタンス を使用してください。

  • インスタンスが停止している場合は、下向きの三角印をクリックしてスナップショットの作成 を選択します。
  • インスタンスが実行中の場合は、スナップショットの作成 をクリックします。

作成したイメージは新規インスタンスのベースとして使用することができます。

スナップショットを作成します。

  1. インスタンスの一覧を表示して、対象のインスタンスが表示されていることを確認します。

    # nova list
    +--------------------------------------+--------------+--------+------------+-------------+--------------------------------+
    | ID                                   | Name         | Status | Task State | Power State | Networks                       |
    +--------------------------------------+--------------+--------+------------+-------------+--------------------------------+
    | 39e9be81-a4b9-4158-a066-0e8d32e1698a | DemoInstance | ACTIVE | -          | Running     | private=10.0.0.7, 10.64.19.198 |
    +--------------------------------------+--------------+--------+------------+-------------+--------------------------------+
    注記

    インスタンスをシャットダウンする必要はありません。Compute サービスにより、スナップショットの作成前に、全データが確実にフラッシュされます。

  2. スナップショットを作成します。以下のコマンドでは、DemoInstance-Snap が新規スナップショットの名前です。

    # nova image-create DemoInstance DemoInstance-Snap

    このスナップショットは、自動的にユーザーのプロジェクトに割り当てられます。

  3. Image サービスクライアントを使用して、作成したスナップショットを表示します。

    # glance image-list
    +--------------------------------------+-----------------------+-------------+------------------+-----------+--------+
    | ID                                   | Name                  | Disk Format | Container Format | Size      | Status |
    +--------------------------------------+-----------------------+-------------+------------------+-----------+--------+
    | 68509457-38e5-4ddc-b599-fd91ad90d0c6 | cirros                | qcow2       | bare             | 13147648  | active |
    | 36c8c18e-8af8-4e9c-bb61-2393d2df365e | RHEL6.5-Guest         | qcow2       | bare             | 320798720 | active |
    | aa058b81-812f-40bc-90c1-84e8809647c7 | DemoInstance-Snap     | qcow2       | bare             | 19595264  | active |
    +--------------------------------------+-----------------------+-------------+------------------+-----------+--------+
  4. イメージ ID を使用してスナップショットをダウンロードします。新規ファイルには、どのような名前でも使用できます。

    # glance image-download --file DemoInstance-Snap.qcow2 DemoInstance-Snap

スナップショットをインポートします。

  1. 新規ファイルを新規ホストにコピーします。
  2. 新しいクラウド環境またはプロジェクトで、スナップショットを使用して新規イメージを作成します。

    # glance image-create --file ./DemoInstance-Snap.qcow2 --name DemoInstance-Image --container-format bare --disk-format qcow2 --is-public True
    +------------------+--------------------------------------+
    | Property         | Value                                |
    +------------------+--------------------------------------+
    | checksum         | c9594641975e9c21297c6eb55ed1781f     |
    | container_format | bare                                 |
    | created_at       | 2014-11-03T01:01:15                  |
    | deleted          | False                                |
    | deleted_at       | None                                 |
    | disk_format      | qcow2                                |
    | id               | ed8db035-0bd1-4ada-a122-ba4c1cb9a550 |
    | is_public        | True                                 |
    | min_disk         | 0                                    |
    | min_ram          | 0                                    |
    | name             | DemoInstance-Image                   |
    | owner            | 50e7c00643d44ec3b6c7d191b9c7e180     |
    | protected        | False                                |
    | size             | 19070976                             |
    | status           | active                               |
    | updated_at       | 2014-11-03T01:01:15                  |
    | virtual_size     | None                                 |
    +------------------+--------------------------------------+
  3. インスタンスの割り当てが可能なプライベートネットワークを特定します。アクセス可能なネットワークは、クラウドの環境やユーザーのパーミッションにより異なります。アクセス可能なネットワークをすべて表示するには、以下のコマンドを実行します。

    # neutron net-list
  4. 新規作成したイメージを使用して、新しいインスタンスを起動します。

    # nova boot --flavor m1.small --image DemoInstance-Image --nic net-id=myNET myMigratedInstance
    +--------------------------------------+----------------------------------------------+
    | Property                             | Value                                        |
    +--------------------------------------+----------------------------------------------+
    | OS-DCF:diskConfig                    | MANUAL                                       |
    | OS-EXT-AZ:availability_zone          | nova                                         |
    | OS-EXT-SRV-ATTR:host                 | -                                            |
    | OS-EXT-SRV-ATTR:hypervisor_hostname  | -                                            |
    | OS-EXT-SRV-ATTR:instance_name        | instance-00000017                            |
    | OS-EXT-STS:power_state               | 0                                            |
    | OS-EXT-STS:task_state                | scheduling                                   |
    | OS-EXT-STS:vm_state                  | building                                     |
    | OS-SRV-USG:launched_at               | -                                            |
    | OS-SRV-USG:terminated_at             | -                                            |
    | accessIPv4                           |                                              |
    | accessIPv6                           |                                              |
    | adminPass                            | fsAwVTNB4wiP                                 |
    | config_drive                         |                                              |
    | created                              | 2014-11-03T01:07:10Z                         |
    | flavor                               | m1.small (2)                                 |
    | hostId                               |                                              |
    | id                                   | 7d904177-b208-489c-a95c-cb06401f207a         |
    | image                                | DemoInstance-Image (ed8db035-0bd1-4ada-a122-ba4c1cb9a550) |
    | key_name                             | -                                            |
    | metadata                             | {}                                           |
    | name                                 | myMigratedInstance                           |
    | os-extended-volumes:volumes_attached | []                                           |
    | progress                             | 0                                            |
    | security_groups                      | default                                      |
    | status                               | BUILD                                        |
    | tenant_id                            | 50e7c00643d44ec3b6c7d191b9c7e180             |
    | updated                              | 2014-11-03T01:07:10Z                         |
    | user_id                              | f0d5c7a4683a462a9946705f671be463             |
    +--------------------------------------+----------------------------------------------+
    注記

    新規インスタンスには、イメージのオペレーティングシステムとデータをサポートするのに十分なストレージとメモリーが設定されたフレーバーを割り当てる必要があります。Red Hat Enterprise Linux ゲストイメージには、少なくとも m1.small が必要です。フレーバーの値を表示するには、以下のコマンドを実行します。

    # nova flavor-list
  5. Compute の一覧でインスタンスを確認します。

    # nova list
    +--------------------------------------+--------------------+---------+------------+-------------+----------------------------------------------+
    | ID                                   | Name               | Status  | Task State | Power State | Networks                                     |
    +--------------------------------------+--------------------+---------+------------+-------------+----------------------------------------------+
    | 7d904177-b208-489c-a95c-cb06401f207a | myMigratedInstance | ACTIVE  | -          | Running     | private_network=192.168.200.19               |
    +--------------------------------------+--------------------+---------+------------+-------------+----------------------------------------------+

2.3. ハイパーバイザー間の移行

同じ OpenStack 環境内のコンピュートノード間で、インスタンスを移動する場合には、単に nova migrate というコマンドを SSH 設定と合わせて使用するだけで、ノードの通信を確保できます。

2.3.1. ノード間の SSH トンネリングの設定

警告

Red Hat では、特定の libvirt セキュリティー戦略は推奨していません。SSH トンネリングのステップは、ユーザー向けの参考情報としてのみ記載しています。SSH トンネリングを設定できるのは root アクセスのあるユーザーのみとなります。

SSH トンネリングを使用してノード間でインスタンスを移行する場合、または分散環境でインスタンスをリサイズする場合には、各ノードに SSH 鍵認証を設定し、Compute サービスが SSH を使用してディスクを他のノードに移動できるようにする必要があります。たとえば、複数のコンピュートノードで同じ SSH 鍵を使用して通信可能な状態を確保することが可能です。

注記

Compute サービスが異なるノード間でインスタンスを移行できない場合には、そのインスタンスを元のホストに送り返すように試みます。このような移行の失敗を回避するには、/etc/nova/nova.conf ファイルで「allow_migrate_to_same_host=True」と設定されていることを確認してください。

コンピュートノード間でのキーペアの共有方法:

  1. 両ノード上で root として、nova をログインユーザーに設定します。

    # usermod -s /bin/bash nova
  2. 最初の Compute ノードで nova ユーザーのキーペアを生成します。

    # su nova
    $ ssh-keygen
    $ echo 'StrictHostKeyChecking no' >> /var/lib/nova/.ssh/config
    $ cat /var/lib/nova/.ssh/id_rsa.pub >> /var/lib/nova/.ssh/authorized_keys
    $ exit

    id_rsaid_rsa.pub のキーペアが /var/lib/nova/.ssh 内に生成されます。

  3. root として、2 番目のコンピュートノードに作成したキーペアをコピーします。

    # scp /var/lib/nova/.ssh/id_rsa computeNodeAddress:~/
    # scp /var/lib/nova/.ssh/id_rsa.pub computeNodeAddress:~/
  4. 2 番目のコンピュートノードで、root として、コピーしたキーペアのパーミッションを nova に戻してから、キーペアを SSH に追加します。

    # chown nova:nova id_rsa
    # chown nova:nova id_rsa.pub
    # su nova
    $ mkdir -p /var/lib/nova/.ssh
    $ cp id_rsa /var/lib/nova/.ssh/
    $ cat id_rsa.pub >> /var/lib/nova/.ssh/authorized_keys
    $ echo 'StrictHostKeyChecking no' >> /var/lib/nova/.ssh/config
    $ exit
  5. nova ユーザーが各ノードにパスワードを入力せずにログインできることを確認します。

    # su nova
    $ ssh computeNodeAddress
    $ exit
  6. 両ノード上で root として、libvirt と Compute サービスを再起動します。

    # systemctl restart libvirtd.service
    # systemctl restart openstack-nova-compute.service

2.3.2. インスタンスの移行

以下の手順のコマンドは、すべて OpenStack コントローラーノードで実行するようにしてください。

  1. インスタンスをシャットダウンします。

    # nova stop DemoInstance
  2. インスタンスを移行します。

    # nova migrate DemoInstance
    注記

    Computer サービスは、サービスの設定に基づいて (重みとフィルターのバランスを取って) 移行先のコンピュートノードを選択します。

  3. インスタンスの状態が VERIFY_RESIZE (状態の確認コマンドは nova show) に変更されるまで待機してから、以下のように移行を確定します。

    # nova resize-confirm DemoInstance