これは、私が Thin-LVM を Proxmox×TrueNAS(iSCSI) 環境で試した際の記録です。
結論から言うと、クラスタ環境では Thin-LVM のメタデータまわりで問題が起きてしまい、思うように使えなかった という話になります。
同様の構成を考えている方の参考になれば幸いです。
背景
- Proxmox クラスタで共有ストレージを使う際、記事としては Ceph を導入する例が多い。
- 一般的な iSCSI や NFS を使った事例は少なく、気になって調べてみた。
- 別記事で紹介した「iSCSI + 通常のLVM」の組み合わせでは問題なくマイグレーションができたが、同じ iSCSI 上に “Thin-LVM” を作ったらどうなるのか? 試してみた。
- 結果として、他ノードで “?” 表示になったり してしまい、運用が出来ないことが分かった。
環境イメージ
- TrueNAS(詳細設定は割愛)
- iSCSI ターゲットを用意して、Proxmox ノード (pve53, pve54, pve55) からアクセス
- Proxmox 3ノードでクラスタを構成
- iSCSI イニシエータ 設定済み -> 全ノードで同じ LUN を参照できる状態
iSCSI Target 側の設定
- TrueNAS で Portal, Initiator Group, Target, Extent などを適宜作成
- Proxmox 側から
/dev/sda
などとして同じブロックデバイスが見えるようにしている
Proxmox 側での iSCSI 接続設定
- Datacenter -> Storage -> “iSCSI” 追加
- Portal, ターゲットの設定などをして、全ノードで利用できるようにする
root@pve53:~# lsblk | grep sdb
sdb 8:16 0 100G 0 disk
root@pve54:~# lsblk | grep sdb
sdb 8:16 0 100G 0 disk
root@pve55:~# lsblk | grep sdb
sdb 8:16 0 100G 0 disk
Thin-LVM プールを作成してみる
普通の LVM と違い、Thin-LVM はメタデータ用の LV とデータ用の LV を作る必要があります。
私は次のようにやってみました。
# iSCSI デバイスを確認
lsblk
# 例: sdb 100G
# PV として作成
pvcreate /dev/sdb
# VG 作成
vgcreate testvg2 /dev/sdb
```bash
root@pve55:~# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
root@pve55:~# vgcreate testvg2 /dev/sdb
Volume group "testvg2" successfully created
LVM Thinプール作成
例: testvg2 内に thinpool という名前で 80G のプールを作成
lvcreate -L 80G -n thinpool --type thin-pool testvg2
root@pve55:~# lvcreate -L 80G -n thinpool --type thin-pool testvg2
Thin pool volume with chunk size 64.00 KiB can address at most <15.88 TiB of data.
Logical volume "thinpool" created.
ここで、lvscan
などをすると、testvg2/thinpool
が認識されます。
root@pve55:~# lvscan | grep thinpool
ACTIVE '/dev/testvg2/thinpool' [80.00 GiB] inherit
Proxmox に “LVM-Thin” ストレージとして登録
Proxmox の WebUI でストレージ追加を行います。
- Datacenter -> Storage ->
Add -> LVM-Thin
- ID:
ThinLVM
- ボリュームグループ:
testvg2
- Thin Pool:
thinpool
- 内容: “ディスクイメージ, コンテナ”
- 保存
これで、“ThinLVM” というストレージができ、VM ディスクを置けるようになります。ただし、3つのノードに表示されるThinLVMが、追加作業を行ったノード以外では、“?” 表示になっています。
いざ使おうとしたら…… 他ノードで “?” 表示に
- LVM-Thinを作成したノード (例: pve55) のWebUIストレージ欄のサマリとVMディスクを見ると、正しく容量が表示されます。
- しかしながら、他のノード (例: pve54) のWebUIのストレージ欄のサマリとVMディスクを見ると、サマリの容量が表示されず、VMディスクでもエラー no such logical volume testvg2/thinpool (500) が表示されます。
- 念のため、各ノードでlvscanを実行するも、正しく認識できているように見えます。
root@pve53:~# lvscan | grep thinpool
inactive '/dev/testvg2/thinpool' [80.00 GiB] inherit
root@pve54:~# lvscan | grep thinpool
ACTIVE '/dev/testvg2/thinpool' [80.00 GiB] inherit
root@pve55:~# lvscan | grep thinpool
ACTIVE '/dev/testvg2/thinpool' [80.00 GiB] inherit
ThinLVMを作成したノードで VM ディスクを Thin-LVM に作成
新規 VM 作成画面で、ディスクの保存先を “ThinLVM” にしてインストール開始。
問題なく OS がインストールでき、VM も普通に起動しますが、上のエラーは解消されませんでした。
ThinLVMを作成したノード以外 VM ディスクを Thin-LVM に作成
新規 VM 作成画面で、ディスクの保存先を “ThinLVM” にしようとするも、残容量が0 Bとなっていました。選択して強行するも、TASK ERROR: unable to create VM 102 - no such logical volume testvg2/thinpool とエラーが出て失敗しました。
調べてみると、どうも LVM-Thin はクラスタ運用には対応していない という情報がありました。
通常の LVM なら clvm
(clustered LVM) と組み合わせる方法もあるようですが、Proxmox の標準機能では対応していないようで、Thin-LVM メタデータの同期が期待どおり動作しない らしいです。
結論: クラスタ環境なら素直に “通常の LVM” または “他の共有ストレージ” が無難
- Proxmox×TrueNAS(iSCSI) で Thin-LVM を試すと、クラスタ運用では メタデータの整合性 が取れず、ノードによって “?” 表示や認識不可、といったトラブルに遭遇した。
- クラスタ環境でスナップショットや Thin Provisioning が必要なら、Ceph, NFS(qcow2) など 別の選択肢を検討した方が良さそう。
- 普通の LVM なら問題なくクラスタ共有ができてマイグレーションも高速なので、まずはそちらを使うのがおすすめ。
今回は以上です。もし「Thin-LVM で共有してもうまくいってるよ!」という事例をご存知の方がいたら、ぜひ教えてください。