私は2つのKVMサーバーといくつかの仮想マシンを持っています。
サーバー(A)KVM qcow2イメージ付き
サーバー(B)KVMパーティション用にNFSをマウントします(サーバーAにqcow2イメージが存在します)。
私の質問は単純です。サーバーBで仮想ディスクコピーを作成するための最良の解決策は何ですか(仮想マシンは明らかに実行されています)。 DRBDは1つの解決策ですか?
サーバーAのqcow2イメージをサーバーBに複製したいが、AとBの両方で同時にアクセスする必要がない場合は、任意のファイルシステム(ext4など)でDRBDを使用できます。 、Aではプライマリとして実行され、Bではセカンダリとして実行されます。Aに障害が発生した場合、BのDRBDをプライマリに切り替えて、そこでイメージを使用できます。
これらの画像をAとBで同時に使用できるようにしたい場合は、さらに注意が必要です。クラスタ化されたファイルシステムが役立つかもしれませんが、パフォーマンスは適切ではないと思います。
イメージのコピーを1回だけ作成する場合は、AでVMを停止し、scp/rsync/over-NFS/whateverを使用してイメージをコピーします。 VMをAで実行する必要がある場合は、イメージの一貫性を保つために、何らかのスナップショットを作成する必要があります。 KVMとQCOW2はわかりませんが、スナップショット機能を提供している可能性があります。そうでない場合は、LVMボリュームにイメージを保存するとLVMスナップショットが機能する可能性があります。
https://alteeve.ca/w/2-Node_Red_Hat_KVM_Cluster_Tutorial をご覧ください。手順を説明します。
私はこれと同じ問題に取り組んできました。私はこれを2つの異なる方法で機能させることができました。
セットアップ
RAW形式を使用してLV上にkvmゲストシステムを構築することを選択しています。これがLVのイメージファイルにあるよりも優れているかどうかはわかりませんが、それが私が行っていることです。 drbdを使用してLVM物理パーティションを同期する方がはるかに簡単ですが、複数のLVを実行し、1つをhostA
(drbd
プライマリロールが必要)で実行し、もう1つをhostB
(drbd
プライマリロールも必要です)。そのため、glusterに行かないと行き詰まりますが、現時点ではさらに別のテクノロジーを採用することには消極的です。私のストレージスタックはすでに:
KVM guest
drbd (drbd1)
lvm2 logical volume (guestlv)
lvm2 volume group (vg)
lvm2 physical volume (crypt)
dm-crypt (crypt)
gpt partitions (md_d0p1=root, md_d0p2=swap, md_d0p3=crypt)
mirror-RAID (md_d0)
gpt partition (single)
hard drive (2)
私が回避しなければならない最大の問題は、virt-manager
がdrbd
ボリュームを認識しないか、操作できないことです(virt-install
とvmbuilder
は私には機能しません)。だからこれが私がしたことです:
hostA
とhastB
はUbunut14.04LTSを実行しており、OpenSSHサーバーと仮想化ホストパッケージとともにインストールされ、lvm2
とdrbd8-utils
もインストールされています。それぞれに4つのNICがあり、ペアで結合されています。 bond0
はbr0
にブリッジされ、ゲストによって使用されます。bond1
はブリッジされず、drbd
用に予約されたサブネットを使用します。
KVM + DRBDメソッド1
パートA-KVMゲストを作成します
hostA
にLVを作成します。ubuntu-14.04.1-server-AMD64.iso
を/var/lib/libvirt/images
にコピーしますvirt-manager
を実行します。hostA
に接続します。Details
ウィンドウを開き、[ストレージ]タブを使用してLVMボリュームグループを追加します。br0
を使用して、新しいマシンを構成します。パートB-レプリケーションの構成
lvresize
を使用して、LVサイズを1lun作成します。 lvresize -l +1 vg/guestlv
drbd
メタデータを初期化します。 drbdadm create-md /dev/vg/guestlv
drbd
リソースファイルを作成します。 file:/etc/drbd.d/guest.res resource guest { device /dev/drbd1; meta-disk internal; startup { become-primary-on hostA; wfc-timeout 30; outdated-wfc-timeout 20; degr-wfc-timeout 30; } net { cram-hmac-alg sha1; shared-secret sync_disk; } syncer { rate 100M; verify-alg sha1; } on hostA { address 192.168.2.1:7789; disk /dev/vg/guestlv; } on hostB { address 192.168.2.2:7789; disk /dev/vg/guestlv; } }
hostB
drbdadm create-md /dev/vg/guestlv
を実行しますdrbdadm connect --discard-my-data guest
を実行しますdrbdadm up guest
を実行しますhostA
drbdadm up guest
を実行しますdrbdadm primary guest
を実行しますパートC-drbdデバイスをKVM configに切り替えます
hostA
で、virsh edit guestlv
を実行します<source dev='/dev/vg/guestlv'/>
を見つけて、それを<source dev='/dev/drbd1'/>
に変更します。drbd
同期が終了するのを待ちます。drbdadm secondary guest
を実行します。hostB
で、drbdadm primary guest
を実行します。virt-manager
を使用して、ストレージ用のジャンクボリュームを持つ新しいゲストを作成します。インストールが開始されたらすぐにシャットダウンします。hostB
で、virsh edit guestlv
を使用し、ストレージを/dev/drbd1
に設定します。 VMを起動し、動作することを確認します。KVM + DRBDメソッド2上記と非常に似ていますが、
/dev/drbd1
を設定し、同期させます。virsh-edit
を使用して、/dev/drbd1
ストレージをスワップします。/dev/vda
へのgrubのインストール時に表示停止エラーが発生することもありました。drbd
プライマリとセカンダリを交換し、他のホストを構成し、テストします。仮想マシンで高可用性を実現するには、リソースとしてGanetiとDRBDのいずれかを試すことができますが、ganetiのセットアップに余分な作業はほとんどありませんが、VM管理本当にスムーズ。
私が考えることができるもう1つのオプションは、glusterボリュームを使用することです。セットアップとインストールは非常に簡単で、優れたハードウェアがあれば、パフォーマンスも優れているはずです。
今のところ、私はJacekが説明したように単純なDRBDスタイルを使用していますが、他の方法も模索しています。