Proxmox VE 9.2 で 3Tier 構成(サーバー・ネットワーク・外部の共有ストレージを分けた構成)を組むための、ネットワークの準備手順です。ストレージへの通信を 2 系統に分け、クラスタの通信(corosync)にもう 1 本のリンクを足して、どちらも 1 本が切れても止まらないようにします。
ストレージ(iSCSI)とマルチパスの設定は、次の記事 3Tier 構成:iSCSI+マルチパスの共有ストレージ設定手順 で行います。
この記事の前提
参照した公式ドキュメント
- Proxmox VE Administration Guide – Network Configuration(Overriding Network Device Names)
- Proxmox VE Administration Guide – Cluster Manager(Corosync Redundancy / Editing corosync.conf)
- Proxmox VE Wiki – Multipath
検証環境
クラスタ構築手順で作った 3 台のクラスタ(pve01 / pve02 / pve03)に、NIC を 5 枚ずつ追加しました。
| ネットワーク | サブネット | 用途 |
|---|---|---|
| 管理 | 192.168.1.0/24 | Web UI、SSH、仮想マシンの通信、corosync の Link 0 |
| iSCSI 経路 A | 10.20.81.0/24 | ストレージへの通信(1 本目) |
| iSCSI 経路 B | 10.20.82.0/24 | ストレージへの通信(2 本目) |
| corosync Link 1 | 10.20.84.0/24 | クラスタの通信(予備のリンク) |
| NIC | 用途 | pve01 | pve02 | pve03 |
|---|---|---|---|---|
| nic0 | 管理(vmbr0) | 192.168.1.181 | 192.168.1.184 | 192.168.1.185 |
| nic1 | iSCSI 経路 A | 10.20.81.181 | 10.20.81.184 | 10.20.81.185 |
| nic2 | iSCSI 経路 B | 10.20.82.181 | 10.20.82.184 | 10.20.82.185 |
| nic3・nic4 | 未使用(HCI 構成の記事で Ceph 用のボンドに使います) | – | – | – |
| nic5 | corosync Link 1 | 10.20.84.181 | 10.20.84.184 | 10.20.84.185 |
iSCSI の 2 本の経路は、別々のサブネット(本番では別々のスイッチ)に分けます。同じサブネットに 2 枚の NIC を置くと、Linux がどちらの NIC から送信するかを制御できず、片方の経路にしか通信が流れないことがあるためです。
NIC 名の固定
Proxmox VE 9 では、NIC を追加したりカーネルが更新されたりしたときに NIC 名が変わり、ネットワークがつながらなくなるのを防ぐため、NIC 名を MAC アドレスに結び付けて固定するツール(pve-network-interface-pinning)が用意されています。NIC を追加した直後は「ens19」のような名前なので、これを nic1〜nic5 に固定します。
インストール時に [Pin network interface names] をオンにしたノードは、管理用の NIC が既に nic0 になっています。オフでインストールしたノードは、管理用の NIC(ens18 など)も同じ手順で nic0 に固定します。
(1) 対象のノード(pve01)を選択して [Shell] を開き、次のコマンドで NIC 名を固定します。1 枚ごとに「continue (y/N)?」と聞かれるので、[y] を入力して Enter キーを押します。
pve-network-interface-pinning generate --interface ens19 --target-name nic1
pve-network-interface-pinning generate --interface ens20 --target-name nic2
pve-network-interface-pinning generate --interface ens21 --target-name nic3
pve-network-interface-pinning generate --interface ens22 --target-name nic4
pve-network-interface-pinning generate --interface ens23 --target-name nic5

| オプション | 説明 |
|---|---|
| –interface | 固定する NIC の現在の名前です。省略すると、すべての NIC が nic0、nic1… の順に固定されます |
| –target-name | 固定後の名前です |
ツールは、/usr/local/lib/systemd/network/ に NIC 名を MAC アドレスで固定するファイル(50-pmx-nicN.link)を作り、/etc/network/interfaces などの設定の NIC 名も書き換えます。「Please reboot to apply the changes to your configuration」と表示されたとおり、再起動で反映されます。
(2) ノードで仮想マシンが動いている場合は、ほかのノードへライブマイグレーションしてから、右上の [Reboot] でノードを再起動します。
(3) 再起動後、[System] → [Network] を開き、NIC の名前が nic1〜nic5 になったことを確認します。[Alternative Names] には元の名前(enp0s19 など)が表示されます。

