web-dev-qa-db-ja.com

KVM LVMからファイルシステムバックエンドへのライブまたはニアライブマイグレーション

私のゲストマシンには2つのパーティションがあります(80GB + 1TB)。どちらもLVM上にあります。最小限のダウンタイムですべてのディスクを別のマシンに転送したい。 ncで別のマシンを転送しました。それは4日かかり、転送中に私のVMはオフになりました。

ダーティページを転送した後、スナップショットを作成してみました。しかし、LVMでのAFAIKは不可能です。ターゲットマシンにLVMセットアップがなく、パーティション化されていない空き領域があります。したがって、ターゲットマシンのディスクはrawファイルイメージである必要があります。

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/vg-datastore/lv-vm-1138'/>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/vg-datastore-sata/lv-vm-1138-2'/>
  <target dev='vdb' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>

ソースホスト:

  • CPU:Intel(R)Xeon(R)CPU D-1520 @ 2.20GHz
  • OS:16.04.1 LTS
  • カーネル:4.2.0-34-generic
  • qemu-kvm:1:2.3 + dfsg-5ubuntu9.2
  • QEMU:2.3.0
  • libvirt:1.2.16

ターゲットホスト:

  • CPU:Intel(R)Xeon(R)CPU D-1520 @ 2.20GHz
  • OS:16.04 LTS
  • カーネル:4.4.0-28-generic
  • qemu-kvm:1:2.5 + dfsg-5ubuntu10.2
  • QEMU:2.5.0
  • libvirt:1.3.1
4
Fırat KÜÇÜK

KVM/libvirtは、VMライブマイグレーションとストレージマイグレーション(シェアードナッシングセットアップ)をサポートしますが、いくつかの制限があります。主な問題は、ストレージプールの構成が異なるため、確信が持てませんlibvirtは、VMイメージを問題なく移行します。

ライブマイグレーション+ストレージコピーを実行するコマンドは次のとおりです。

virsh migrate --live --copy-storage-all --persistent qemu + ssh:// root @/system

このコマンドは、リモートホストへの有効なlibvirtベースの接続があることを前提としています。

仮想ディスクの移行に問題がある場合は、fallocate /dev/vg-datastore/lv-vm-1138 -l 80Gおよび/dev/vg-datastore-sata/lv-vm-1138-2 -l 1Tのようなものを(宛先ホストで)実行して、スタブ宛先仮想ディスクファイルを作成してみてください。

とにかく、ホスト間の違いにより、これはでこぼこ道になる可能性があります。

VMイメージを移行する最も簡単な方法は、 blocksync を使用して、増分ディスクコピーアプローチを使用することです。

  • VMが実行されているときに、宛先ホストに仮想ディスクの最初のコピーを実行します。この最初のコピー一貫性がなく、信頼できないが、次のコピーの「種」として機能する。
  • 適切なタイミングで、VMをシャットダウンし、仮想ディスクの2番目のコピーを実行します。この2番目のコピーは、変更されたブロックのみで、最初のブロックよりもはるかに高速です。
  • 完了したら、仮想ドメインを定義し、宛先ホストでVMを開始します。

リンクされたblocksyncプログラムは、 この元のスクリプト (ちなみに このスクリプト の改良版)に基づく個人的な分岐バージョンであることに注意してください)。私は明らかにコードにNO RESPONSIBILITYを仮定し、徹底的にテストすることを強くお勧めします本番仮想マシン/ディスクファイルで使用する前。いつものように、あなた[〜#〜] [〜#〜]は、何かを行う前に、確認済みの適切なバックアップを持っている必要があります。

EDIT:以下のコメントで提案されているように、ブロックデバイス/仮想イメージファイルを同期する別の優れたソフトウェアは bdsync 。アプローチは基本的に同じです。VMの実行中にディスクファイルの最初の「シード」コピーを作成し、次にVMを停止して、最後の以前、私はbdsync開発者に同様の質問をしました 詳細はここを参照

7
shodanshok