Proxmox VE で LINSTOR コントローラ の HA 化

前回のブログで Proxmox VE で DRBD を使用した仮想環境 を紹介しましたが、今回はこの環境の Guest OS に LINSTOR コントローラ をインストールして、 Proxmox の VM の HA 機能を使用して LINSTOR コントローラノードの可用性を向上しようという試みです。DRBD 領域に置かれたコントローラ VM に、起動時に linstor を使わず DRBD インターフェースで如何にしてアクセスするかというのがポイントになります。

前提条件

前提条件として、

  • 3台のノードを用意し、すべてのノードに Proxmox VE 5.2 がインストール済み
  • すべてのノードに DRBD/LINSTOR パッケージがインストール済み
  • PVE クラスタ、LINSTOR はすでに構成済み
  • そのうち 1 台の Guest OS に drbdstorage を使用したCentOS7.5 がインストール済み
  • Guest OS のノード間のライブマイグレーション動作は確認済み

とします。前回のブログで紹介した環境があれば、1 台ノードを用意して、 pvecm add <new node> でノードを追加するだけです。クォーラムの動作に 3 ノード構成が必要になるので今回は 3 ノード使用します。

# pvecm status
Quorum information
------------------
Date:             Tue Sep 18 14:46:39 2018
Quorum provider:  corosync_votequorum
Nodes:            3
Node ID:          0x00000001
Ring ID:          1/1796
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2  
Flags:            Quorate 

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 10.30.103.130 (local)
0x00000002          1 10.30.103.131
0x00000003          1 10.30.103.132

# 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  |
| tate-z132 | COMBINED   | 10.30.103.132:3366 (PLAIN) | Online  |
+---------------------------------------------------------------+

ソフトウェア

今回使用したソフトウェア情報を以下に記載します。

  • linstor-common 0.6.4-1
  • linstor-controller 0.6.4-1

Proxmox の各ノードのパッケージ更新

LINSTOR 関連のパッケージは頻繁にバグフィックスが入っているので、各ノードのパッケージを最新にしておきます。

# apt update && apt upgrade -y

Guest OS に LINSTOR コントローラをインストール

基本的に 6.5 コントローラの高可用性 に従って設定していけばよいです。ドキュメントでは LINBIT アプライアンスイメージを使用していますが、LINSTOR コントローラが動作する OS ならなんでもよいようで、ここでは CentOS 7.5 を使用します(LINBIT 専用のパッケージが使用できる Proxmox を使ってもよいです)。 CentOS 7.5 をインストール後、linstor-controller, linstor-common パッケージのみをインストールします(これらのパッケージの取得方法は、 DRBD9 LINSTOR 構築手順書 を参照ください)。

# yum install linstor-controller-0.6.4-1.el7.noarch.rpm \
  linstor-common-0.6.4-1.el7.noarch.rpm

また、firewalld を止めるか、LINSTOR が使用するポート 3376 も空けておきます。

新規コントローラノードの登録

まず、LINSTOR ノードに新規コントローラのノードを追加します。現在のコントローラノードで以下を実行します。

# linstor node create --node-type Controller tate-z135 10.30.103.135
# 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  |
| tate-z132 | COMBINED   | 10.30.103.132:3366 (PLAIN) | Online  |
| tate-z135 | CONTROLLER | 10.30.103.135:3376 (PLAIN) | Unknown |
+---------------------------------------------------------------+

続いて、各 PVE ノードが新規コントローラ VM にアクセスできるようにします。この例では、tate-z132 が vm-100-disk-1 リソースにアクセスできてないので、追加します。ディスクレスでも問題ありませんがここでは冗長化を増やします。

# linstor resource list
+---------------------------------------------+
| ResourceName  | Node      | Port |    State |
|---------------------------------------------|
| vm-100-disk-1 | tate-z130 | 7000 |    InUse |
| vm-100-disk-1 | tate-z131 | 7000 | UpToDate |
+---------------------------------------------+

# linstor resource create tate-z132 vm-100-disk-1 --storage-pool drbdpool
# linstor resource list
+---------------------------------------------+
| ResourceName  | Node      | Port |    State |
|---------------------------------------------|
| vm-100-disk-1 | tate-z130 | 7000 |    InUse |
| vm-100-disk-1 | tate-z131 | 7000 | UpToDate |
| vm-100-disk-1 | tate-z132 | 7000 | UpToDate |
+---------------------------------------------+

起動時のコントローラ VM アクセス

次に各 PVE ノードで drbd サービスを有効にします。これは LINSTOR コントローラが起動する前に DRBD 領域として vm-100-disk-1 にアクセスできなければならないので、その対応として drbd サービスをスタートしておきます。これにより、起動時に DRBDリソースに対して drbdadm で設定が行われ、LINSTOR なしで /dev/drbd1000 などの DRBD ブロックデバイスにアクセスできるようになります。

# systemctl enable drbd
# systemctl start drbd

さらに linstor-satellite のサービスに –keep-res=vm-100 を追加します。ここで、番号 100 は VM ID で環境に合わせて変更します。linstor-satellite は起動時にすべてのリソースファイルを削除して、再度作り直すので、ここで指定した正規表現にマッチしたものは消さないようにさせるためです。

