移行実務 | VMware および Hyper-V から OpenStack への移行

移行実務 | VMware および Hyper-V から OpenStack への移行

  [[329658]]

導入

現在、5 年間稼働している VMware の完全なセットを保有しています。サーバーが徐々に廃棄されるにつれて、すべての VMware 仮想ホストを OpenStack に移行することにしました。 OpenStack は Kolla を使用してデプロイされた Train バージョンの高可用性環境であり、Ceph は独立してデプロイされた Nautilus バージョンです。

現在、220 台を超える VMware 仮想マシン (Linux および Windows) を VMware ESXi から OpenStack に移行する必要があります。 VMware ホストに加えて、少数の Hyper-V 仮想ホストも移行する必要があります。この記事では、仮想マシンの移行に使用する手順とコマンドについて説明します。これらの手順とコマンドを使用すると、移行を自動化するスクリプトを簡単に作成できます。

この移行には V2V のみが含まれ、P2V は含まれません。

比較すると、libguestfs-tools と qemu-img convert の新しいバージョンは VMDK ファイルを適切に処理できるため (ツールの古いバージョンにはいくつか問題があります)、移行はより効率的です。移行プロセスにより、VMDK から VMDK (単一ファイル) への変換手順と VMDK から RAW への変換手順が不要になります。これらの手順を減らすことで、移行速度が 2 倍になります。

この記事で紹介したコマンドの中には非常に強力なものがあり、Ceph および OpenStack の設定やデータを破壊する可能性があるため、移行プロセス中に使用するコマンドには注意してください。したがって、関連するコマンドは注意して使用してください。

グローバルステップ

  1. VirtIO ドライバーのインストール
  2. 拡張パーティション(オプション)
  3. 仮想マシンをカスタマイズする(オプション)
  4. Cinderボリュームの作成
  5. VMDK を Ceph に変換する
  6. Neutron ポートを作成する (オプション)
  7. OpenStack でのインスタンスの作成と起動

テクニカル指標

移行に使用されるインフラストラクチャの仕様は次のとおりです。

  • クラウドプラットフォーム: OpenStack Train
  • クラウドストレージ: Ceph
  • Windows インスタンス: Windows Server 2012R2 から 2016
  • Linux インスタンス: RHEL5/6/7、SLES、Debian、Ubuntu
  • ESXi からの VMDK ファイルのみを変換できます。qemu-img を使用して VMware Player からの VMDK ファイルを変換することはできません。
  • 暗号化されたディスクを使用しない移行
  • OpenStackはインスタンスにVirtIO準仮想化ハードウェアを提供する

必要

Linux「移行サーバー」(Ubuntu 14.04/16.04/18.04、CentOS6/CentOS7、Redhat6/Redhat7、Fedora19-22 が使用可能)であり、次の要件を満たす必要があります。

  • サーバー オペレーティング システム (以下で正常にテスト済み):
  • RHEL6 (RHEL7 には「libguestfs-winsupport」がありません)
  • Fedora 19、20、21、22
  • Ubuntu 14.04、16.04、18.04
  • 実行中の OpenStack 環境へのネットワーク接続。 「スーパー管理者」権限が必要なので、パブリックインターネットを経由しないことをお勧めします。通常、ローカル ネットワーク接続はインターネット接続よりも高速です。 10Gネットワ​​ークであることが保証されればさらに良いでしょう。
  • ディスクを変換し、KVM でインスタンスを実行するのに十分なハードウェア パフォーマンスと機能 (サイズは、一定期間内に移行するインスタンスによって異なりますが、SSD が最適です)。

私たちが使用したサーバーは、8 コアの Intel Xeon E3-1230 @ 3.3 GHz、64 GB RAM、8 台の 1 TB SSD で構成されており、1 時間あたり 500 GB を超えるデータを移行できました。ただし、これは実際にはインスタンスのディスク容量の使用量によって異なります。私の古い会社用ラップトップ (Core i5、8GB RAM、古い 4500rmp HDD) も動作しますが、パフォーマンスは明らかにひどいです。