(4) pve02 と pve03 でも、(1)〜(3) を同じように行います。
ストレージ用・corosync 用の NIC の設定
(1) pve01 の [System] → [Network] で [nic1] を選択して [Edit] をクリックします。[Edit: Network Device] が表示されるので、次のとおり入力して [OK] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| IPv4/CIDR | NIC の IP アドレスとプレフィックス長です | 10.20.81.181/24 |
| Gateway (IPv4) | 既定のゲートウェイです。ゲートウェイは管理用(vmbr0)にだけ設定するので、空欄にします | 空欄 |
| Autostart | 起動時に NIC を有効にします | オン |
| Comment | 一覧に表示するメモです | iSCSI path A |
| MTU | 1 回で送るパケットの最大サイズです。ジャンボフレームを使う場合は、スイッチとストレージも含めて同じ値にそろえます | 1500(既定) |
(2) 同じように [nic2](10.20.82.181/24、iSCSI path B)と [nic5](10.20.84.181/24、corosync link1)を設定します。設定はまだ反映されておらず、画面下の [Pending changes] に変更点が表示されます。内容を確認して [Apply Configuration] をクリックし、[Do you want to apply pending network changes?] と表示されたら [Yes] をクリックします。

(3) nic1・nic2・nic5 の [Active] が [Yes] になったことを確認します。

(4) pve02 と pve03 でも同じように設定します。Web UI の代わりに、各ノードの Shell で次のコマンドを実行しても同じ設定になります(pve02 の例)。
pvesh set /nodes/pve02/network/nic1 --type eth --cidr 10.20.81.184/24 --autostart 1 --comments "iSCSI path A"
pvesh set /nodes/pve02/network/nic2 --type eth --cidr 10.20.82.184/24 --autostart 1 --comments "iSCSI path B"
pvesh set /nodes/pve02/network/nic5 --type eth --cidr 10.20.84.184/24 --autostart 1 --comments "corosync link1"
pvesh set /nodes/pve02/network
最後の pvesh set /nodes/<ノード名>/network が [Apply Configuration] にあたります。
(5) ノード同士とストレージ(10.20.81.10、10.20.82.10)に ping が通ることを確認します(pve01 の例)。
ping -c 2 10.20.81.184
ping -c 2 10.20.82.184
ping -c 2 10.20.84.184
ping -c 2 10.20.81.10
ping -c 2 10.20.82.10
corosync のリンクの追加(冗長化)
クラスタの通信(corosync)は、作成時に指定した Link 0(管理用ネットワーク)だけを使っています。公式ドキュメントの「既存のクラスタに冗長リンクを追加する」手順に沿って、corosync.conf を編集して Link 1 を追加します。corosync.conf はクラスタのすべてのノードで共有されているので、編集は 1 台(pve01)で行います。
corosync.conf を書き間違えると、クラスタの通信が止まることがあります。公式ドキュメントのとおり、コピーを編集してから置き換え、元のファイルはバックアップとして残します。
(1) pve01 の Shell で、corosync.conf のコピーとバックアップを作ります。
cp /etc/pve/corosync.conf /etc/pve/corosync.conf.new
cp /etc/pve/corosync.conf /etc/pve/corosync.conf.bak
(2) nano /etc/pve/corosync.conf.new などでコピーを開き、次の 3 か所を編集します。
- nodelist の各ノードに
ring1_addr(Link 1 の IP アドレス)を追加します - totem に
interface { linknumber: 1 }を追加します - totem の
config_versionを 1 つ増やします(この例では 3 → 4)。増やさないと変更が反映されません
編集後の内容は次のとおりです(追加・変更した行は ring1_addr、linknumber: 1 の interface、config_version)。
nodelist {
node {
name: pve01
nodeid: 1
quorum_votes: 1
ring0_addr: 192.168.1.181
ring1_addr: 10.20.84.181
}
node {
name: pve02
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.1.184
ring1_addr: 10.20.84.184
}
node {
name: pve03
nodeid: 3
quorum_votes: 1
ring0_addr: 192.168.1.185
ring1_addr: 10.20.84.185
}
}
quorum {
provider: corosync_votequorum
}
totem {
cluster_name: pvedoc-cluster
config_version: 4
interface {
linknumber: 0
}
interface {
linknumber: 1
}
ip_version: ipv4-6
link_mode: passive
secauth: on
token_coefficient: 125
version: 2
}
| 項目 | 説明 |
|---|---|
| ring1_addr | ノードの Link 1 の IP アドレスです。ring0_addr が Link 0 にあたります |
| interface(linknumber) | 使うリンクの番号です。優先度(knet_link_priority)を指定しない場合は、番号の小さいリンク(Link 0)が使われ、通信できなくなると次のリンクに切り替わります |
| config_version | 設定の版数です。変更のたびに 1 つ増やします |
| link_mode: passive | 一度に 1 本のリンクだけを使う動作です(既定) |
(3) 編集したファイルで corosync.conf を置き換えます。置き換えると、すべてのノードに自動で反映されます。
mv /etc/pve/corosync.conf.new /etc/pve/corosync.conf
(4) [Datacenter] → [Cluster] を開き、[Config Version] が 4 になり、[Cluster Nodes] に [Link 1] の列が表示されたことを確認します。

(5) Shell で次のコマンドを実行し、ほかのノードへの LINK 0 と LINK 1 がどちらも「connected」になっていること、クォーラム(Quorate)が「Yes」であることを確認します。
corosync-cfgtool -n
pvecm status

次の手順
ネットワークの準備ができたので、次の記事でストレージ(iSCSI)を 2 本の経路で接続し、マルチパスで束ねます。