SYNOPSIS
pvecm <COMMAND> [ARGS] [OPTIONS] です。
pvecm add <ホスト名> [OPTIONS].
現在のノードを既存のクラスタに追加します。
- <ホスト名>: <文字列
-
既存のクラスタ・メンバーのホスト名(またはIP)。
- --fingerprint ([A-Fa-f0-9]{2}:){31}[A-Fa-f0-9]{2}
-
証明書の SHA 256 フィンガープリント。
- --force <ブール値
-
ノードが既に存在する場合はエラーをスローしません。
- -リンク[n] [アドレス=]<IP> [,優先度=<整数>]。
-
1つのコロシンク・リンクのアドレスとプライオリティ情報。(最大8リンクまでサポート; link0..link7)
- --nodeid <整数> (1 - N)
-
このノードのノード ID。
- --use_ssh <ブール値
-
相手がAPI経由で参加する場合でも、常にSSHを使用してください。
- --votes <整数> (0 - N)
-
このノードの投票数
pvecm addnode <node> [OPTIONS].
クラスタ構成にノードを追加します。この呼び出しは内部用です。
- <ノード>: <文字列
-
クラスタ・ノード名。
- --apiversion <整数
-
新しいノードの JOIN_API_VERSION。
- --force <ブール値
-
ノードが既に存在する場合はエラーをスローしません。
- -リンク[n] [アドレス=]<IP> [,優先度=<整数>]。
-
1つのコロシンク・リンクのアドレスとプライオリティ情報。(最大8リンクまでサポート; link0..link7)
- --new_node_ip <文字列
-
追加するノードのIPアドレス。リンクがない場合のフォールバックとして使用されます。
- --nodeid <整数> (1 - N)
-
このノードのノード ID。
- --votes <整数> (0 - N)
-
このノードの投票数
pvecm アピバー
このノードで利用可能なクラスタ結合 API のバージョンを返します。
pvecm create <clustername> [OPTIONS] [オプション].
新しいクラスタ構成を生成します。リンクが指定されていない場合は、デフォルトでローカルIPアドレスがlink0になります。
- <クラスタ名>: <文字列
-
クラスタの名前。
- -リンク[n] [アドレス=]<IP> [,優先度=<整数>]。
-
1つのコロシンク・リンクのアドレスとプライオリティ情報。(最大8リンクまでサポート; link0..link7)
- --nodeid <整数> (1 - N)
-
このノードのノード ID。
- --投票数 <整数> (1 - N)
-
このノードの投票数。
pvecm delnode <ノード>。
クラスタ構成からノードを削除します。
- <ノード>: <文字列
-
クラスタ・ノード名。
pvecm 予想 <予想
corosyncに期待される投票数の新しい値を伝えます。
- <予想>: <整数> (1 - N)
-
予想得票数
pvecm help [OPTIONS]
指定したコマンドに関するヘルプを表示します。
- --extra-args <array> です。
-
特定のコマンドのヘルプを表示します。
- --verbose <ブール値
-
冗長出力フォーマット。
pvecm keygen <ファイル名>.
corosync用の新しい暗号鍵を生成します。
- <ファイル名>: <文字列
-
出力ファイル名
pvecm mtunnel [<extra-args>] [OPTIONS].
VM/CTマイグレーションで使用します。
- <extra-args>: <array> です。
-
配列としての追加引数
- --get_migration_ip <boolean>(デフォルト = 0)
-
設定されている場合、マイグレーション IP を返します
- --マイグレーションネットワーク <文字列
-
ローカルマイグレーションIPの検出に使用されるマイグレーションネットワーク
- --run-command <ブール値
-
tcpソケットを標準入力としてコマンドを実行します。IPアドレスとポートは、まずこのコマンドの標準出力から、それぞれ別の行に出力されます。
pvecmノード
クラスタノードのローカルビューを表示します。
pvecm qdevice remove
設定されたQDeviceの削除
pvecm qdevice setup <アドレス> [オプション].
QDeviceの使用設定
- <アドレス>: <文字列
-
外部corosync QDeviceのネットワークアドレスを指定します。
- --force <ブール値
-
危険な可能性のある操作でエラーを投げないでください。
- --ネットワーク <文字列
-
外部qdeviceへの接続に使用するネットワーク。
pvecmステータス
クラスタステータスのローカルビューを表示します。
pvecm updatecerts [OPTIONS](証明書の更新)
ノード証明書を更新します(必要なファイル/ディレクトリをすべて生成します)。
- --force <ブール値
-
新しいSSL証明書を強制的に生成します。
- --サイレント <ブール値
-
エラーを無視します(クラスタに定足数がない場合など)。
- --unmerge-known-hosts <boolean>(デフォルト = 0)
-
レガシーSSH既知のホストをアンマージします。
説明
Proxmox VEクラスタマネージャpvecmは、物理サーバのグループを作成するためのツールです。このようなグループをクラスタと呼びます。信頼性の高いグループ通信にはCorosync Cluster Engineを使用します。クラスタ内のノード数に明確な制限はありません。 実際には、ホストとネットワークのパフォーマンスによって、実際に可能なノード数が制限されることがあります。現在(2021年)、50ノードを超えるクラスタ(ハイエンドのエンタープライズハードウェアを使用)が稼働しているという報告があります。
pvecmは、新しいクラスタの作成、クラスタへのノードの参加、クラスタからの離脱、ステータス情報の取得、およびその他の様々なクラスタ関連タスクの実行に使用できます。Proxmox Cluster File System("pmxcfs") は、クラスタ設定をすべてのクラスタノードに透過的に配布するために使用されます。
ノードをクラスタにグループ化すると、次のような利点があります:
-
ウェブベースの集中管理
-
マルチマスタークラスター:各ノードがすべての管理タスクを実行可能
-
データベース駆動型ファイルシステムpmxcfsを設定ファイルの保存に使用し、corosyncを使用して全ノードでリアルタイムにレプリケートされます。
-
物理ホスト間での仮想マシンとコンテナの容易な移行
-
迅速な展開
-
ファイアウォールやHAなどのクラスタ全体のサービス
要件
-
corosyncが動作するためには、すべてのノードがUDPポート5405-5412を介して相互に接続できる必要があります。
-
日付と時刻は同期していなければなりません。
-
ノード間でTCPポート22のSSHトンネルが必要です。
-
高可用性に興味がある場合は、信頼できるクォーラムのために少なくとも3つのノードが必要です。すべてのノードが同じバージョンである必要があります。
-
特に共有ストレージを使用する場合は、クラスタ・トラフィック用に専用のNICを使用することをお勧めします。
-
ノードを追加するには、クラスタ・ノードのルート・パスワードが必要です。
-
仮想マシンのオンラインマイグレーションは、ノードに同じベンダーのCPUが搭載されている場合にのみサポートされます。それ以外の場合は動作する可能性がありますが、保証はされません。
|
|
Proxmox VE 3.x以前とProxmox VE 4.Xのクラスタノードを混在させることはできません。 |
|
|
Proxmox VE 4.4とProxmox VE 5.0のノードを混在させることは可能ですが、本番構成としてはサポートされていません。 |
|
|
Proxmox VE 6.xのクラスタを以前のバージョンで実行することはできません。Proxmox VE 6.xとそれ以前のバージョンのクラスタプロトコル(corosync)が根本的に変更されました。Proxmox VE 5.4用のcorosync 3パッケージは、Proxmox VE 6.0へのアップグレード手順のみを対象としています。 |
ノードの準備
まず、すべてのノードにProxmox VEをインストールします。各ノードが最終的なホスト名とIP設定でインストールされていることを確認してください。クラスタ作成後にホスト名とIPを変更することはできません。
etc/hostsですべてのノード名とそのIPを参照するのが一般的ですが(あるいは他の手段で名前を解決できるようにする)、これはクラスタを動作させるために必要なことではありません。というのも、あるノードから別のノードにSSHで接続する場合、覚えやすいノード名を使うことができるからです(リンクアドレスの種類も参照してください)。クラスタ構成では常にIPアドレスでノードを参照することをお勧めします。
クラスタの作成
クラスタの作成は、コンソール上で行うか(sshでログイン)、Proxmox VEのWebインタフェース(Datacenter → Cluster)を使用してAPIから行うことができます。
|
|
クラスタには一意の名前を付けます。クラスタ名はノード名と同じ規則に従います。 |
Web GUI で作成
Datacenter → Cluster]で、[Create Cluster]をクリックします。クラスタ名を入力し、ドロップダウン・リストからメインのクラスタ・ネットワーク(リンク0)として使用するネットワーク接続を選択します。デフォルトは、ノードのホスト名で解決されたIPです。
Proxmox VE 6.2では、クラスタに最大8つのフォールバックリンクを追加できます。冗長リンクを追加するには、Addボタンをクリックし、それぞれのフィールドからリンク番号とIPアドレスを選択します。Proxmox VE 6.2以前では、フォールバックとして2つ目のリンクを追加するには、Advancedチェックボックスを選択し、追加のネットワークインターフェース(リンク1、Corosyncの冗長性も参照)を選択します。
|
|
クラスタ通信用に選択したネットワークが、ネットワークストレージやライブマイグレーションなど、トラフィックの多い目的で使用されていないことを確認してください。 クラスタネットワーク自体は少量のデータを生成しますが、レイテンシに非常に敏感です。クラスタネットワーク要件の詳細を確認してください。 |
コマンドラインによる作成
最初のProxmox VEノードにssh経由でログインし、以下のコマンドを実行します:
hp1# pvecm create CLUSTERNAME
新しいクラスタの状態を確認するには、次のコマンドを使用します:
hp1# pvecm ステータス
同一ネットワーク内の複数クラスタ
同じ物理ネットワークまたは論理ネットワークに複数のクラスタを作成することができます。この場合、クラスタ通信スタックでの衝突を避けるため、各クラスタに一意の名前を付ける必要があります。さらに、クラスタを明確に区別できるようにすることで、人間の混乱を避けることができます。
corosyncクラスタの帯域幅要件は比較的低いものの、パッケージのレイテンシと1秒あたりのパッケージ(PPS)レートが制限要因となります。同じネットワーク内の異なるクラスタは、これらのリソースをめぐって互いに競合する可能性があるため、大規模なクラスタには別の物理ネットワークインフラを使用することが理にかなっている場合があります。
クラスタへのノードの追加
|
|
クラスタに参加すると、/etc/pveにある既存の設定はすべて上書きされます。特に、ゲストIDが衝突する可能性があるため、参加ノードはゲストを保持できず、ノードはクラスタのストレージ構成を継承します。既存のゲストを持つノードに参加するには、回避策として各ゲストのバックアップを作成し(vzdumpを使用)、参加後に異なるIDでリストアします。ノードのストレージレイアウトが異なる場合は、ノードのストレージを再追加し、ストレージが実際に利用可能なノードに反映されるように各ストレージのノード制限を適応させる必要があります。 |
GUIでノードをクラスタに参加
既存のクラスタ・ノードでWebインタフェースにログインします。Datacenter → Clusterで、上部のJoin Informationボタンをクリックします。次に、[情報をコピー]ボタンをクリックします。または、[情報]フィールドの文字列を手動でコピーします。
次に、追加するノードのWebインタフェースにログインします。Datacenter → Clusterで、Join Clusterをクリックします。情報]フィールドに、先ほどコピーした[参加情報]テキストを入力します。 クラスタへの参加に必要なほとんどの設定が自動的に入力されます。セキュリティ上の理由から、クラスタのパスワードは手動で入力する必要があります。
|
|
必要なデータをすべて手動で入力するには、Assisted Joinチェックボックスを無効にします。 |
Joinボタンをクリックすると、クラスタ参加プロセスが直ちに開始されます。ノードがクラスタに参加すると、現在のノード証明書はクラスタ認証局(CA)から署名されたものに置き換えられます。 つまり、現在のセッションは数秒後に機能しなくなります。この場合、Webインタフェースを強制的にリロードし、クラスタ認証情報を使用して再度ログインする必要があります。
これで、Datacenter → Clusterにノードが表示されるはずです。
コマンドラインからクラスタへのノード参加
既存のクラスタに参加させたいノードにsshでログインします。
# pvecm add IP-ADDRESS-CLUSTER
IP-ADDRESS-CLUSTERには、既存のクラスタ・ノードのIPまたはホスト名を使用します。 IPアドレスを使用することをお勧めします(「リンク・アドレスの種類」を参照)。
クラスタの状態を確認するには
# pvecm ステータス
# pvecm status Cluster information ~~~~~~~~~~~~~~~~ Name: prod-central Config Version: 3 Transport: knet Secure auth: on Quorum information ~~~~~~~~~~~~~~~~~ Date: Date: Tue Sep 14 11:06:47 2021 Quorum provider: corosync_votequorum Nodes: 4 Node ID: 0x00000001 Ring ID: 1.1a8 Quorate: Yes Votequorum information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 期待される投票数: 4 予想最高得票数4 総得票数 4 定数 3 フラグ Quorate メンバー情報 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ノード ID 投票数 名前 0x00000001 1 192.168.15.91 0x00000002 1 192.168.15.92 (local) 0x00000003 1 192.168.15.93 0x00000004 1 192.168.15.94
全ノードのリストだけが必要な場合は、次のようにします:
# pvecm ノード
# pvecm ノード メンバー情報 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ノードID 投票数 名前 1 1 hp1 2 1 hp2 (ローカル) 3 1 hp3 4 1 hp4
分離されたクラスタ・ネットワークによるノードの追加
クラスタ・ネットワークが分離されているクラスタにノードを追加する場合は、link0パラメータを使用してそのネットワーク上のノードのアドレスを設定する必要があります:
# pvecm add IP-ADDRESS-CLUSTER --link0 LOCAL-IP-ADDRESS-LINK0クロノスネットのトランスポート・レイヤーに内蔵されている冗長性を使用したい場合は、link1パラメータも使用してください。
GUIを使用して、Cluster Joinダイアログの対応するLink Xフィールドから正しいインターフェイスを選択できます。
クラスタノードの削除
|
|
手続きを進める前に注意深くお読みください。 |
ノードからすべての仮想マシンを移動します。ローカル データまたはバックアップのコピーが作成されていることを確認します。さらに、削除するノードへのスケジュールされたレプリケーション ジョブをすべて削除してください。
|
|
ノードを削除する前にそのノードへのレプリケーションジョブを削除しないと、レプリケーションジョブが削除できなくなります。特に、レプリケートされたVMがマイグレーションされるとレプリケーションの方向が自動的に切り替わるため、削除するノードからレプリケートされたVMをマイグレーションすることで、そのノードへのレプリケーションジョブが自動的に設定されることに注意してください。 |
次の例では、クラスタからノードhp4を削除します。
別のクラスタ・ノード(hp4ではない)にログインし、pvecm nodesコマンドを実行して削除するノードIDを特定します:
hp1# pvecm nodes
Membership information
~~~~~~~~~~~~~~~~~~~~~~
Nodeid Votes Name
1 1 hp1 (local)
2 1 hp2
3 1 hp3
4 1 hp4
この時点でhp4の電源を切り、現在の設定のまま(ネットワーク内で)再び電源が入らないようにする必要があります。
|
|
上述したように、ノードを取り外す前に電源を切り、現在の構成で(既存のクラスタネットワーク内で)再び電源が入らないことを確認することが重要です。 そのままノードの電源を入れると、クラスタが壊れてしまい、機能する状態に復元するのが困難になる可能性があります。 |
ノードhp4の電源を切ったら、安全にクラスタから削除できます。
hp1# pvecm delnode hp4 ノード4をキル
|
|
この時点で、Could not kill node (error = CS_ERR_NOT_EXIST)というエラー・メッセージが表示される可能性があります。これはノードの削除に失敗したのではなく、オフラインのノードを kill しようとした corosync に失敗したことを意味します。したがって、これは安全に無視できます。 |
pvecm nodesまたはpvecm statusを使ってノードのリストをもう一度確認してください。以下のようになるはずです:
hp1# pvecm status ... Votequorum information ~~~~~~~~~~~~~~~~~~~~~~ Expected votes: 3 予想最高得票数3 投票総数: 2 3 定数: 2 フラグ: Quorate メンバー情報 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ノード ID 投票数 名前 0x00000001 1 192.168.15.90 (local) 0x00000002 1 192.168.15.91 0x00000003 1 192.168.15.92
何らかの理由で、このサーバーを再び同じクラスタに参加させたい場合は、そうしなければなりません:
-
Proxmox VEを新規インストールしてください、
-
そして、前のセクションで説明したように、それを結合します。
削除されたノードの設定ファイルはまだ/etc/pve/nodes/hp4 に存在します。まだ必要な設定を回復してから、ディレクトリを削除してください。
|
|
ノードの削除後も、その SSH フィンガープリントは他のノードのknown_hostsに残っています。同じ IP またはホスト名を持つノードに再参加した後に SSH エラーが発生した場合は、再参加したノードでpvecm updatecerts を1 回実行してフィンガープリントをクラスタ全体で更新します。 |
を再インストールせずにノードを分離します。
|
|
これは推奨される方法ではありません。不安な場合は、前の方法を使用してください。 |
ノードを最初から再インストールせずに、クラスタからノードを分離することもできます。ただし、クラスタからノードを削除した後も、そのノードは共有ストレージにアクセスできます。これは、クラスタからノードの削除を開始する前に解決しておく必要があります。Proxmox VEクラスタは他のクラスタとまったく同じストレージを共有することはできません。さらに、VMIDの競合につながる可能性もあります。
分離したいノードだけがアクセスできる新しいストレージを作成することをお勧めします。例えば、NFS上の新しいエクスポートや新しいCephプールなどです。まったく同じストレージが複数のクラスタからアクセスされないようにすることが重要です。このストレージを設定したら、すべてのデータとVMをノードからそのストレージに移動します。これで、クラスタからノードを分離する準備が整いました。
|
|
すべての共有リソースがきれいに分離されていることを確認してください!そうしないと、コンフリクトや問題が発生します。 |
まず、ノードのcorosyncとpve-clusterサービスを停止します:
systemctl stop pve-cluster systemctl stop corosync
クラスタファイルシステムをローカルモードで再度起動します:
pmxcfs -l
corosync設定ファイルを削除します:
rm /etc/pve/corosync.conf rm -r/etc/corosync/*
これで、ファイルシステムを通常のサービスとして再開できます:
killall pmxcfs systemctl start pve-cluster
これでノードはクラスタから切り離されました。クラスタの残りのノードから削除するには
pvecm delnode oldnode
残りのノードのクォーラムが失われたためにコマンドが失敗した場合、回避策として予想得票数を1に設定することができます:
pvecm 予想1そしてpvecm delnodeコマンドを繰り返します。
次に、分離したノードに戻り、そのノードに残っているクラスタファイルをすべて削除します。これにより、ノードを問題なく別のクラスタに追加できるようになります。
rm/var/lib/corosync/*他のノードの設定ファイルがまだクラスタ ファイル システムに残っているため、それらもクリーンアップします。ノード名が正しいことを確認したら、/etc/pve/nodes/NODENAMEからディレクトリ全体を再帰的に削除します。
|
|
ノードのSSH鍵はauthorized_keyファイルに残ります。これは、ノードがまだ公開鍵認証で互いに接続できることを意味します。これを修正するには、/etc/pve/priv/authorized_keysファイルからそれぞれの鍵を削除します。 |
定足数
Proxmox VEは、クォーラムベースの技術を使用して、すべてのクラスタノード間で一貫性のある状態を提供します。
クォーラム(定足数)とは、分散システムにおいて分散トランザクションが操作を実行するために最低限必要な投票数のことです。
- ウィキペディアより
ネットワーク・パーティショニングの場合、状態の変更には過半数のノードがオンラインであることが必要です。クォーラムを失うと、クラスタは読み取り専用モードに切り替わります。
|
|
Proxmox VEはデフォルトで各ノードに1票を割り当てます。 |
クラスタ・ネットワーク
クラスタネットワークはクラスタの中核です。これを介して送信されるすべてのメッセージは、それぞれの順序ですべてのノードに確実に配信されなければなりません。Proxmox VEでは、この部分は高性能、低オーバーヘッド、高可用性の開発ツールキットの実装であるcorosyncによって行われます。これは分散型設定ファイルシステム(pmxcfs)に対応しています。
ネットワーク要件
Proxmox VEクラスタスタックを安定して動作させるには、全ノード間のレイテンシが5ミリ秒(LANパフォーマンス)以下の信頼性の高いネットワークが必要です。ノード数が少ないセットアップでは、より高いレイテンシのネットワークでも動作する可能性がありますが、これは保証されておらず、ノード数が3つ以上、レイテンシが約10ミリ秒を超えると、むしろ可能性が低くなります。
corosyncはあまり帯域幅を使用しませんが、レイテンシのジッターの影響を受けやすいので、ネットワークは他のメンバーによって多用されるべきではありません。 特に、corosyncとストレージに共有ネットワークを使わないでください(冗長構成で優先順位の低いフォールバックの可能性を除いて)。
クラスタをセットアップする前に、ネットワークがその目的に適しているかどうかを確認することは良い習慣です。クラスタ・ネットワーク上でノードが互いに接続できることを確認するには、pingツールでノード間の接続性をテストします。
Proxmox VEファイアウォールが有効な場合、corosyncのACCEPTルールが自動的に生成されます。
|
|
Corosyncは、バージョン3.0 (Proxmox VE 6.0で導入)以前はMulticastを使用していました。 最新のバージョンでは、クラスタ通信にKronosnetを使用していますが、現時点では通常のUDPユニキャストのみをサポートしています。 |
|
|
corosync.confでトランスポートをudpまたはudpuに設定することで、マルチキャストまたはレガシーユニキャストを有効にすることはできますが、暗号化および冗長性サポートがすべて無効になることに注意してください。 したがって、これは推奨されません。 |
個別のクラスタ・ネットワーク
パラメータなしでクラスタを作成する場合、corosyncクラスタのネットワークは通常、WebインタフェースおよびVMのネットワークと共有されます。セットアップによっては、ストレージトラフィックも同じネットワーク上で送信されるかもしれません。corosyncはタイムクリティカルでリアルタイムなアプリケーションなので、これを変更することをお勧めします。
新しいネットワークの設定
まず、新しいネットワークインターフェイスをセットアップする必要があります。これは物理的に別のネットワーク上にある必要があります。ネットワークがクラスタ・ネットワークの要件を満たしていることを確認してください。
クラスタ作成時の分離
これは、新しいクラスタの作成に使用されるpvecm createコマンドのlinkXパラメータで可能です。
10.10.10.1/25に静的アドレスを持つ追加のNICをセットアップし、すべてのクラスタ通信をこのインターフェイスで送受信したい場合、次のように実行します:
pvecm createtest --link0 10.10.10.1
すべてが正しく機能しているかどうかを確認するには、以下を実行してください:
systemctl status corosync
その後、上記の手順に従って、クラスタ・ネットワークを分離したノードを追加します。
クラスタ作成後の分離
すでにクラスタを作成していて、クラスタ全体を再構築することなく、その通信を別のネットワークに切り替えたい場合にこの方法を使用できます。 この変更により、ノードがcorosyncを再起動して新しいネットワーク上で次々に立ち上がる必要があるため、クラスタのクォーラムが短時間失われる可能性があります。
まず、corosync.confファイルの編集方法を確認してください。 次に、そのファイルを開くと、以下のようなファイルがあるはずです:
logging { debug: off to_syslog: yes } nodelist { node { name: due nodeid: 2 quorum_votes:1 ring0_addr: due } node { name: tre nodeid: 3 quorum_votes:1 ring0_addr: tre } node { name: uno nodeid: 1 quorum_votes:1 ring0_addr: uno } } quorum { provider: corosync_votequorum } totem { cluster_name: testcluster config_version: 3 ip_version: ipv4-6 secauth: on version: 2 interface { linknumber: 0 } } }.
|
|
ringX_addrは実際には corosyncリンクアドレスを指定します。ring "という名前は、古いバージョンの corosync の名残で、後方互換性のために残されています。 |
まず最初に行うことは、ノード・エントリーに名前のプロパティを追加することです。これらはノード名と一致していなければなりません。
次に、すべてのノードのring0_addrプロパティからすべてのアドレスを新しいアドレスに置き換えます。ここでは、プレーンIPアドレスまたはホスト名を使用できます。ホスト名を使用する場合は、すべてのノードから解決可能であることを確認してください(リンクアドレスの種類も参照してください)。
この例では、クラスタ通信を10.10.10.0/25ネットワークに切り替えたいので、各ノードのring0_addrをそれぞれ変更します。
|
|
全く同じ手順で、他のringX_addr値も変更できます。ただし、一度に1つのリンクアドレスだけを変更することをお勧めします。 |
config_versionプロパティを増やすと、新しいコンフィギュレーション・ファイルは次のようになります:
logging { debug: off to_syslog: yes } nodelist { node { name: due nodeid: 2 quorum_votes:1 ring0_addr: 10.10.10.2 } node { name: tre nodeid: 3 quorum_votes:1 ring0_addr: 10.10.10.3 } node { name: uno nodeid: 1 quorum_votes:1 ring0_addr: 10.10.10.1 } } quorum { provider: corosync_votequorum } totem { cluster_name: testcluster config_version:4
ip_version: ipv4-6
secauth: on
version: 2
interface {
linknumber: 0
}
}
そして、変更した情報がすべて正しいことを最終確認した後、保存し、もう一度、corosync.confファイルの編集セクションに従って、有効にします。
変更はライブで適用されるので、corosyncの再起動は厳密には必要ありません。他の設定も変更した場合や、corosync が文句を言っているのに気づいた場合は、オプションで再起動をトリガーできます。
単一ノードで実行します:
systemctl restart corosync
では、問題がないか確認してください:
systemctl status corosync
corosyncが再び動作し始めたら、他の全てのノードでもcorosyncを再起動してください。 その後、新しいネットワーク上でクラスタ・メンバーシップに1つずつ参加します。
コロシンクのアドレス
corosyncリンクアドレス(後方互換性のため、corosync.confでは ringX_addrと表記)は、2つの方法で指定できます:
-
IPv4/v6アドレスは直接使用できます。これらは静的で、通常は不用意に変更されることがないため、推奨されます。
-
ホスト名は getaddrinfoを使用して解決されます。つまり、デフォルトでは、IPv6アドレスが利用可能であれば最初に使用されます(man gai.confも参照してください)。特に既存のクラスタをIPv6にアップグレードする場合は、この点に注意してください。
|
|
ホスト名の解決先アドレスは、corosyncやそれが動作しているノードに触れることなく変更することができるため、注意して使用する必要があります。 |
ホスト名を優先する場合は、corosync専用の別個の静的ホスト名を推奨します。また、クラスタ内のすべてのノードがすべてのホスト名を正しく解決できることを確認してください。
Proxmox VE 5.1以降、サポートされている間は、ホスト名は入力時に解決されます。解決されたIPのみが設定に保存されます。
以前のバージョンでクラスタに参加したノードは、corosync.confで未解決のホスト名をまだ使用している可能性があります。上記のように、IPまたは別のホスト名で置き換えるのが良いかもしれません。
コロシンク 冗長性
Corosyncは、統合されたKronosnetレイヤーを介した冗長ネットワークをデフォルトでサポートしています(レガシーなudp/udpuトランスポートではサポートされていません)。これは、pvecmの -linkXパラメータ、GUIのリンク1(クラスタ作成中または新規ノード追加中)、またはcorosync.confで複数のringX_addrを指定することで、複数のリンクアドレスを指定して有効にすることができます。
|
|
有用なフェイルオーバーを提供するためには、すべてのリンクが独自の物理ネットワーク接続上にある必要があります。 |
リンクは優先度の設定に従って使用されます。この優先順位は、corosync.conf の対応する interface セクションでknet_link_priorityを設定するか、pvecm でクラスタを作成するときにpriorityパラメータを使うことで設定できます:
# pvecm create CLUSTERNAME --link0 10.10.10.1,priority=15 --link1 10.20.20.1,priority=20
この場合、優先順位が高いlink1が先に使われることになります。
優先順位が手動で設定されていない場合(または2つのリンクの優先順位が同じ場合)、リンクは番号順に使用され、番号の小さい方が優先順位が高くなります。
すべてのリンクが動作していても、最も優先度の高いリンクだけがコロシンク・トラフィックを見ることになります。リンクの優先度を混在させることはできません。つまり、優先度の異なるリンクは互いに通信することができません。
優先順位の低いリンクは、優先順位の高いリンクがすべて故障しない限りトラフィックが発生しないため、他のタスク(VM、ストレージなど)に使用するネットワークを優先順位の低いリンクに指定することは有効な戦略になります。最悪の場合、待ち時間が長かったり混雑していたりする接続の方が、全く接続しないよりはましかもしれません。
既存のクラスタへの冗長リンクの追加
実行中のコンフィギュレーションに新しいリンクを追加するには、まずcorosync.confファイルの編集方法を確認してください。
次に、nodelistセクションのすべてのノードに新しいringX_addr を追加します。Xはどのノードに追加しても同じで、各ノードで一意であることを確認してください。
最後に、Xを上記で選択したリンク番号に置き換えて、下図のような新しいインターフェイスを トーテムセクションに追加します。
1番のリンクを追加したと仮定すると、新しい設定ファイルは次のようになります:
logging { debug: off to_syslog: yes } nodelist { node { name: due nodeid: 2 quorum_votes:1 ring0_addr: 10.10.10.2 ring1_addr: 10.20.20.2 } node { name: tre nodeid: 3 quorum_votes:1 ring0_addr: 10.10.10.3 ring1_addr: 10.20.20.3 } node { name: uno nodeid: 1 quorum_votes:1 ring0_addr: 10.10.10.1 ring1_addr: 10.20.20.1 } } quorum { provider: corosync_votequorum } totem { cluster_name: testcluster config_version:4 ip_version: ipv4-6 secauth: on version: 2 interface { linknumber: 0 } interface { linknumber: 1 } }.
最後の手順でcorosync.confファイルを編集すると、すぐに新しいリンクが有効になります。再起動は必要ありません。corosyncが新しいリンクを読み込んだかどうかは、次のようにして確認できます:
journalctl -b -u corosync
1つのノードで古いリンクを一時的に切断し、切断中もステータスがオンラインであることを確認して、新しいリンクをテストするのがよいでしょう:
pvecmステータス
健全なクラスタ状態が表示された場合は、新しいリンクが使用されていることを意味します。
Proxmox VE クラスターにおける SSH の役割
Proxmox VEは様々な機能にSSHトンネルを利用しています。
-
コンソール/シェルセッションのプロキシ(ノードとゲスト)
ノードAに接続している状態でノードBのシェルを使用する場合、ノードAのターミナルプロキシに接続し、そのターミナルプロキシは非インタラクティブSSHトンネルを介してノードBのログインシェルに接続します。
-
セキュアモードでのVMおよびCTのメモリとローカルストレージのマイグレーション。
移行中、移行情報を交換し、メモリとディスクの内容を転送するために、1つ以上のSSHトンネルが移行元と移行先のノード間で確立されます。
-
ストレージのレプリケーション
SSHセットアップ
Proxmox VEシステムでは、SSH設定/セットアップに以下の変更が行われます:
-
rootユーザーのSSHクライアントがChaCha20より AESを優先するように設定されている場合。
-
rootユーザのauthorized_keysファイルが/etc/pve/priv/authorized_keysにリンクされ、クラスタ内の全ての認可された鍵がマージされます。
-
sshdはパスワードを使ってrootとしてログインできるように設定されています。
|
|
古いシステムでは、/etc /pve/priv/known_hosts を指すシンボリックリンクとして/etc/ssh/ssh_known_hostsが設定されている場合があります。このシステムはpve-cluster <<INSERT VERSION>> で明示的なホスト鍵の固定に置き換えられ、シンボリックリンクはpvecm updatecerts --unmerge-known-hosts を実行することで解除できます。 |
.bashrcと兄弟姉妹の自動実行による落とし穴
カスタム.bashrc や、設定されたシェルによってログイン時に実行される類似の ファイルがある場合、セッションが正常に確立されると、sshは自動的にそれを 実行します。これは予期せぬ動作を引き起こす可能性があります。 なぜなら、これらのコマンドは上記のどの操作に対しても root 権限で実行される可能性があるからです。これは問題となる副作用を引き起こす可能性があります!
このようなややこしいことを避けるためには、/root/.bashrcに、セッションが対話型であることを確認するチェックを追加し、その上で.bashrcコマンドを実行することをお勧めします。
このスニペットを.bashrcファイルの先頭に追加してください:
# 副作用を避けるために対話的に実行していない場合は早期終了! case $- in *i*) ;; *) return;; esac
コロシンク外部投票サポート
このセクションでは、Proxmox VEクラスタに外部ボータを配置する方法について説明します。 このように構成すると、クラスタ通信の安全特性に違反することなく、より多くのノード障害に耐えることができます。
これが機能するためには、2つのサービスが必要です:
-
各Proxmox VEノードで実行されるQDeviceデーモン
-
独立したサーバー上で動作する外部投票デーモン
その結果、小規模なセットアップ(例えば2+1ノード)でも高い可用性を実現できます。
QDevice 技術概要
Corosync Quorum Device (QDevice)は、各クラスタノード上で動作するデーモンです。外部で実行されるサードパーティのアービトレーターの決定に基づいて、クラスタのクォーラムサブシステムに設定された投票数を提供します。 このデバイスの主な用途は、標準のクォーラムルールが許容するよりも多くのノード障害をクラスタが維持できるようにすることです。外部デバイスはすべてのノードを見ることができるため、これは安全に行うことができます。 これは、サードパーティの投票を受け取った後、そのノードのセットがクォーラムを(再び)持つことができる場合にのみ行われます。
現在、QDevice Netのみがサードパーティ・アービトレーターとしてサポートされています。これは、ネットワーク経由でパーティションメンバーに到達できる場合、クラスタのパーティションに投票を提供するデーモンです。複数のクラスタをサポートするように設計されており、設定やステートはほとんど不要です。新しいクラスタは動的に処理され、QDeviceを実行しているホスト上に設定ファイルは必要ありません。
外部ホストの唯一の要件は、クラスタへのネットワークアクセスが必要であることと、corosync-qnetdパッケージが利用可能であることです。私たちはDebianベースのホスト用のパッケージを提供していますが、他のLinuxディストリビューションでもそれぞれのパッケージマネージャから利用可能なパッケージがあるはずです。
|
|
corosync自体とは異なり、QDeviceはTCP/IP経由でクラスタに接続します。 デーモンはクラスタのLAN外でも実行でき、corosyncの低レイテンシ要件に制限されません。 |
対応セットアップ
偶数ノード数のクラスタではQDeviceをサポートし、2ノードクラスタではより高い可用性を提供する場合に推奨しています。 奇数ノード数のクラスタでは、現在のところQDeviceの使用を推奨していません。その理由は、クラスタタイプごとにQDeviceが提供する投票数に差があるためです。偶数のクラスタには追加の票が1票入りますが、これは可用性を高めるだけで、QDevice自体に障害が発生した場合は、QDeviceをまったく使用しない場合と同じ状態になるからです。
一方、クラスタサイズが奇数の場合、QDeviceは(N-1)票を提供します。この代替動作は理にかなっています。もしQDeviceに1票しか追加の票がなかったら、クラスタは脳が分裂したような状況に陥る可能性があります。このアルゴリズムでは、1つのノード(当然QDevice自体も)を除くすべてのノードが失敗することができます。しかし、これには2つの欠点があります:
-
QNetデーモン自体に障害が発生した場合、他のノードに障害が発生するか、クラスタが直ちにクォーラムを失います。たとえば、15台のノードを持つクラスタでは、クラスタがクォーラムを失う前に7台が故障する可能性があります。この場合、QDeviceはほぼ単一障害点として機能します。
-
1つのノードとQDeviceを除くすべてのノードに障害が発生する可能性があるという事実は、最初は有望に聞こえますが、その結果、HAサービスが大量に復旧し、残りの1つのノードに過負荷がかかる可能性があります。さらに、((N-1)/2)ノード以下しかオンラインでない場合、Cephサーバはサービスの提供を停止します。
欠点とその意味を理解すれば、奇数クラスタのセットアップでこの技術を使うかどうかを自分で決めることができます。
QDevice-Netセットアップ
corosync-qdeviceへの投票を提供するデーモンは、非特権ユーザーとして実行することをお勧めします。Proxmox VEとDebianにはそのように設定されたパッケージが用意されています。 Proxmox VEにQDeviceを安全かつセキュアに統合するには、デーモンとクラスタ間のトラフィックを暗号化する必要があります。
まず、外部サーバーにcorosync-qnetdパッケージをインストールします。
外部# apt install corosync-qnetd
とcorosync-qdeviceパッケージを全クラスタノードにインストールします。
pve# apt install corosync-qdevice
これを実行した後、クラスタ内のすべてのノードがオンラインであることを確認します。
Proxmox VEノードの1つで以下のコマンドを実行して、QDeviceをセットアップできます:
pve# pvecm qdevice setup <QDEVICE-IP> 。
クラスタのSSHキーが自動的にQDeviceにコピーされます。
|
|
この段階で「Host key verification failed.」などのエラーが表示された場合は、pvecm updatecertsを実行すると問題が解決する可能性があります。 |
すべてのステップが正常に完了すると、「完了」と表示されます。でQDeviceがセットアップされたことを確認できます:
pve# pvecm status ... 投票数情報 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 予想投票数です: 3 予想最高得票数3 投票総数: 2 3 定数: 2 フラグ: Quorate Qdevice Membership information ~~~~~~~~~~~~~~~~~ Nodeid Votes Qdevice Name 0x00000001 1 A,V,NMW 192.168.22.180 (local) 0x00000002 1 A,V,NMW 192.168.22.181 0x00000000 1 Qdevice
QDevice Status Flags
上記のように、QDeviceのステータス出力には通常3つの列が含まれます:
-
A/NA: Alive または Not Alive。外部corosync-qnetdデーモンとの通信が機能しているかどうかを示します。
-
V/NV: QDeviceがノードに投票する場合。ノード間のcorosync接続がダウンしているが、両方のノードが外部のcorosync-qnetdデーモンとまだ通信できるようなスプリットブレインの状況では、1つのノードだけが投票権を得ます。
-
MW/NMW: マスターが勝つ(MV)かどうか(NMW)。デフォルトはNMW、
[votequorum_qdevice_master_winsマニュアルページ https://manpages.debian.org/bookworm/libvotequorum-dev/votequorum_qdevice_master_wins.3.en.html]
を参照してください。 -
NR:QDeviceが登録されていません。
|
|
QDeviceがNot Alive(上記の出力でNA)と表示されている場合は、外部サーバーのポート5403(qnetdサーバーのデフォルトポート)がTCP/IP経由で到達可能であることを確認してください! |
Corosync コンフィギュレーション
etc/pve/corosync.confファイルはProxmox VEクラスタで中心的な役割を果たします。corosync.confの詳細については、corosync.confのマニュアルページを参照してください:
man corosync.confノード・メンバーシップについては、Proxmox VEが提供するpvecmツールを常に使用する必要があります。 その他の変更については、設定ファイルを手動で編集する必要があるかもしれません。 以下に、これを行うためのベスト・プラクティスのヒントをいくつか示します。
corosync.conf を編集します。
corosync.confファイルの編集は必ずしも簡単ではありません。各クラスタ・ノードに2つあり、1つは/etc/pve/corosync.confに、もう1つは/etc/corosync/corosync.confにあります。クラスタ・ファイル・システムにあるものを編集すると、ローカルのものに変更が伝搬しますが、その逆はできません。
ファイルが変更されるとすぐに、設定は自動的に更新されます。 つまり、実行中のcorosyncに統合できる変更はすぐに反映されます。従って、編集中にファイルを保存する際に意図しない変更を引き起こさないように、常にコピーを作成し、代わりにそれを編集する必要があります。
cp /etc/pve/corosync.conf /etc/pve/corosync.conf.new
次に、すべてのProxmox VEノードにプリインストールされているnanoやvim.tinyなどのお気に入りのエディタで設定ファイルを開きます。
|
|
コンフィギュレーションを変更した後は、必ずconfig_version番号をインクリメントしてください。 |
必要な変更を行った後、現在の作業用設定ファイルのコピーをもう1つ作成します。これは、新しい設定の適用に失敗したり、その他の問題が発生した場合のバックアップとして機能します。
cp /etc/pve/corosync.conf /etc/pve/corosync.conf.bak
そして、古い設定ファイルを新しいものに置き換えます:
mv /etc/pve/corosync.conf.new /etc/pve/corosync.conf
変更が自動的に適用されるかどうかは、以下のコマンドで確認できます:
systemctl status corosync journalctl -b -u corosync
変更が自動的に適用されない場合は、corosyncサービスを再起動する必要があります:
systemctl restart corosync
エラーについては、以下のトラブルシューティングのセクションを確認してください。
トラブルシューティング
問題:quorum.expected_votes は に設定する必要があります。
corosyncが失敗し始め、システムログに以下のメッセージが表示された場合:
corosync[1647]: [QUORUM] 定数プロバイダ: corosync_votequorum の初期化に失敗しました: [QUORUM] クォーラムプロバイダ: corosync_votequorum の初期化に失敗しました。 corosync[1647]: [SERV ] サービスエンジン 'corosync_quorum' のロードに失敗しました: [SERV ] サービスエンジン 'corosync_quorum' が 'configuration error: nodelist or quorum.expected_votes must be configured!' の理由でロードに失敗しました。
これは、コンフィギュレーションでcorosyncringX_addrに設定したホスト名が解決できなかったことを意味します。
クォーレートされていないときにコンフィギュレーションを書き込む
クォーラムのないノードで/etc/pve/corosync.conf を変更する必要があり、何を行っているかを理解している場合は、これを使用してください:
pvecm 予想1これで予想される投票数が1に設定され、クラスタがクォーレートになります。その後、設定を修正したり、最後に動作したバックアップに戻したりすることができます。
corosyncが起動できなくなった場合は、これだけでは不十分です。この場合、/etc/corosync/corosync.confにあるcorosync設定のローカルコピーを編集し、corosyncが再び起動できるようにするのが最善です。スプリットブレインの状況を避けるために、すべてのノードでこのコンフィギュレーションが同じ内容であることを確認してください。
クラスターコールドスタート
すべてのノードがオフラインの場合、クラスタがクォーレートでないことは明らかです。これは停電後によくあるケースです。
|
|
無停電電源装置("UPS"、"バッテリー・バックアップ "とも呼ばれます)を使ってこのような状態にならないようにするのは、特にHAを望む場合には常に良い考えです。 |
ノードの起動時にpve-guestsサービスが開始され、クォーラムを待ちます。定足数が満たされると、onbootフラグが設定されているすべてのゲストが起動します。
ノードの電源を入れたとき、または停電後に電源が回復したとき、一部のノードが他のノードよりも速く起動する可能性があります。クォーラムに達するまでゲストの起動が遅れることを覚えておいてください。
ゲスト VMID 自動選択
新しいゲストを作成する際、ウェブインターフェースは自動的にバックエンドに空いているVMIDを尋ねます。デフォルトの検索範囲は100から1000000(スキーマによって強制される最大許容 VMID より低い) です。
例えば、一時的なVMと手動でVMIDを選択するVMを簡単に分けたい場合などです。 また、安定した長さのVMIDを提供したい場合もあり、その場合は下限を例えば100000に設定することで、より余裕を持たせることができます。
このユースケースに対応するために、datacenter .cfgコンフィギュレーションファイルを使用して、下限、上限、または両方の境界を設定することができます。
|
|
この範囲はnext-id API呼び出しにのみ使用されるので、厳しい制限ではありません。 |
ゲスト・マイグレーション
仮想ゲストを他のノードに移行することは、クラスタにおいて便利な機能です。このようなマイグレーションの動作を制御する設定があります。これは、設定ファイルdatacenter.cfgを介して、またはAPIまたはコマンドラインパラメータを介して特定の移行に対して行うことができます。
ゲストがオンラインかオフラインか、またはローカルリソース(ローカルディスクなど)を持っているかどうかの違いがあります。
仮想マシンのマイグレーションの詳細については、QEMU/KVMマイグレーションの章を参照してください。
コンテナ移行の詳細については、コンテナ移行の章を参照してください。
マイグレーションタイプ
移行タイプは、移行データを暗号化された(安全な) チャネルで送信するか、暗号化されていない(安全でない) チャネルで送信するかを定義します。 移行タイプを安全でないに設定すると、仮想ゲストの RAM コンテンツも暗号化されずに転送されることになり、ゲスト内部の重要なデータ (パスワードや暗号化キーなど) の情報漏えいにつながる可能性があります。
従って、ネットワークを完全に制御できず、誰にも盗聴されていないことを保証できない場合は、安全なチャネルを使用することを強くお勧めします。
|
|
ストレージの移行はこの設定に従いません。現在、ストレージコンテンツは常に安全なチャネルで送信されます。 |
暗号化には多くの計算能力が必要なため、この設定はより良いパフォーマンスを得るために、しばしば安全でない設定に変更されます。最近のシステムはハードウェアでAES暗号化を実装しているため、その影響は小さくなっています。パフォーマンスへの影響は、10Gbps以上の転送が可能な高速ネットワークで特に顕著です。
マイグレーション・ネットワーク
デフォルトでは、Proxmox VEはクラスタ通信が行われるネットワークを使用して移行トラフィックを送信します。これは、機密性の高いクラスタトラフィックが中断される可能性があることと、このネットワークがノードで利用可能な最良の帯域幅を持たない可能性があるため、いずれも最適ではありません。
移行ネットワークパラメータを設定すると、すべての移行トラフィックに専用ネットワークを使用できます。メモリに加えて、これはオフライン移行のストレージトラフィックにも影響します。
移行ネットワークはCIDR表記を使用したネットワークとして設定されます。これには、各ノードに個別のIPアドレスを設定する必要がないという利点があります。Proxmox VEは、CIDR形式で指定されたネットワークから移行先ノードの実アドレスを判断できます。これを有効にするには、各ノードがそれぞれのネットワークで正確に1つのIPを持つようにネットワークを指定する必要があります。
例
ここでは、3つのノードがあり、3つのネットワークがあると仮定します。1つはインターネットとのパブリック通信用、もう1つはクラスタ通信用、そしてもう1つはマイグレーション用の専用ネットワークとして使いたい非常に高速なものです。
このようなセットアップのネットワーク構成は以下のようになります:
iface eno1 inet manual # public network auto vmbr0 iface vmbr0 inet static address 192.X.Y.57/24 gateway 192.X.Y.1 bridge-ports eno1 bridge-stp off bridge-fd 0 # cluster network auto eno2 iface eno2 inet static address 10.1.1.1/24 # fast network auto eno3 iface eno3 inet static address 10.1.2.1/24
ここでは、移行ネットワークとしてネットワーク10.1.2.0/24を使用します。1回の移行では、コマンドラインツールのmigration_networkパラメータを使ってこれを行うことができます:
# qm migrate 106 tre --online --migration_network 10.1.2.0/24
クラスタ内のすべての移行用のデフォルト ネットワークとしてこれを設定するには、/etc/pve/datacenter.cfgファイルの移行プロパティを設定します:
# use dedicated migration network migration: secure,network=10.1.2.0/24
|
|
移行タイプは、/etc/pve/datacenter.cfg で移行ネットワークを設定する際に必ず設定する必要があります。 |
著作権および免責事項
著作権 © 2007-2022 Proxmox Server Solutions GmbH
このプログラムはフリー・ソフトウェアです。あなたは、Free Software Foundationによって発行されたGNU Affero General Public Licenseのバージョン3、またはそれ以降のバージョンのいずれかに従って、このプログラムを再配布したり、変更したりすることができます。
このプログラムは有用であることを期待して配布されていますが、商品性や特定の目的への適合性についての暗黙の保証もなく、いかなる保証もありません。詳細はGNU Affero General Public Licenseをご覧ください。
あなたはこのプログラムとともにGNU Affero General Public Licenseのコピーを受け取っているはずです。 そうでない場合は、https://www.gnu.org/licenses/をご覧ください。