lvmsyncを使用して、LVMパーティションにインストールされたKVM仮想マシンを別のサーバーに転送する

こんにちは、Habr!



この短いハウツーでは、lvmsyncユーティリティの使用に関する私の経験を共有したいと思います。



このユーティリティを使用すると、共有ストレージ(非共有ストレージ)を使用せずに、仮想マシンのダウンタイムを最小限に抑えて、あるKVMサーバーから別のKVMサーバーに仮想マシンを転送する問題を解決できます。

仮想マシンがインストールされているLVMパーティション全体を送信します。 LVMスナップショットの魔法は、ダウンタイムを短縮するのに役立ち、インターネットで簡単に情報を見つけることができます。



仮想マシンの移行の概要は次のとおりです。



  1. LVMセクションの写真を撮ります。
  2. VMを停止することなく、ネットワーク上でメインLVMパーティションを転送します。
  3. メインパーティションの転送が終了したら、VMを停止します。
  4. lvmsyncを実行して、ネットワーク経由でスナップショットを転送します。 画像全体が転送されるのではなく、変更されたブロックのみが転送されます。
  5. 新しいサーバーでVMを準備して実行します。


その結果、lvmsyncを使用する場合、仮想マシンのアイドル時間は、メインパーティションのスナップショットで変更されたブロックの転送時間と等しくなります。



プロジェクトページで、lvmsyncの動作とその他の機能について詳しく読むことができます







さらに、システムにsudo権限があり、sshアクセスはキーによって構成され、rootアクセスは拒否されると想定されています。



VM転送を開始しましょう。


インストール:


lvmsyncを機能させるには、Ruby 1.8(以降)、ssh、dmsetupが必要です。

ローカルコンピューターにlvmsyncをダウンロードします。



wget https://github.com/mpalmer/lvmsync.git
      
      





lvmsyncをルートPATHに、たとえば/ usr / bin /にコピーします



リモートサーバー(server2)の準備:


1)lvmsyncをダウンロードしてインストールします。

2)複製されたVMのLVMパーティションを作成します。



 server2# lvcreate vg -n new-virtual -L 16G
      
      





パーティションのサイズは、元のパーティションと同じである必要があります(原則として、元のパーティションよりも大きい場合がありますが、このオプションはテストしていません)。



ローカルサーバーの準備とVMの移動。


さらに、すべてのコマンドは、仮想マシンの移動元のサーバー(server1)で実行する必要があります。



1)定義xmlを作成します。



 server1# virsh dumpxml virtual > virtual.xml
      
      





2)セクションの写真を撮る:



 server1# lvcreate --snapshot -L10G -n virtual-snap /dev/vg/virtual
      
      





警告!
VMの使用強度に応じて、イメージサイズを選択する必要があることに注意してください。 なぜなら メインセクションを転送している間、すべてのデータはスナップショットに「保存」されます。

そして、画像が完全に満たされると、自動的に無効になります。



3)VMを停止せずに、ddを使用してメインパーティションを転送します。



 server1# dd if=/dev/vg/virtual bs=1M | gzip -c | pv -ptrb | ssh me@server2 "gunzip -c | sudo dd of=/dev/vg/new-virtual"
      
      





ここでは、gzipを使用した送信データの圧縮と、pvを使用したデータ転送の進行状況の表示が追加されます。



4)転送が完了したら、仮想マシンを停止します。



 server1# virsh shutdown virtual
      
      





5)マシンが完全に停止したら、lvmsyncを起動して画像を転送します。



 server1# lvmsync --stdout /dev/vg/virtual-snap | ssh me@server2 sudo lvmsync --apply - /dev/vg/new-virtual
      
      





この操作は、スナップショットを新しいサーバーに転送するだけでなく、メインLVMパーティションですぐに保持します。



6)定義xmlをリモートサーバーにコピーします。



 server1# scp virtual.xml me@server2:/home/me/new-virtual.xml
      
      







新しいサーバーでの仮想マシンの準備と起動:





1)必要に応じて、定義xmlを変更します。



2)xmlに基づいて仮想マシンを作成します。



 server2# virsh define new-virtual.xml
      
      





3)仮想マシンを起動し、自動起動に登録します:



 server2# virsh start new-virtual server2# virsh autostart new-virtual
      
      







これで、仮想マシンの移行は完了です!



注釈


ユーティリティはCentos 6.4でテストされました。 転送時間について何も言うことが難しいと思う それはすべて、転送中の仮想マシンでの作業の強度、およびそれに応じてスナップショットのサイズに依存します。



All Articles