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秒で終わりました。ユーザーズガイドには「コントローラの高可用性」というのもあるので、次回はこれをチャレンジしたいと思います。

参考

以下を参考にしましたので、詳細はこちらを参照ください。