web-dev-qa-db-ja.com

DRBD&KVMレプリケーションは可能ですか?

私は2つのKVMサーバーといくつかの仮想マシンを持っています。

サーバー(A)KVM qcow2イメージ付き

サーバー(B)KVMパーティション用にNFSをマウントします(サーバーAにqcow2イメージが存在します)。

私の質問は単純です。サーバーBで仮想ディスクコピーを作成するための最良の解決策は何ですか(仮想マシンは明らかに実行されています)。 DRBDは1つの解決策ですか?

4

サーバー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スナップショットが機能する可能性があります。

3
Jacek Konieczny

https://alteeve.ca/w/2-Node_Red_Hat_KVM_Cluster_Tutorial をご覧ください。手順を説明します。

1
dyasny

私はこれと同じ問題に取り組んできました。私はこれを2つの異なる方法で機能させることができました。

セットアップ

RAW形式を使用してLV上にkvmゲストシステムを構築することを選択しています。これがLVのイメージファイルにあるよりも優れているかどうかはわかりませんが、それが私が行っていることです。 drbdを使用してLVM物理パーティションを同期する方がはるかに簡単ですが、複数のLVを実行し、1つをhostAdrbdプライマリロールが必要)で実行し、もう1つをhostBdrbdプライマリロールも必要です)。そのため、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-managerdrbdボリュームを認識しないか、操作できないことです(virt-installvmbuilderは私には機能しません)。だからこれが私がしたことです:

hostAhastBはUbunut14.04LTSを実行しており、OpenSSHサーバーと仮想化ホストパッケージとともにインストールされ、lvm2drbd8-utilsもインストールされています。それぞれに4つのNICがあり、ペアで結合されています。 bond0br0にブリッジされ、ゲストによって使用されます。bond1はブリッジされず、drbd用に予約されたサブネットを使用します。

KVM + DRBDメソッド1

パートA-KVMゲストを作成します

  1. hostAにLVを作成します。
  2. ubuntu-14.04.1-server-AMD64.iso/var/lib/libvirt/imagesにコピーします
  3. Ubuntuデスクトップを実行しているクライアントで、virt-managerを実行します。
  4. hostAに接続します。
  5. Detailsウィンドウを開き、[ストレージ]タブを使用してLVMボリュームグループを追加します。
  6. インストールISO、ストレージ用のLV、ネットワーク用のbr0を使用して、新しいマシンを構成します。
  7. 再起動など、LVが正常に動作していることを確認します。

パートB-レプリケーションの構成

  1. KVMゲストシステムをシャットダウンします。
  2. lvresizeを使用して、LVサイズを1lun作成します。 lvresize -l +1 vg/guestlv
  3. drbdメタデータを初期化します。 drbdadm create-md /dev/vg/guestlv
  4. 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; } }
  5. hostB
    1. リソースファイルと同じようにボリュームグループとlv名を使用して、同じサイズ(新しい+1サイズ!)のLVを作成します。
    2. drbdadm create-md /dev/vg/guestlvを実行します
    3. drbdadm connect --discard-my-data guestを実行します
    4. drbdadm up guestを実行します
  6. hostA
    1. drbdadm up guestを実行します
    2. drbdadm primary guestを実行します

パートC-drbdデバイスをKVM configに切り替えます

  1. hostAで、virsh edit guestlvを実行します
  2. <source dev='/dev/vg/guestlv'/>を見つけて、それを<source dev='/dev/drbd1'/>に変更します。
  3. 保存して終了し、VMを起動して、機能することを確認します。シャットダウンします。
  4. drbd同期が終了するのを待ちます。
  5. drbdadm secondary guestを実行します。
  6. hostBで、drbdadm primary guestを実行します。
  7. ワークステーションで、virt-managerを使用して、ストレージ用のジャンクボリュームを持つ新しいゲストを作成します。インストールが開始されたらすぐにシャットダウンします。
  8. hostBで、virsh edit guestlvを使用し、ストレージを/dev/drbd1に設定します。 VMを起動し、動作することを確認します。

KVM + DRBDメソッド2上記と非常に似ていますが、

  1. /dev/drbd1を設定し、同期させます。
  2. ストレージにジャンクボリュームを使用してKVMゲストを作成し、インストールを中止します。
  3. virsh-editを使用して、/dev/drbd1ストレージをスワップします。
  4. それを起動し、インストールを実行します。これが機能することもあれば、/dev/vdaへのgrubのインストール時に表示停止エラーが発生することもありました。
  5. 動作する場合は、VMをシャットダウンし、drbdプライマリとセカンダリを交換し、他のホストを構成し、テストします。
0
nortally

仮想マシンで高可用性を実現するには、リソースとしてGanetiとDRBDのいずれかを試すことができますが、ganetiのセットアップに余分な作業はほとんどありませんが、VM管理本当にスムーズ。

私が考えることができるもう1つのオプションは、glusterボリュームを使用することです。セットアップとインストールは非常に簡単で、優れたハードウェアがあれば、パフォーマンスも優れているはずです。

今のところ、私はJacekが説明したように単純なDRBDスタイルを使用していますが、他の方法も模索しています。

0
chandank