Proxmox VE 9.2 の 3 台のクラスタに、外部の iSCSI ストレージを 2 本の経路で接続し、マルチパス(multipath-tools)で 1 つのデバイスに束ねて、共有の LVM ストレージとして使う手順です。経路が 1 本切れても、仮想マシンは止まらずに動き続けます。最後に、ライブマイグレーションと経路の障害の動作を確認します。
ネットワークの準備(NIC 名の固定、ストレージ用の 2 系統のネットワーク、corosync の冗長化)は、前の記事 3Tier 構成の準備 で行いました。
この記事の前提
参照した公式ドキュメント
- Proxmox VE Wiki – Multipath
- Proxmox VE Administration Guide – Proxmox VE Storage(Open-iSCSI initiator / LVM Backend)
構成
| 項目 | 内容 |
|---|---|
| iSCSI ターゲット(ストレージ) | IQN:iqn.2026-10.local.lab:pvedoc-lun、LUN:100 GB × 1 |
| ターゲットのポータル | 10.20.81.10(経路 A)、10.20.82.10(経路 B) |
| ノード側の NIC | nic1(経路 A:10.20.81.x)、nic2(経路 B:10.20.82.x) |
| マルチパスのデバイス名 | mpath-pvedoc(別名を付けます) |
| ボリュームグループ | vg-pvedoc |
| Proxmox VE のストレージ ID | iscsi-pvedoc(iSCSI)、lvm-pvedoc(LVM、共有) |
検証環境では、iSCSI ターゲットに Linux(Rocky Linux 9)の LIO(targetcli)を使い、2 つのポータルを別々のネットワークに置きました。本番環境では、ストレージ装置のマニュアルに従ってターゲットを作成してください。公式の Wiki にも、ストレージ装置ごとの推奨設定はベンダーのドキュメントを確認するよう書かれています。
ターゲット側の準備(参考)
ターゲットには、3 台のノードのイニシエーター名(IQN)を登録して、アクセスを許可しておきます。イニシエーター名は、各ノードで次のコマンドで確認できます。
cat /etc/iscsi/initiatorname.iscsi
検証環境のターゲット(LIO)では、次のように作成しました(/dev/sdc を LUN にした例)。
targetcli /backstores/block create name=lun0 dev=/dev/sdc
targetcli /iscsi create iqn.2026-10.local.lab:pvedoc-lun
targetcli /iscsi/iqn.2026-10.local.lab:pvedoc-lun/tpg1/portals delete 0.0.0.0 3260
targetcli /iscsi/iqn.2026-10.local.lab:pvedoc-lun/tpg1/portals create 10.20.81.10 3260
targetcli /iscsi/iqn.2026-10.local.lab:pvedoc-lun/tpg1/portals create 10.20.82.10 3260
targetcli /iscsi/iqn.2026-10.local.lab:pvedoc-lun/tpg1/luns create /backstores/block/lun0
targetcli /iscsi/iqn.2026-10.local.lab:pvedoc-lun/tpg1/acls create <ノードのイニシエーター名>
targetcli saveconfig
ACL の作成は、3 台のノードのイニシエーター名ごとに行います。
iSCSI のタイムアウトの変更とマルチパスのインストール
経路が切れたとき、iSCSI は既定で 120 秒間つながるのを待ってから、その経路を使えないと判断します。公式の Wiki では、この時間を 15 秒にすることを推奨しています。短くすると、マルチパスが早く残りの経路に切り替えられます。
(1) pve01 の [Shell] で次のコマンドを実行し、タイムアウトを 15 秒に変更して、マルチパスのパッケージ(multipath-tools)をインストールします。
sed -i 's/^node.session.timeo.replacement_timeout = .*/node.session.timeo.replacement_timeout = 15/' /etc/iscsi/iscsid.conf
grep ^node.session.timeo.replacement_timeout /etc/iscsi/iscsid.conf
apt update
apt install -y multipath-tools

(2) pve02 と pve03 でも、同じコマンドを実行します。
iscsid.conf の変更は、この後に作るセッションから使われます。既にセッションがある場合は、ログインし直すと反映されます。
iSCSI ストレージの追加
(1) [Datacenter] → [Storage] を開き、[Add] → [iSCSI] をクリックします。

