【Proxmox VE 9.2】 3Tier 構成の準備(NIC 名の固定・ストレージ用ネットワーク・corosync の冗長化)

Proxmox VE 9.2 で 3Tier 構成(サーバー・ネットワーク・外部の共有ストレージを分けた構成)を組むための、ネットワークの準備手順です。ストレージへの通信を 2 系統に分け、クラスタの通信(corosync)にもう 1 本のリンクを足して、どちらも 1 本が切れても止まらないようにします。

ストレージ(iSCSI)とマルチパスの設定は、次の記事 3Tier 構成:iSCSI+マルチパスの共有ストレージ設定手順 で行います。

目次

この記事の前提

参照した公式ドキュメント

検証環境

クラスタ構築手順で作った 3 台のクラスタ(pve01 / pve02 / pve03)に、NIC を 5 枚ずつ追加しました。

ネットワークサブネット用途
管理192.168.1.0/24Web UI、SSH、仮想マシンの通信、corosync の Link 0
iSCSI 経路 A10.20.81.0/24ストレージへの通信(1 本目)
iSCSI 経路 B10.20.82.0/24ストレージへの通信(2 本目)
corosync Link 110.20.84.0/24クラスタの通信(予備のリンク)
NIC用途pve01pve02pve03
nic0管理(vmbr0)192.168.1.181192.168.1.184192.168.1.185
nic1iSCSI 経路 A10.20.81.18110.20.81.18410.20.81.185
nic2iSCSI 経路 B10.20.82.18110.20.82.18410.20.82.185
nic3・nic4未使用(HCI 構成の記事で Ceph 用のボンドに使います)–––
nic5corosync Link 110.20.84.18110.20.84.18410.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
NIC 名の固定
オプション説明
–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 など)が表示されます。

固定後の NIC

(4) pve02 と pve03 でも、(1)〜(3) を同じように行います。

ストレージ用・corosync 用の NIC の設定

(1) pve01 の [System] → [Network] で [nic1] を選択して [Edit] をクリックします。[Edit: Network Device] が表示されるので、次のとおり入力して [OK] をクリックします。

NIC の編集
項目説明設定値
IPv4/CIDRNIC の IP アドレスとプレフィックス長です10.20.81.181/24
Gateway (IPv4)既定のゲートウェイです。ゲートウェイは管理用(vmbr0)にだけ設定するので、空欄にします空欄
Autostart起動時に NIC を有効にしますオン
Comment一覧に表示するメモですiSCSI path A
MTU1 回で送るパケットの最大サイズです。ジャンボフレームを使う場合は、スイッチとストレージも含めて同じ値にそろえます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] の列が表示されたことを確認します。

Link 1 の追加

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

corosync-cfgtool -n
pvecm status
corosync のリンクの状態

次の手順

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次