Proxmox VE で DRBD を使用した仮想環境
前回のブログで LINSTOR 経由で Kubernetes を使用するプラグインを紹介しましたが、今回は Proxmox VE で使用する linstor-proxmox プラグインを紹介します。
Proxmox は Debian ベースの仮想化プラットフォームの1つです。専用の CD image が用意されていて、インストール後すぐに WebGUI からアクセスして構成が可能で、複数の Proxmox ノードを組み合わせたクラスタも簡単に構築できます。 また、LINBIT は専用のレポジトリを用意していて、最新のソースからビルドされた LINBIT 提供パッケージがだれでもすぐに使えるというのも大きなメリットです。
以下に構築例として、2つのノードで Proxmox クラスタを構築し、DRBDで作られた Guest OS をノード間でライブマイグレートしてみます。
前提条件
前提条件として、
- 2台のノードを用意し、すべてのノードに Proxmox VE 5.2 がインストール済み
- 各ノードには DRBD 用のブロックデバイスを1つ準備
とします。1台のマシンで、Nested 環境を使用する場合は、Nested Virtualization を参照ください。
ソフトウェア
今回使用したソフトウェア情報を以下に記載します。
- Proxmox VE 5.2-1
- drbd-dkms/unknown,now 9.0.15-1
- drbd-utils/unknown,now 9.5.0-1
- linstor-client/unknown,now 0.6.0-1
- linstor-common/unknown,now 0.6.2-1
- linstor-controller/unknown,now 0.6.2-1
- linstor-proxmox/unknown,now 2.9.0-1
- linstor-satellite/unknown,now 0.6.2-1
- python-linstor/unknown,now 0.6.0-1
Proxmox パッケージ更新
各ノードに最新のパッケージがインストールします。評価目的なので、 Package_Repositories の pve-no-subscription から使用します。
# vi /etc/apt/sources.list.d/pve-enterprise.list deb http://download.proxmox.com/debian/pve stretch pve-no-subscription # apt update && apt upgrade -y # reboot
PVE クラスタの設定
Cluster_Manager に基づいて、1つノードが master で、残りが slave である PVE Clustor を設定します。これによりノード間で /etc/pve がシェアされます。
1つのノードで、
# pvecm create drbd-clustor
残りのノードで
# pvecm add 10.30.103.120
を実行します。master ノードで確認します。
# pvecm status Quorum information ------------------ Date: Sun Sep 9 08:10:22 2018 Quorum provider: corosync_votequorum Nodes: 2 Node ID: 0x00000001 Ring ID: 1/8 Quorate: Yes Votequorum information ---------------------- Expected votes: 2 Highest expected: 2 Total votes: 2 Quorum: 2 Flags: Quorate Membership information ---------------------- Nodeid Votes Name 0x00000001 1 10.30.103.130 (local) 0x00000002 1 10.30.103.131
DRBD Volumes in Proxmox VE に基づいて、すべてのノードで DRBD, LINSTOR パッケージをインストールします。
# wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add - # PVERS=5 && echo "deb http://packages.linbit.com/proxmox/ proxmox-$PVERS drbd-9.0" > /etc/apt/sources.list.d/linbit.list # apt update # apt install pve-headers -y # apt install drbd-dkms drbd-utils -y # rmmod drbd; modprobe drbd # grep -q drbd /etc/modules || echo "drbd" >> /etc/modules # apt install linstor-controller linstor-satellite linstor-client linstor-proxmox drbdtop -y
ここで pve-headers は kernel と同じバージョンになるように install 前に必ず apt upgrade で最新の kernel にしておく必要があります。そうでない場合は LINSTORユーザーズガイド を参考に kernel のバージョンにあう pve-headers をインストールしてください。
# apt list --installed|egrep 'drbd|linstor' drbd-dkms/unknown,now 9.0.15-1 all [installed] drbd-utils/unknown,now 9.5.0-1 amd64 [installed] drbdtop/unknown,now 0.2.1-1 amd64 [installed] linstor-client/unknown,now 0.6.0-1 all [installed] linstor-common/unknown,now 0.6.2-1 all [installed,automatic] linstor-controller/unknown,now 0.6.2-1 all [installed] linstor-proxmox/unknown,now 2.9.0-1 all [installed] linstor-satellite/unknown,now 0.6.2-1 all [installed] python-linstor/unknown,now 0.6.0-1 all [installed,automatic]
LINSTOR の設定
DRBD9 LINSTOR 構築手順書 に従って LINSTOR ノードを設定します。PVE master ノードがコントローラに、全てのノードをサテライトに設定します。このとき全てのノードの node-type Combined にしておくと、将来コントローラを他のノードに変更する場合に node-type の変更が不要になるのでそうしておきます。
# linstor node list +------------------------------------------------------------+ | Node | NodeType | Addresses | State | |------------------------------------------------------------| | tate-z130 | COMBINED | 10.30.103.130:3366 (PLAIN) | Online | | tate-z131 | COMBINED | 10.30.103.131:3366 (PLAIN) | Online | +------------------------------------------------------------+
各ノードでストレージプールを作成します。
# pvcreate /dev/sdb # vgcreate drbdpool /dev/sdb # linstor storage-pool create lvm tate-z130 drbdpool drbdpool # linstor storage-pool create lvm tate-z131 drbdpool drbdpool # linstor storage-pool list root@tate-z130:~# linstor storage-pool list +---------------------------------------------------------------------------------------------------+ | StoragePool | Node | Driver | PoolName | FreeCapacity | TotalCapacity | SupportsSnapshots | |---------------------------------------------------------------------------------------------------| | drbdpool | tate-z130 | LvmDriver | drbdpool | 50.00 GiB | 50.00 GiB | false | | drbdpool | tate-z131 | LvmDriver | drbdpool | 50.00 GiB | 50.00 GiB | false | +---------------------------------------------------------------------------------------------------+
コントローラノードで、動作確認します。
# linstor resource-definition create first # linstor volume-definition create first 1G --storage-pool drbdpool # linstor resource create tate-z130 first # linstor resource create tate-z131 first # linstor resource list +------------------------------------------------+ | ResourceName | Node | Port | State | |------------------------------------------------| | first | tate-z130 | 7000 | UpToDate | | first | tate-z131 | 7000 | Inconsistent | +------------------------------------------------+
問題がなければテストで作ったボリュームは削除します。
# linstor resource-definition delete -q first
/etc/pve/storage.cfg で DRBD storage の設定
PVE master ノードの /etc/pve/storage.cfg に DRBD storage の設定を追加します。
# vi /etc/pve/storage.cfg : drbd: drbdstorage content images, rootdir redundancy 2 controller 10.30.103.120
controller の IP アドレスは環境に合わせて変えます。redundancy の2は複製の数です。/etc/pve は他のノードとシェアされてますのでコピーは不要です。
# systemctl restart pvedaemon
PVE master ノードで pvedaemon を再起動することで、 drbdstorage が各ノードから参照できるようになります。
WebUI の https://<PVE master node IP address>:8006/ にアクセスしてみます。
Guest VM 作成
Guest VM の作成は、まず Guest で使用する OS イメージをアップロードしておきます。この例では CentOS7.5 イメージをアップロードしています。
次に VM 作成を選択し、ハードディスクで drbdstorage を選択します。
このようにして Guest VM を作成し、起動すると linstor resource list は以下のようになります。
# linstor resource list +---------------------------------------------+ | ResourceName | Node | Port | State | |---------------------------------------------| | vm-100-disk-1 | tate-z130 | 7000 | InUse | | vm-100-disk-1 | tate-z131 | 7000 | UpToDate | +---------------------------------------------+
ライブマイグレーション
インストール後、 Guest VM のライブマイグレーションを実行してみます。tate-z130 で動作していた、Guest VM 100(tate-z135) を tate-z131 に移動してみます(移動する前にハードウェアで CD/DVD ドライブからメディアを外しておきます)。
無事移動できました。DRBD で複製されたディスクを使うので、8秒で終わりました。ユーザーズガイドには「コントローラの高可用性」というのもあるので、次回はこれをチャレンジしたいと思います。
参考
以下を参考にしましたので、詳細はこちらを参照ください。