(2) [Add: iSCSI] が表示されます。次のとおり入力して [Add] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| ID | ストレージの名前です | iscsi-pvedoc |
| Portal | ターゲットのポータルの IP アドレスです。1 つ指定すると、ターゲットが公開しているほかのポータル(この例では 10.20.82.10)も自動で見つけて接続します | 10.20.81.10 |
| Target | 接続するターゲットです。Portal を入力すると一覧から選べます | iqn.2026-10.local.lab:pvedoc-lun |
| Nodes | このストレージを使うノードです | All (No restrictions) |
| Enable | ストレージを有効にします | オン |
| Use LUNs directly | オンにすると、LUN をそのまま仮想マシンのディスクとして使います。今回は LUN の上に LVM を作るので、オフにします | オフ |
(3) 一覧に iscsi-pvedoc が追加されます。すべてのノードが、ターゲットにログインします。

(4) pve01 の Shell で、セッションとディスクを確認します。
iscsiadm -m session
lsblk -o NAME,SIZE,TYPE,TRAN,VENDOR,MODEL
2 つのポータルそれぞれにセッションがあり、同じ LUN が 2 つのディスク(sdc と sdd)として見えています。このままでは同じ LUN を 2 つの別のディスクとして扱ってしまうため、次の手順でマルチパスで 1 つにまとめます。

マルチパスの設定
(1) 2 つのディスクの WWID(LUN を識別する番号)を確認します。同じ LUN なので、同じ WWID が表示されます。
/lib/udev/scsi_id -g -u -d /dev/sdc
/lib/udev/scsi_id -g -u -d /dev/sdd

(2) /etc/multipath.conf を作成します。公式の Wiki では、ストレージ装置のベンダーから指定がなければ、既定の設定(装置ごとの既定値の一覧を含みます)を使い、find_multipaths を strict にしておくことを推奨しています。ここでは、分かりやすいように WWID に別名(mpath-pvedoc)を付けました。
defaults {
find_multipaths strict
}
multipaths {
multipath {
wwid "3600140597f52cf2ace44d60b65264303"
alias mpath-pvedoc
}
}
| 項目 | 説明 |
|---|---|
| find_multipaths strict | /etc/multipath/wwids に登録した WWID の LUN だけをマルチパスにします。ローカルのディスクなどが誤ってマルチパスにされるのを防ぎます。Proxmox VE 9.2 の既定値も strict ですが、分かりやすいように明記しています |
| wwid | 別名を付ける LUN の WWID です |
| alias | マルチパスのデバイスの名前です。/dev/mapper/mpath-pvedoc として使えます。指定しない場合は WWID の名前になります |
(3) WWID を登録して、マルチパスの設定を読み込み直し、状態を確認します。
multipath -a 3600140597f52cf2ace44d60b65264303
multipath -r
multipath -ll
mpath-pvedoc の下に 2 つの経路(sdc と sdd)があり、どちらも「active ready running」になっていれば、マルチパスで束ねられています。

| 表示 | 説明 |
|---|---|
| mpath-pvedoc (3600…) dm-6 | マルチパスのデバイス名、WWID、デバイスマッパーの番号です |
| features=’1 queue_if_no_path’ | すべての経路が切れたとき、I/O をすぐにエラーにせず、経路が戻るのを待ちます。待つ時間は装置ごとの既定値(no_path_retry)で決まり、LIO では 12 回 × 5 秒(約 60 秒)です。multipath -t で確認できます |
| policy=’service-time 0′ | 経路の選び方です。処理待ちの I/O が少なく、早く処理できる経路に振り分けます(既定値) |
| active ready running | 経路が使える状態です。切れると「failed faulty offline」になります |
(4) pve02 と pve03 でも、(2)〜(3) を同じように行います。WWID は LUN ごとに決まっているので、すべてのノードで同じです。
共有 LVM の作成
(1) pve01 の Shell で、マルチパスのデバイスに物理ボリュームとボリュームグループを作ります。この操作は 1 台で行います。
pvcreate /dev/mapper/mpath-pvedoc
vgcreate vg-pvedoc /dev/mapper/mpath-pvedoc
vgs vg-pvedoc
必ず /dev/mapper/ のマルチパスのデバイスに作ります。sdc や sdd に直接作ると、マルチパスを通らなくなります。