移行前に次の要件を満たす必要があります。

  • Linux移行ホスト上でローカルsudo(ルート)権限を持っている
  • QEMU/KVM ホスト
  • OpenStack 権限 (Keystone を通じて取得)
  • Cephの対応する操作権限
  • OpenStack APIとCephへの無制限のネットワークアクセス
  • VirtIO ドライバー (Red Hat、Fedora などからダウンロード可能)
  • パッケージ (すべてのパッケージはデフォルトのディストリビューション リポジトリに存在する必要があります):
    • 「python-cinderclient」(クラウド ディスク用)
    • 「python-keystoneclient」(OpenStack への認証用)
    • 「python-novaclient」(コントロールインスタンス)
    • 「python-neutronclient」(ネットワークを制御するため)
    • 「python-httplib2」(Web サービスと通信できるようにするため)
    • 「libguestfs-tools」(ディスクファイルにアクセスするためのもの)
    • 「libguestfs-winsupport」(RHEL ベースのシステムのみに別途インストールする必要があります)
    • 「libvirt-client」(KVM を制御)
    • 「qemu-img」(ディスクファイルの変換)
    • 「ceph」(仮想ディスクをCephにインポート)
    • 「vmware-vdiskmanager」(VMDK ディスクの拡張に使用、VMware サイトからダウンロード可能)

ステップ

1. VirtIOドライバーを挿入する

1.1 Windows Server 2012

Windows Server 2012 および Windows 8.0 以降では、ドライバーは Windows によって保護されます。オフラインの Windows ディスクにドライバーを挿入するのは非常に困難です。 Windows Server 2012 は、デフォルトでは VirtIO ハード ディスクから起動できません。そこで、次の手順を実行して、VirtIO ドライバーを Windows にインストールしました。これらの手順は、テスト済みのすべての Windows バージョン (2008/2012/2016) で機能するはずです。

  1. 新しい KVM インスタンスを作成します。 Windows vmdk ディスクを IDE ディスクとして作成してください。ネットワーク カードは VirtIO デバイスである必要があります。
  2. Windows が VirtIO ドライバーをインストールできるように、追加の VirtIO ディスクを追加します。
  3. もちろん、ドライバーを含む VirtIO ISO またはフロッピー ドライブを追加する必要があります。また、virt-copy-in を使用してドライバー ファイルを挿入し、必要なレジストリ設定を挿入して、ドライバーを自動的にインストールすることもできます。
  4. 仮想マシンを起動し、Windows が新しい VirtIO ハードウェアを検出するまで約 2 分間待ちます。新しく検出されたハードウェアのドライバーをインストールします。ドライバーがインストールされていないデバイスがないことを確認します。
  5. システムをシャットダウンし、余分な VirtIO ディスクを取り外します。
  6. Windows vmdk ディスクを VirtIO ディスク (IDE) として再定義し、インスタンスを起動します。これで正常に起動するはずです。仮想マシンをシャットダウンします。

1.2 Linux (カーネル 2.6.25 以降)

Linux カーネル 2.6.25 以降には、VirtIO ハードウェアのサポートが組み込まれています。したがって、VirtIO ドライバーを挿入する必要はありません。 VirtIO ハードウェアを使用して新しい KVM 仮想マシンを作成して起動します。 LVM パーティションが自動的にマウントされない場合は、次のコマンドを実行して修復します。

  1. マウント -o 再マウント、rw /
  2. スキャン
  3. vgscan
  4. リブート

(再起動後、すべての LVM パーティションがマウントされ、Linux が正常に起動するはずです)

完了したら仮想マシンをシャットダウンします。

1.3 Linux (カーネル 2.6.25 以前)

一部の Linux ディストリビューションでは、古いカーネル バージョン用の VirtIO モジュールが提供されています。

  • Red HatはRHEL 3.9以降にVirtIOサポートを提供します
  • SuSeはSLES 10 SP3以降にVirtIOサポートを提供します