# env EDITOR=vi systemctl edit linstor-satellite
[Unit]
After=drbd.service

[Service]
ExecStart=
ExecStart=/usr/share/linstor-server/bin/Satellite --logs=/var/log/linstor-satellite --config-directory=/etc/linstor --keep-res=vm-100

# systemctl restart linstor-satellite

コントローラの切り替え

現在のコントローラノードで linstor-controller を止め、データベースを新しいコントローラのノードにコピーします。

# systemctl stop linstor-controller
# systemctl disable linstor-controller
# scp /var/lib/linstor/* root@10.30.103.135:/var/lib/linstor/

新しいコントローラノードで linstor-controller を開始します。

# systemctl start linstor-controller
# systemctl enable linstor-controller

各 PVE ノードで新しいコントローラを指定し、動作確認します。

# vi /etc/linstor/linstor-client.conf
[global]
controllers=10.30.103.135

# 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  |
| tate-z132 | COMBINED   | 10.30.103.132:3366 (PLAIN) | Online  |
| tate-z135 | CONTROLLER | 10.30.103.135:3376 (PLAIN) | Unknown |
+---------------------------------------------------------------+

最後に1つの PVE ノードで /etc/pve/storage.cfg を編集し、pve のコントローラを切り替えます。ここで最後の controllervm の追加が重要でこれにより、DRBDストレージの他のVMと異なる方法でコントローラVMを処理するようPVEに指示します。

# vi /etc/pve/storage.cfg 

drbd: drbdstorage
   content images,rootdir
   redundancy 2
   controller 10.30.103.135
   controllervm 100

Web UI にアクセスし、CentOS OS の VM から more -> Managed HA を選択し、VM を HA 化します (もしくは ha-manager add vm:100)。

HA 動作確認

ha-manager で動作確認します。以下の例は、vm:100 Guest OS は tate-z130 ノードで動作しています。

root@tate-z130:~# ha-manager status
quorum OK
master tate-z130 (active, Tue Sep 18 16:51:33 2018)
lrm tate-z130 (active, Tue Sep 18 16:51:37 2018)
lrm tate-z131 (active, Tue Sep 18 16:51:34 2018)
lrm tate-z132 (idle, Tue Sep 18 16:51:41 2018)
service vm:100 (tate-z130, started)

tate-z131 から vm:100 が動作しているノード tate-z130 を落として、vm:100 が他のノードに切り替わるか確認してみます。

# 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  |
| tate-z132 | COMBINED   | 10.30.103.132:3366 (PLAIN) | Online  |
| tate-z135 | CONTROLLER | 10.30.103.135:3376 (PLAIN) | Unknown |
+---------------------------------------------------------------+

# ha-manager status
quorum OK
master tate-z131 (active, Tue Sep 18 18:08:14 2018)
lrm tate-z130 (active, Tue Sep 18 18:08:15 2018)
lrm tate-z131 (idle, Tue Sep 18 18:08:14 2018)
lrm tate-z132 (idle, Tue Sep 18 18:08:15 2018)
service vm:100 (tate-z130, started)

# ssh tate-z130 init 0
Connection to tate-z130 closed by remote host.

# ha-manager status
quorum OK
master tate-z131 (active, Tue Sep 18 18:08:44 2018)
lrm tate-z130 (shutdown mode, Tue Sep 18 18:08:37 2018)
lrm tate-z131 (idle, Tue Sep 18 18:08:44 2018)
lrm tate-z132 (idle, Tue Sep 18 18:08:45 2018)
service vm:100 (tate-z130, started)

# ha-manager status
quorum OK
master tate-z131 (active, Tue Sep 18 18:09:34 2018)
lrm tate-z130 (old timestamp - dead?, Tue Sep 18 18:08:55 2018)
lrm tate-z131 (idle, Tue Sep 18 18:09:39 2018)
lrm tate-z132 (idle, Tue Sep 18 18:09:40 2018)
service vm:100 (tate-z130, started)

# ha-manager status
quorum OK
master tate-z131 (active, Tue Sep 18 18:10:14 2018)
lrm tate-z130 (old timestamp - dead?, Tue Sep 18 18:08:55 2018)
lrm tate-z131 (active, Tue Sep 18 18:10:11 2018)
lrm tate-z132 (idle, Tue Sep 18 18:10:20 2018)
service vm:100 (tate-z131, started)

# linstor node list
+---------------------------------------------------------------+
| Node      | NodeType   | Addresses                  | State   |
|---------------------------------------------------------------|
| tate-z130 | COMBINED   | 10.30.103.130:3366 (PLAIN) | OFFLINE |
| tate-z131 | COMBINED   | 10.30.103.131:3366 (PLAIN) | Online  |
| tate-z132 | COMBINED   | 10.30.103.132:3366 (PLAIN) | Online  |
| tate-z135 | CONTROLLER | 10.30.103.135:3376 (PLAIN) | Unknown |
+---------------------------------------------------------------+

vm:100 が tate-z131 で起動し、linstor コマンドが引き続き動作するのが確認できました。Pacemkaer のようなリソース単位の細かなチェックはないですが、ノード単位の障害に簡単に対応できるのでなかなか有効な方法と思います。

参考

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