(2) pve02 と pve03 の Shell で次のコマンドを実行し、vg-pvedoc が見えることを確認します。
pvscan --cache
vgs vg-pvedoc
(3) [Datacenter] → [Storage] を開き、[Add] → [LVM] をクリックします。

(4) [Add: LVM] が表示されます。[ID] を入力し、[Volume group] の一覧から [vg-pvedoc] を選びます。

(5) [Shared] をオンにして [Add] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| ID | ストレージの名前です | lvm-pvedoc |
| Base storage | LVM を作る元です。[Existing volume groups] は既にあるボリュームグループを使います。iSCSI のストレージを選ぶと、LUN の上にボリュームグループを作ることもできます | Existing volume groups |
| Volume group | 使うボリュームグループです | vg-pvedoc |
| Content | 置くデータの種類です | Disk image, Container |
| Nodes | このストレージを使うノードです | All (No restrictions) |
| Enable | ストレージを有効にします | オン |
| Shared | 共有ストレージとして扱います。すべてのノードから同じ LUN が見えているときにオンにします。オンにすると、ライブマイグレーションのときにディスクをコピーしません | オン |
| Wipe Removed Volumes | ディスクを削除するときに、中身をゼロで消去します。消去に時間がかかります | オフ |
| Allow Snapshots as Volume-Chain | 共有 LVM でスナップショットを使えるようにします。Proxmox VE 9 の新しい機能で、まだ技術プレビュー(Technology Preview)です | オフ |
共有 LVM は、シンプロビジョニング(LVM-Thin)が使えず、ディスクの容量をはじめから確保します。スナップショットは [Allow Snapshots as Volume-Chain] をオンにしない限り使えません。
(6) 一覧に lvm-pvedoc が追加され、[Shared] が [Yes] になったことを確認します。

仮想マシンのディスクの移動
NFS に置いていた仮想マシン(VM 100)のディスクを、動かしたまま lvm-pvedoc に移します。
(1) 仮想マシンの [Hardware] で [Hard Disk] を選択し、[Disk Action] → [Move Storage] をクリックします。

(2) [Target Storage] の一覧から [lvm-pvedoc] を選びます。

(3) [Delete source] をオンにして [Move disk] をクリックします。LVM には qcow2 のファイルを置けないので、[Format] は [Raw disk image (raw)] になります。

| 項目 | 説明 | 設定値 |
|---|---|---|
| Target Storage | 移動先のストレージです | lvm-pvedoc |
| Format | 移動先のディスクの形式です。LVM では raw だけです | Raw disk image (raw) |
| Delete source | 移動が終わったら、移動元のディスクを削除します。オフにすると、移動元は未使用のディスク(Unused Disk)として残ります | オン |
(4) タスクビューアーに [TASK OK] と表示されたら完了です。仮想マシンを動かしたまま、ディスクがコピーされ(drive mirror)、移動元が削除されています。

(5) [Hard Disk] が lvm-pvedoc に変わったことを確認します。

動作の確認
ライブマイグレーション
(1) 仮想マシンの右上の [Migrate] をクリックし、[Target node] を選んで [Migrate] をクリックします。

(2) タスクのログで、ディスクのコピーが行われず、メモリーの内容(VM-state)だけが転送されて、数秒で終わったことを確認します。共有ストレージ(Shared がオン)のディスクは、すべてのノードから見えているためです。

経路の障害
仮想マシンが動いているノードで、ストレージへの経路を 1 本止めて、仮想マシンが動き続けることを確認します。
検証のための手順です。本番環境で行う場合は、メンテナンスの時間に行ってください。
(1) 仮想マシンが動いているノード(この例では pve02)の Shell で、経路 A の NIC(nic1)を止めます。25 秒ほど待ってから、マルチパスの状態、マルチパスのデバイスの読み込み、仮想マシンの状態を確認します。
ip link set nic1 down
sleep 25
multipath -ll
dd if=/dev/mapper/mpath-pvedoc of=/dev/null bs=1M count=200 iflag=direct
qm status 100
経路の 1 本が「failed faulty offline」になりますが、残りの経路で読み込みができ、仮想マシンは「running」のままです。

(2) NIC を元に戻します。30 秒ほど待ってから、セッションとマルチパスの状態を確認します。
ip link set nic1 up
sleep 30
iscsiadm -m session
multipath -ll
2 つのセッションが戻り、2 つの経路が「active ready running」に戻ります。