古いカーネルの手順は次のとおりです。

  1. KVM インスタンスを作成します。
  2. Linux (カーネル 2.6.25 より前): IDE ハードウェアを使用して KVM インスタンスを作成し、起動します (KVM では IDE コントローラーを 1 つしか構成できないため、ディスクは 4 つまでに制限されます)。この移行では 4 台以下のディスクを持つ Linux VM のみがあったため、SCSI または SATA は試しませんでした。 Linux は問題なく起動するはずです。
  3. virtio モジュールをロードします (ディストリビューション固有): RHEL (古いバージョン): https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/ch10s04.html および SLES 10 SP3 システム: https://www.suse.com/documentation/opensuse121/book_kvm/data/app_kvm_virtio_install.html
  4. インスタンスをシャットダウンします。
  5. すべてのディスクを VirtIO ディスクに変更し、インスタンスを起動します。これで正常に起動するはずです。
  6. 完了したら仮想マシンをシャットダウンします。 Red Hat については、https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/ch10s04.html を参照してください。SuSe については、https://www.suse.com/documentation/opensuse121/book_kvm/data/app_kvm_virtio_install.htm を参照してください。

1.4 Windows Server 2008 (および以前のバージョン)推奨されません

2012 より前のバージョンの Windows の場合は、次の手順に従ってドライバーを挿入することもできます。

  1. 適切な Windows バージョンのすべての VirtIO ドライバー ファイルを C:Drivers にコピーします。 virt-copy-in ツールを使用して、ファイルとフォルダーを仮想ディスクにコピーできます。
  2. *.sys ファイルを %WINDIR%system32%drivers にコピーします (正しいディレクトリを見つけるには virt-ls を使用することをお勧めします。Windows では大文字と小文字の区別に注意してください)。 virt-copy-in ツールを使用して、ファイルとフォルダーを仮想ディスクにコピーできます。
  3. Windows レジストリはハードウェア ID とドライバーを組み合わせる必要がありますが、VirtIO ドライバーはデフォルトでは Windows にインストールされていません。したがって、私たち自身でそれを行う必要があります。 virt-win-reg を使用してレジストリ ファイルを挿入できます。すべての VirtIO ドライバーを C:Drivers 以外の場所にコピーする場合は、最後の行の "DevicePath" 変数を変更する必要があります (これを行う最も簡単な方法は、外部の Windows システムで変更を行い、移行した VM で使用するためにレジストリ ファイルをエクスポートすることです)。

