web-dev-qa-db-ja.com

KVMゲストをホストから別のホストに移行するにはどうすればよいですか?

私はKVMゲストを1つのホストから別のホストに移行する必要があります。移行はホットで行う必要はありません。そのストレージは現在、ブリッジされたネットワークアダプターを備えたLVMブロックデバイスによってサポートされています。両方のサーバーのカーネル、libvirt、qemuなどのバージョンが同じです。これを行う最も簡単な方法は何ですか?

これについての私の推測は:

dd the block devices from server A to server B
export the xml VM definition on A, copy it to B
edit the xml to refer to the new physical device names
create the machine referencing that xml file
6
Jeff Shattock

あなたが正しいです。私はこれを数回行いました。私はnetcatを使用して、ネットワーク全体のドライブをイメージ化しました。これは私が使用した方法です:

  1. ターゲット上に論理ボリュームを作成します。ソースボリュームと同じサイズである必要があります。
  2. ターゲットホストでnc -l 1234 | dd of=/dev/<vgname>/<lvname>を実行します。これは、netcatにネットワークポートでリッスンし、すべてを論理ボリュームにパイプするように指示します。
  3. ソースマシンを完全にシャットダウンして、すべてをディスクに書き込みます。
  4. ソースホストでdd if=/dev/<vgname>/<lvname> | nc <targetip> 1234を実行します。これはnetcatにすべてをネットワーク経由でターゲットホストにパイプするように指示します。
  5. 一杯のコーヒーを取りに行きます。ボリュームサイズとネットワーク速度によっては、この処理に数分かかります。
  6. ソースからターゲットに/etc/libvirt/qemu/からxml定義をコピーします。
  7. Xmlファイルのstorage部分と、ネットワークブリッジ名など、他の必要なビットが異なる場合は編集します。
  8. ターゲットでlibvirtを再ロードして、xmlを読み取ります。 /etc/init.d/libvirt-bin reloadはトリックを実行する必要があります(systemdを使用するディストリビューションの場合はsystemctl restart libvirtd
  9. ターゲットホストでマシンを起動します。
9
sybreon

KVM(qemu 1.3以降)にストレージ移行機能が含まれるようになったため、以前の回答で示されたハッカーを実行する必要がなくなりました。 VMを通常どおりに移行するだけです。たとえば、virsh migrate "Guest Name" qemu+ssh://dest-hypervisor/systemまたは、選択したGUIの[Nice]ボタンをクリックします。

8
Michael Hampton

安全ではない接続でマシンをパイプする必要があり、virshを使用したため、私は詳細が異なるやや似たアプローチに従いました。

  1. 「oldserver」のssh-copy id root@newserverを使用して、2つのホスト間でpubkeyを共有します
  2. タゲットに論理ボリュームを作成する
  3. シャットダウンソース
  4. dd if=/dev/<vgname>/<lvname> | ssh root@targethost 'dd of=/dev/<vgname>/<lvname>'を使用して、ボリュームをターゲットホストにパイプします。
  5. xML定義をダンプするvirsh dumpxml <machinename> dump.xml
  6. XMLファイルの転送scp dump.xml root@targethost:/root/
  7. 任意のエディターでファイルを編集します
  8. ターゲットvirsh define dump.xmlでマシンを定義します。マシンはxmlから作成されます。 virsh create machineは使用しないでください。再起動後にマシンを再定義する必要があります。
  9. virsh start machinename

新しいマシンでNAT=のインターネット接続がない場合は、ip-forwardingが有効になっていることを確認してください。

Ubuntuの場合nano /etc/sysctl.confコメント解除net.ipv4.ip_forward=1

0
os_1