レジストリ ファイル (VirtIO ストレージ情報のみを保持するため、mergeviostor.reg とも呼ばれます)。

  1. Windows レジストリ エディター バージョン 5.00
  2.  
  3. [HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasepci#ven_1af4&dev_1001&subsys_00000000]
  4. "ClassGUID" = "{4D36E97B-E325-11CE-BFC1-08002BE10318}" "サービス" = "viostor"  
  5. [HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasepci#ven_1af4&dev_1001&subsys_00020000]
  6. "クラスGUID" = "{4D36E97B-E325-11CE-BFC1-08002BE10318}"  
  7. 「サービス」 = 「viostor」  
  8.  
  9. [HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasepci#ven_1af4&dev_1001&subsys_00021AF4]
  10. "ClassGUID" = "{4D36E97B-E325-11CE-BFC1-08002BE10318}" "サービス" = "viostor"  
  11. [HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasepci#ven_1af4&dev_1001&subsys_00021AF4&rev_00]
  12. "クラスGUID" = "{4D36E97B-E325-11CE-BFC1-08002BE10318}"  
  13. 「サービス」 = 「viostor」  
  14.  
  15. [HKEY_LOCAL_MACHINESYSTEMControlSet001ControlCriticalDeviceDatabasepci#ven_1af4&dev_1004&subsys_00081af&rev_00]
  16. "ClassGUID" = "{4D36E97B-E325-11CE-BFC1-08002BE10318}" "サービス" = "viostor"  
  17. [HKEY_LOCAL_MACHINESYSTEMControlSet001Servicesviostor]
  18. "エラーコントロール" =dword:00000001
  19. 「グループ」 = 「SCSI ミニポート」  
  20. 「開始」 =dword:00000000
  21. 「タグ」 =dword:00000021
  22. 「タイプ」 =dword:00000001
  23. "ImagePath" = "system32driversviostor.sys"  
  24.  
  25. [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion]
  26. "デバイスパス" = 16 進数 (2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,6 9,00,6e,00,66,00,3b,00,63,00,3a,00,5c,00,44,00,72,00,69,00,76,00,65,00,72,00,73,00,00,00

これらの手順を実行すると、Windows は BSOD なしで VirtIO ディスクから起動するはずです。

Windows の起動時に、他のすべてのドライバー (ネットワーク、バルーンなど) も自動的にインストールされます。

参照: https://support.microsoft.com/en-us/kb/314082 (Windows XP 用に書かれていますが、Windows 2003 および 2008 でも使用できます)。

参照: http://libguestfs.org/virt-copy-in.1.html および http://libguestfs.org/virt-win-reg.1.html

2. パーティションを拡張する(オプション)

移行された一部の Windows サーバーでは、Windows パーティション上の使用可能なディスク領域が限られていました。新しい管理アプリケーションをインストールするための十分なスペースがありません。したがって、vmware-vdiskmanager ツールを使用してディスクのサイズを増やすことができます。その後、OS からパーティションを拡張する必要があります。次の手順で仮想マシンをカスタマイズするときにこれを実行できます。

3. 仮想マシンをカスタマイズする(オプション)

OpenStack で実行できるようにオペレーティング システムを準備するには、一部のソフトウェア (VMware Tools やドライバーなど) をアンインストールし、パスワードを変更し、新しい管理ツールをインストールするなどする必要がある場合があります。スクリプトを作成することで、これを自動化できます。 virt-copy-in コマンドを使用して、スクリプトとファイルを仮想ディスクに挿入できるはずです。

3.1 Linuxでスクリプトを自動的に起動する

移行する必要のある Linux サーバーは少数であったため、Linux でスクリプトを手動で開始しました。そして簡単に自動化できます。

3.2 Windowsでスクリプトを自動的に起動する

RunOnce メソッドはすべての Windows バージョンで機能するため、Windows の起動時にスクリプトを開始するように選択できます。レジストリ ファイルを挿入することで、スクリプトを RunOnce に組み込むことができます。 RunOnce スクリプトは、ユーザーがログオンしている場合にのみ実行されます。したがって、Windows 管理者のユーザー名、パスワード、および AutoAdminLogon も値「1」で挿入する必要があります。 Windows が起動すると、定義したユーザーで自動的にログインします。完了したら、必ず仮想マシンをシャットダウンしてください。

Windows に自動的にログオンし (ユーザー「Administrator」、パスワード「Password」を使用)、C:StartupWinScript.vbs を起動するサンプル レジストリ ファイル:

  1. Windows レジストリ エディター バージョン 5.00
  2.  
  3. [HKEY_LOCAL_MACHINEソフトウェアMicrosoftWindows現在のバージョンRunOnce]
  4. 「スクリプト」 = 「cscript C:StartupWinScript.vbs」  
  5. 「パラメータ」 = 「」  
  6.  
  7. [HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionWinlogon]
  8. 「自動管理者ログオン」 = 「1」  
  9. 「ユーザー名」 = 「管理者」  
  10. 「パスワード」 = 「パスワード」  

4. Glanceイメージを作成する

現在の OpenStack プラットフォームでは、ストレージとイメージのバックエンドとして Ceph を使用しています。クラウド ディスクではなくイメージから起動してクラウド ホストを作成する場合は、glance-api を介してイメージをアップロードする必要があります。 vMware 上のクラウド ホストのシステム ディスク データ サイズは約 200G です。大きな RAW イメージまたは qcow2 イメージをアップロードする場合は、glance-api を介してアップロードする必要があるため、アップロード速度が遅くなります。この場合、まず Ceph にアップロードしてから、Glance で作成することができます。 Ceph バックエンドへの接続は通常 10G 光ポートであるため、アップロード速度は非常に速くなります。

具体的な手順は次のとおりです。

  • イメージIDとしてランダムなUUIDを生成する
  1. uuid=$(uuidgen)
  • rbdを介してイメージをアップロードし、対応するスナップショットとスナップショット保護を追加します。
  1. rbd -p images --image-format 2 イメージファイルをインポート $uuid  
  2. rbd -p イメージスナップ作成  --snap スナップ $uuid  
  3. rbd -p イメージ スナップ保護--snap スナップ $uuid  
  • Glanceはイメージを作成し、それをrbdイメージに関連付けます
  1. 一目でわかるイメージ-作成  --os-image-api-version 1 --id $uuid --name image_name --disk-format raw --container-format bare --is-public false --location rbd://$(ceph fsid)/images/$uuid/snap  

5. シンダーボリュームを作成する

インポートするディスクごとに、Cinder ボリュームを作成する必要があります。次のステップで Ceph ブロックデバイスを削除 (および ceph 直接インポートで再作成) するため、Cinder コマンドで指定するボリューム サイズは重要ではありません。 Cinder と Ceph 間のリンクを作成するために、Cinder ボリュームのみを作成します。

ただし、ボリュームはインポートする予定のディスクと同じサイズにする必要があります。これは、OpenStack 管理インターフェース (Horizo​​n) を持つユーザーにとっては簡単です。

次のコマンドを使用して cinder ボリュームを作成します (サイズは GB 単位です。cinder type-list で使用可能なボリューム タイプを確認できます)。

  1. シンダー作成  --display-name <ディスク名> <サイズ> --volume-type <ボリュームタイプ>  

次の手順で必要になるので、ボリューム ID をメモしておきます (次のコマンドを使用してボリューム ID を見つけることもできます)。

  1. 燃え殻リスト | grep <ディスク名>

Cinder コマンド情報: http://docs.openstack.org/cli-reference/content/cinderclient_commands.html

6. VMDKをCephに変換する

Cinder ボリュームが作成されると、VMDK ディスク ファイルを RBD ブロック (Ceph) に変換できます。ただし、最初に実際の Ceph ディスクを削除する必要があります。必ず正しい Ceph ブロックデバイスを削除してください。

まず、ディスクがどの Ceph プールに存在するかを知る必要があります。次に、Ceph からボリュームを削除します (volume-id は、前の手順「Cinder ボリュームの作成」で記録したボリューム ID です)。

  1. rbd -p <ceph_pool> rm volume-<ボリュームID>

次のステップは、VMDK ファイルを Ceph 上のボリュームに変換することです (すべての ceph パラメータはパフォーマンスを向上させるためのものです。vmdk_disk_file 変数は vmdk ファイルへのフルパスです。volume-id** は、前に書き留めた ID です)。

  1. qemu-img convert -p <vmdk_disk_file> -O rbd rbd:<ceph_pool>/volume-<ボリュームID>

仮想マシンのすべての仮想ディスクに対してこれを実行します。

気をつけて! rbd コマンドは非常に強力です (意図したよりも多くの Ceph 上のデータが破壊される可能性があるため、注意して使用してください)。

7. Neutron ポートを作成する (オプション)

場合によっては、固定 IP アドレスまたは MAC アドレスを設定する必要があります。これを行うには、Neutron を使用してポートを作成し、次のステップ (OpenStack でのインスタンスの作成および起動時の関連付け) でそのポートを使用します。まず、network_name (nova net-list) が何であるかを知っておく必要があります。そのためには、「Label」を使用する必要があります。必須は network_name のみです。追加することでセキュリティ グループを追加することもできます。

  1. --security-group <セキュリティグループ名>  

このパラメータはセキュリティ グループごとに追加します。つまり、6 つのセキュリティ グループを追加する場合は、このパラメータを 6 回追加する必要があります。

  1. 中性子ポート作成  --fixed-ip ip_address=<IPアドレス> --mac-address <MACアドレス> <ネットワーク名> --name <ポート名>  

次のステップで必要になるので、Neutron ポートの ID をメモしておきます。

8. OpenStackでインスタンスを作成して起動する

これで、Cinder ボリュームとオプションで Neutron ポートを持つインスタンスを作成する準備が整いました。起動ディスクのボリューム ID をメモします。ここで、選択するフレーバーの ID を知る必要があります。目的のフレーバーのフレーバー ID を取得するには、nova flavor-list を実行します。

これで、新しいインスタンスを作成して起動できます。

  1. nova boot <インスタンス名> --flavor <フレーバーID> --boot-volume <ブートボリュームID> --nic port-id=<neutronポートID>  

インスタンス ID をメモします。次に、次のコマンドを実行して、インスタンスに追加のディスクを追加します (ボリュームを追加する場合)。

  1. nova volume-attach <インスタンスID> <ボリュームID>

要約する

特に Windows では、移行プロセス中に障害が発生する可能性があります。ドライバーのバージョンが間違っていると、Windows システムでブルー スクリーンが発生する可能性が高くなるため、ドライバーを正しくインストールすることが非常に重要です。より大きなデータ ディスクの場合、このケースでは Ceph への直接アップロードを使用して、同じサイズの空のボリュームを置き換えます。 Image Glance 経由でアップロードしてからクラウド ディスクを作成すると、数倍の時間がかかります。したがって、Ceph を合理的かつ柔軟に使用すると、移行プロセスを大幅に高速化できます。

この記事では主に操作手順について説明します。バッチ操作の場合は、対応するオーケストレーション スクリプトを記述してバッチ移行を実行できます。スクリプトを実行する前に必ず徹底的にテストしてください。

<<:  Alibaba Cloud + DingTalk = PC + Windows? DingTalkは未来志向のオペレーティングシステムを目指しています

>>:  MongoDBは分散データソースを統合し、クラウドデータベースはデータレイクと検索機能をサポートします

推薦する

スラムダンクの桜木から学んでSEOのプロになろう

最近また「スラムダンク」にハマっています。最高です!主人公の桜木花道の、何より目を引く、元気いっぱい...

初心者ウェブマスターがSEOトレーニングの経験をシェア

正直に言うと、私がウェブマスター業界に関わるようになったのはごく最近のことです。周りの同僚のほとんど...

web3k 年間10ドルのウェブホスティング

web3k は、多くの人がよく知っている Windows VPS トライアルを以前に開始した、定評の...

Kubernetes クラスターを保護するための 3 つの重要な要素

コンテナベースのテクノロジーが急速に採用されるにつれて、組織は Kubernetes クラスターのセ...

CtripとQunarが合併し、中国最大のオンライン旅行会社に

10月26日夜のニュース、Ctrip.comは今晩、Baiduとの株式交換取引に合意したと発表した。...

A5SEO プロジェクト マネージャー: Baidu リソース プラットフォームで最も気になる点について詳しく説明

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています過去2年間...

インターネット編集長ペル氏:電子メールは依然としてキラーアプリ

インターネット評論家のデイブ・ペル氏(写真提供:テンセント・テクノロジー)テンセントテクノロジーニュ...

企業はWeiboマーケティングをうまく行うにはどうすればよいのでしょうか?

会社の社長はずっとWeiboを特別に愛しており、最近ついにWeiboマーケティングに人材とリソースを...

何?ネットワーク カードも仮想化できますか?

01 macvlan の紹介前回の記事では、tap/tun、veth-pair、bridge といっ...

SEO のエキスパートと SEO の敗者を分ける 8 つの領域

SEO 業界は標準化されていません。SEO エンジニアの中には、高額の給与を稼ぎ、大規模な Web ...

ロイター:中国の電子商取引企業がアリババと共存する方法

はじめに:ロイターは本日、「生き残った馬会長:中国アリババの影に生きる」と題する記事を掲載し、中国の...

Apple Cloudが貴州省に移転。クラウドコンピューティング業界の現状はどうでしょうか?

2018年の初め、クラウドコンピューティングをめぐる戦いが再び始まろうとしているようだ。昨年初めの厦...

基本概念、アーキテクチャ、新バージョンへのアップグレード - Kafka 知識システム (I)

[[408780]]コンセプトKafka は、LinkedIn によって最初に開発され、Scala ...

#BlackFriday# RCP: 日本 AS9929、年間 19.99 ドル、1G メモリ/1 コア/20g SSD/100G トラフィック/100M 帯域幅

rcp.net はブラックフライデーに日本 VPS のミニチュア版をリリースしました。デフォルトのネ...