7 YaSTクラスタモジュールの使用 #
YaSTクラスタモジュールでは、クラスタを手動で設定するか、既存のクラスタのオプションを変更することができます。
7.1 用語の定義 #
YaSTクラスタモジュールおよびこの章で使用されているいくつかの主要な用語を以下に定義します。
- バインドネットワークアドレス(
bindnetaddr
) Corosyncエグゼクティブのバインド先のネットワークアドレス。クラスタ間の設定ファイルの共有を簡素化するため、Corosyncはネットワークインタフェースネットマスクを使用して、ネットワークのルーティングに使用されるアドレスビットのみをマスクします。たとえば、ローカルインタフェースが
192.168.5.92
でネットマスクが255.255.255.0
の場合、bindnetaddr
は192.168.5.0
に設定します。ローカルインタフェースが192.168.5.92
でネットマスクが255.255.255.192
の場合は、bindnetaddr
を192.168.5.64
に設定します。ringX_addr
を含むnodelist
が/etc/corosync/corosync.conf
で明示的に設定されている場合、bindnetaddr
は厳密には必要ありません。注記: すべてのノードのネットワークアドレスすべてのノード上で同じCorosync設定が使用されるため、ネットワークアドレスは、特定のネットワークインタフェースのアドレスではなく、
bindnetaddr
として使用します。conntrack
ツールカーネル内の接続トラッキングシステムとやり取りできるようにして、iptablesでのステートフルなパケット検査を可能にします。SUSE Linux Enterprise High Availabilityによって使用され、クラスタノード間の接続ステータスを同期します。詳細については、https://conntrack-tools.netfilter.org/を参照してください。
- Csync2
クラスタ内のすべてのノード、およびGeoクラスタ全体に設定ファイルを複製するために使用できる同期ツールです。Csync2は、同期グループ別にソートされた任意の数のホストを操作できます。各同期グループは、メンバーホストの独自のリストとその包含/除外パターン(同期グループ内でどのファイルを同期するか定義するパターン)を持っています。グループ、各グループに属するホスト名、および各グループの包含/除外ルールは、Csync2設定ファイル
/etc/csync2/csync2.cfg
で指定されます。Csync2は、認証には、同期グループ内でIPアドレスと事前共有キーを使用します。管理者は、同期グループごとに1つのキーファイルを生成し、そのファイルをすべてのグループメンバーにコピーする必要があります。
Csync2の詳細については、https://oss.linbit.com/csync2/paper.pdfを参照してください。
- 既存のクラスタ
「既存のクラスタ」という用語は、1つ以上のノードで構成されるクラスタを指すものとして使用されます。既存のクラスタは、通信チャネルを定義する基本的なCorosync設定を持ちますが、必ずしもリソース設定を持つとは限りません。
- ヒューリスティックス
QDeviceは一連のコマンド(「heuristics」)をサポートしています。コマンドは、クラスタサービスの起動時、クラスタメンバーシップの変更時、QNetdサーバへの接続の成功時にローカルで実行されるか、オプションで定期的に実行されます。
すべてのコマンドが正常に実行された場合にのみ、ヒューリスティックスは合格したとみなされ、そうでない場合は、失敗したとみなされます。ヒューリスティックスの結果は、QNetdサーバに送信され、そこでクォーラムに達するパーティションを決定するための計算に使用されます。
- マルチキャスト
ネットワーク内で一対多数の通信に使用される技術で、クラスタ通信に使用できます。Corosyncはマルチキャストとユニキャストの両方をサポートしています。
注記: スイッチとマルチキャストクラスタ通信にマルチキャストを使用するには、ご使用のスイッチがマルチキャストをサポートしていることを確認します。
- マルチキャストアドレス (
mcastaddr
) Corosyncエグゼクティブによるマルチキャストに使用されるIPアドレス。このIPアドレスはIPv4またはIPv6のいずれかに設定できます。IPv6ネットワークを使用する場合は、ノードのIDを指定する必要があります。プライベートネットワークでは、どのようなマルチキャストアドレスでも使用できます。
- マルチキャストポート(
mcastport
) クラスタ通信に使用されるポート。Corosyncでは、マルチキャストの受信用に指定する
mcastport
と、マルチキャストの送信用のmcastport -1
の、2つのポートを使用します。- QDevice
Corosyncとともに実行されている各クラスタノード上のsystemdサービス(デーモン)。これはQNetdサーバのクライアントです。その主な用途は、クラスタが標準のクォーラムルールが許可するよりも多くのノード障害に耐えることができるようにすることです。
QDeviceはさまざまなアービトレータと連携するように設計されています。ただし、現在では、QNetdのみがサポートされています。
- QNetd
クラスタの一部ではないsystemdサービス(デーモン、「QNetdサーバ」)。systemdサービスは、QDeviceデーモンに投票を提供します。
セキュリティを向上させるため、QNetdはTLSで動作してクライアント証明書を確認することができます。
- 冗長リングプロトコル(RRP)
ネットワーク障害の一部または全体に対する災害耐性のために、複数の冗長ローカルエリアネットワークが使用できるようになります。この方法では、1つのネットワークが作動中である限り、クラスタ通信を維持できます。Corosyncはトーテム冗長リングプロトコルをサポートします。信頼できるソートされた方式でメッセージを配信するために、論理トークンパスリングがすべての参加ノードに課せられます。ノードがメッセージをブロードキャストできるのは、トークンを保持している場合のみです。
Corosyncに定義済みの冗長通信チャネルを持つ場合、RRPを使用してこれらのインタフェースの使用方法をクラスタに伝えます。RRPでは次の3つのモードを使用できます(
rrp_mode
)。active
に設定した場合、Corosyncは両方のインタフェースをアクティブに使用します。ただし、このモードは非推奨の機能です。passive
に設定した場合、Corosyncは代わりに使用可能なネットワークを介してメッセージを送信します。none
に設定した場合、RRPは無効になります。
- ユニキャスト
1つのあて先ネットワークにメッセージを送信する技術Corosyncはマルチキャストとユニキャストの両方をサポートしています。Corosyncでは、ユニキャストはUDP-unicast (UDPU)として実装されます。
7.2 YaST モジュールの起動 #
YaSTを起動して、
› を選択します。コマンドラインでこのモジュールを起動することもできます。#
yast2 cluster
初めてクラスタモジュールを起動した場合は、モジュールが、ウィザードのように、基本設定に必要なすべてのステップをガイドします。そうでない場合は、左パネルのカテゴリを選択して、ステップごとに設定オプションにアクセスします。
次のリストは、YaSTクラスタモジュールで使用可能な画面の概要を示しています。この画面には、クラスタセットアップの成功に必要なパラメータが含まれているかどうか、またはそのパラメータがオプションであるかどうかも説明されています。初回のガイド付き設定に従った場合、次のリストに示す順序で画面が表示されます。
- 通信チャネル(必須)
クラスタノード間の通信に1つまたは2つの通信チャネルを定義できます。転送プロトコルとして、マルチキャスト(UDP)またはユニキャスト(UDPU)のいずれかを使用します。詳細については、7.3項 「通信チャネルの定義」を参照してください。
重要: 冗長通信パスサポートされるクラスタセットアップでは、2つ以上の冗長通信パスが必要です。推奨される方法は、ネットワークデバイスボンディングを使用することです。使用できない場合は、Corosync内に2つ目の通信チャンネルを定義する必要があります。
- Corosync QDevice (オプション。ただし、偶数ノードのクラスタの場合は推奨)
QDeviceをQNetdサーバのクライアントとして設定し、クォーラムの決定に参加できるようにします。これは、ノード数が偶数であるクラスタ、特に2ノードクラスタの場合に推奨されます。詳細については、7.4項 「クォーラムの決定のためのアービトレータの設定」を参照してください。
- セキュリティ(オプションだが推奨)
クラスタの認証設定を定義できます。共有シークレットが必要なHMAC/SHA1認証を使用して、メッセージを保護し、認証することができます。詳細については、7.5項 「認証設定の定義」を参照してください。
- Csync2の設定(オプションだが推奨)
Csync2では、設定変更を追跡して、クラスタノード間でファイルの同期を取ることができます。初めてYaSTを使用してクラスタを設定する場合は、Csync2を設定することを強くお勧めします。Csync2を使用しない場合は、すべての設定ファイルを最初のノードからクラスタ内の残りのノードに手動でコピーする必要があります。詳細については、7.6項 「ファイルを同期するためのCsync2の設定」を参照してください。
- conntrackdの設定(オプション)
ユーザスペース
conntrackd
を設定できます。conntrackツールは、iptablesに対するステートフルなパケット検査のために使用します。詳細については、7.7項 「クラスタノード間の接続ステータスの同期」を参照してください。- サービス(必須)
クラスタノードをオンラインにするためにサービスを設定できます。ブート時にクラスタサービスを開始するかどうか、およびノード間の通信に必要なポートをファイアウォールで開くかどうかを定義します。詳細については、7.8項 「サービスの設定」を参照してください。
YaSTクラスタモジュール内の特定の設定は、現在のノードにのみ適用されます。他の設定はCsync2を使用してすべてのノードに自動的に転送できます。これについての詳しい情報は次のセクションを参照してください。
7.3 通信チャネルの定義 #
クラスタノード間で正常な通信を行うには、少なくとも1つの通信チャネルを定義します。YaST/etc/corosync/corosync.conf
に書き込まれます。マルチキャストとユニキャストの設定のサンプルファイルは/usr/share/doc/packages/corosync/
にあります。
IPv4アドレスを使用する場合、ノードIDはオプションです。IPv6アドレスを使用する場合、ノードIDは必須です。各ノードにIDを手動で指定する代わりに、YaSTクラスタモジュールには、クラスタノードごとに固有のIDを自動的に生成するオプションが含まれています。
次の手順で説明されるように、転送プロトコルとしてマルチキャスト(UDP)またはユニキャスト(UDPU)のいずれかを使用します。
マルチキャストを設定するには、 手順7.1「最初の通信チャネルの定義(マルチキャスト)」を使用します。
ユニキャストを設定するには、 手順7.2「最初の通信チャネルの定義(ユニキャスト)」を使用します。
2つ目の冗長チャンネルも定義する必要がある場合は、上記のいずれかの手順で最初のチャンネルを設定し、 手順7.3「冗長通信チャネルの定義」に進みます。
SUSE Linux Enterprise High Availabilityをパブリッククラウドプラットフォームに展開する場合は、転送プロトコルとしてユニキャストを使用してください。クラウドプラットフォームでは、一般的にマルチキャストでの通信がサポートされていません。
マルチキャストを使用する場合、すべてのクラスタノードに同じbindnetaddr
、mcastaddr
、およびmcastport
が使用されます。クラスタ内のすべてのノードは同じマルチキャストアドレスを使用することで互いを認識します。別のクラスタは、別のマルチキャストアドレスを使用します。
既存のクラスタを変更する場合は、
カテゴリに切り替えます。初期セットアップウィザードに従っている場合は、カテゴリを手動で切り替える必要はありません。
Multicast
に設定します。クラスタノードごとに一意のIDを自動的に生成するには、
を有効にしたままにします。クォーラムを計算する場合に重要です。デフォルトでは、各ノードには
の数を入力します。これは、パーティションされたクラスタでCorosyncが1
票が割り当てられています。 の数は、クラスタ内のノード数と一致する必要があります。Corosyncで冗長な通信チャンネルを定義する必要がある場合は、手順7.3「冗長通信チャネルの定義」に進みます。
それ以外の場合は、
(セットアップウィザード)または (既存のクラスタ)をクリックして変更を確認します。
既存のクラスタを変更する場合は、
カテゴリに切り替えます。初期セットアップウィザードに従っている場合は、カテゴリを手動で切り替える必要はありません。
Unicast
に設定します。ユニキャスト通信では、Corosyncはクラスタ内のすべてのノードのIPアドレスを認識する必要があります。各ノードで、
を選択し、次の詳細情報を入力します。クラスタメンバーのアドレスを変更または削除するには、
または ボタンを使用します。すべてのクラスタノードに対して一意のIDを自動的に生成するには、
を有効にしたままにします。クォーラムを計算する場合に重要です。デフォルトでは、各ノードには
の数を入力します。これは、パーティションされたクラスタでCorosyncが1
票が割り当てられています。 の数は、クラスタ内のノード数と一致する必要があります。Corosyncで冗長な通信チャンネルを定義する必要がある場合は、手順7.3「冗長通信チャネルの定義」に進みます。
それ以外の場合は、
(セットアップウィザード)または (既存のクラスタ)をクリックして変更を確認します。
ネットワークデバイスボンディングが何らかの理由で使用できない場合、第2の選択は、Corosyncに冗長通信チャネル(2つ目のリング)を定義することです。この方法では、2つの物理的に分かれたネットワークが通信に使用できます。1つのネットワークが失敗しても、クラスタノードは、もう一方のネットワークを介して通信できます。
Corosync内の追加の通信チャネルは2つ目のトークンパスリングを形成します。設定した最初のチャンネルはプライマリリングで、リング番号0
を取得します。2つ目のリング(冗長チャネル)はリング番号1
を取得します。
/etc/hosts
Corosync内で複数のリングが設定されている場合、各ノードが複数のIPアドレスを持つことができます。これはすべてのノードの/etc/hosts
に反映する必要があります。
最初のチャンネルを手順7.1「最初の通信チャネルの定義(マルチキャスト)」または手順7.2「最初の通信チャネルの定義(ユニキャスト)」の説明に従って設定します。
マルチキャストを使用する場合は冗長チャンネル用に次のパラメータを入力します: 使用する
、 、および 。ユニキャストを使用する場合は次のパラメータを定義します: 使用する
、および 。 の下で、各エントリを して 、クラスタの一部となる各ノードの を追加します。Corosyncに、異なるチャンネルを使用する方法とタイミングを伝えるには、使用する
を選択します。通信チャンネルが1つだけ定義されている場合、
は自動的に無効化されます(値none
)。active
に設定した場合、Corosyncは両方のインタフェースをアクティブに使用します。ただし、このモードは非推奨の機能です。passive
に設定した場合、Corosyncは代わりに使用可能なネットワークを介してメッセージを送信します。
RRPの使用時に、SUSE Linux Enterprise High Availabilityは現在のリングの状態を監視し、障害発生後に冗長リングを自動的に再度有効化します。
または、
corosync-cfgtool
を使用してリングの状態を手動で確認します。使用可能なオプションは-h
で参照できます。
7.4 クォーラムの決定のためのアービトレータの設定 #
QDeviceおよびQNetdはクォーラムの決定に参加します。アービトレータcorosync-qnetd
からの支援により、corosync-qdevice
は設定可能な投票数を提供するため、クラスタは標準のクォーラムルールで許可されているよりも多くのノード障害に耐えることができます。ノード数が偶数であるクラスタ、特に2ノードクラスタについては、corosync-qnetd
およびcorosync-qdevice
の展開をお勧めします。詳細については、第18章 「QDeviceおよびQNetd」を参照してください。
QDeviceを設定する前に、QNetdサーバを設定する必要があります。18.3項 「QNetdサーバのセットアップ」を参照してください。
既存のクラスタを変更する場合は、
カテゴリに切り替えます。初期セットアップウィザードに従っている場合は、カテゴリを手動で切り替える必要はありません。
TLSが必須ではなく、試行する必要がない場合は、
を使用します。TLSを必須にするには、
を使用します。TLSが利用できない場合、QDeviceはエラーで終了します。
crm cluster init qdevice
を使用して変更できます。ヒューリスティックスを無効にするには、
を使用します。ヒューリスティックスを
で設定した間隔で定期的に実行するには、 を使用します。起動時、クラスタメンバーシップの変更時、およびQNetdへの接続時にのみヒューリスティックスを実行するには、
を使用します。
コマンドの
を入力します。
7.5 認証設定の定義 #
クラスタの認証設定を定義するには、HMAC/SHA1認証を使用できます。共有シークレットが必要なHMAC/SHA認証を使用して、メッセージを保護し、認証する必要があります。指定した認証キー(パスワード)が、クラスタ中のすべてのノードで使用されます。
既存のクラスタを変更する場合は、
カテゴリに切り替えます。初期セットアップウィザードに従っている場合は、カテゴリを手動で切り替える必要はありません。
新しく作成したクラスタの場合は、
を選択します。認証キーが作成され、/etc/corosync/authkey
に書き込まれます。ご使用のマシンを既存のクラスタに参加させたい場合、新しいキーファイルは生成しないでください。代わりに、いずれかのノードから
/etc/corosync/authkey
を(手動またはCsync2によって)ご使用のマシンにコピーします。/etc/corosync/corosync.conf
に書き込みます。
7.6 ファイルを同期するためのCsync2の設定 #
設定ファイルをすべてのノードに手動でコピーする代わりに、csync2
ツールを使用して、クラスタ内のすべてのノードにレプリケートします。Csync2では、設定変更を追跡して、クラスタノード間でファイルの同期を取ることができます。
操作に対して重要なファイルのリストを定義できます。
(他のクラスタノードに対して)これらのファイルの変更を表示できます。
1つのコマンドで複数の設定済みファイルの同期を取ることができます。
~/.bash_logout
の単純なシェルスクリプトを使用して、システムからログアウトする前に、同期化されていない変更について通知できます。
Csync2の詳細については、https://oss.linbit.com/csync2/とhttps://oss.linbit.com/csync2/paper.pdfにアクセスしてください。
Csync2は変更のみをプッシュします。Csync2はマシン間でファイルを絶えず同期しているわけではありません。同期が必要なファイルを更新する際はいつも、変更をその他のマシンにプッシュする必要があります。csync2
を使用して変更をプッシュする方法については、YaSTを使用したクラスタ設定が完了した後に説明します。
既存のクラスタを変更する場合は、
カテゴリに切り替えます。初期セットアップウィザードに従っている場合は、カテゴリを手動で切り替える必要はありません。
同期グループを指定するには、
グループで を選択し、クラスタ内のすべてのノードのローカルホスト名を入力します。ノードごとに、hostname
コマンドから返された文字列を正確に使用する必要があります。ヒント: ホスト名解決ホスト名解決がネットワークで正しく機能しない場合は、各クラスタノードのホスト名とIPアドレスの組み合わせを指定することもできます。この指定には、HOSTNAME@IP文字列(たとえば、
alice@192.168.2.100
)を使用します。Csync2は、接続時にIPアドレスを使用します。
を選択して、同期グループのキーファイルを生成します。キーファイルは、/etc/csync2/key_hagroup
に書き込まれます。すべてのノード間で、通常、同期される必要のあるファイルを
リストに入れるには、 を選択します。同期するファイルのリストからファイルを
、 、または するには、該当する各ボタンを使用します。ファイルごとに絶対パス名を入力する必要があります。
(セットアップウィザード)または (既存のクラスタ)をクリックして変更を確認します。YaSTがCsync2の設定内容を/etc/csync2/csync2.cfg
に書き込みます。
7.7 クラスタノード間の接続ステータスの同期 #
iptablesに対してステートフルなパケット検査ができるようにするには、conntrackツールを設定して使用します。これには、次の基本手順を必要とします。
conntrackd
の設定 #
YaSTクラスタモジュールを使用して、ユーザスペースconntrackd
を設定します(図7.6「YaSTconntrackd
」を参照してください)。これには、その他の通信チャネルに使用されていない専用のネットワークインタフェースが必要です。デーモンは後でリソースエージェントによって起動できます。
-
既存のクラスタを変更する場合は、
カテゴリに切り替えます。初期セットアップウィザードに従っている場合は、カテゴリを手動で切り替える必要はありません。
接続ステータスの同期に使用する
を定義します。conntrackd
の環境設定ファイルを作成します。既存のクラスタでオプションを変更した場合、変更を確認して、クラスタモジュールを終了します。
conntrackツールを設定したら、これをLinux Virtual Serverで使用できます(負荷分散を参照してください)。
conntrackd
- #7.8 サービスの設定 #
YaSTクラスタモジュールで、ブート時にノード上で一定のサービスを開始するかどうか定義します。サービスを手動で開始または停止するためにモジュールを使用することもできます。クラスタノードをオンラインにし、クラスタリソースマネージャを起動するには、Pacemakerをサービスとして実行する必要があります。
このセクションのこの設定は、すべてのクラスタノードではなく、ご使用のマシンにのみ適用されます。
既存のクラスタを変更する場合は、
カテゴリに切り替えます。このセクションのオプションを使用して、このノード上のクラスタサービスを開始および停止できます。初期セットアップウィザードに従っている場合は、カテゴリを手動で切り替える必要はありません。クラスタサービスは後で開始するので、ステップ 5までスキップしても構いません。
このクラスタノードがブートするたびにクラスタサービスを開始するには、
を選択します。 を選択する場合は、このノードがブートするたびに手動でクラスタサービスを開始する必要があります。クラスタサービスを直ちに開始または停止するには、
または を選択します。QDeviceを直ちに開始または停止するには、
または を選択します。クラスタ通信に必要なポートをファイアウォールで開くには、
をアクティブにします。初期セットアップウィザードに従っている場合は、これで初期設定が完了し、YaSTが終了します。7.9項 「すべてのノードへの設定の転送」に進みます。
7.9 すべてのノードへの設定の転送 #
YaSTによるクラスタ設定が完了したら、csync2
を使用して設定ファイルを残りのクラスタノードにコピーします。ファイルを受信するには、ノードが手順7.6「YaSTによるCsync2の設定」で設定した グループに含まれている必要があります。
Csync2を初めて実行する前に、次の準備をする必要があります。
ノード間にパスワード不要のSSHが設定されていることを確認します。これはクラスタ通信に必要です。
ファイル
/etc/csync2/csync2.cfg
をクラスタ内のすべてのノードに手動でコピーします。ファイル
/etc/csync2/key_hagroup
をクラスタ内のすべてのノードに手動でコピーします。このファイルは、Csync2による認証で必要になります。ただし、すべてのノードで同じファイルでなければならないので、他のノードではファイルを再生成しないでください。すべてのノード上で次のコマンドを実行して、サービスを今すぐ有効にして開始します。
#
systemctl enable --now csync2.socket
次の手順を使用して、設定ファイルをすべてのクラスタノードに転送します。
すべてのファイルを一度同期させるには、設定のコピー元であるマシン上で次のコマンドを実行します。
#
csync2 -xv
これによって、すべてのファイルをその他のノードにプッシュすることで、一度に同期を行います。すべてのファイルが正常に同期されると、Csync2がエラーなしで終了します。
同期対象の1つ以上のファイルが(現在のノードだけでなく)他のノード上で変更されている場合は、Csync2から、以下のものと同様の出力との衝突が報告されます。
While syncing file /etc/corosync/corosync.conf: ERROR from peer hex-14: File is also marked dirty here! Finished with 1 errors.
現在のノードのファイルバージョンが「最良」だと確信する場合は、そのファイルを強制して再同期を行い、競合を解決できます。
#
csync2 -f /etc/corosync/corosync.conf
#
csync2 -xv
Csync2オプションの詳細については、次のコマンドを実行してください
#
csync2 --help
Csync2は変更のみをプッシュします。Csync2はマシン間でファイルを絶えず同期しているわけではありません。
同期が必要なファイルを更新する際はいつも、変更を加えたマシン上でcsync2 -xv
を実行することで、変更をその他のマシンにプッシュする必要があります。変更されていないファイルが配置された他のマシン上でこのコマンドを実行しても、何も起こりません。
7.10 クラスタをオンラインにする #
最初のクラスタ設定が完了した後、すべてのクラスタノード上でクラスタサービスを開始し、スタックをオンラインにします。
既存のノードにログインします。
すべてのクラスタノード上でクラスタサービスを開始します。
#
crm cluster start --all
このコマンドにはノード間のパスワード不要のSSHアクセスが必要です。
crm cluster start
を使用して個々のノードを起動することもできます。クラスタのステータスを
crm status
コマンドで確認します。すべてのノードがオンラインの場合、出力は次のようになります。#
crm status
Cluster Summary: * Stack: corosync * Current DC: alice (version ...) - partition with quorum * Last updated: ... * Last change: ... by hacluster via crmd on bob * 2 nodes configured * 1 resource instance configured Node List: * Online: [ alice bob ] ...この出力は、クラスタリソースマネージャが起動し、リソースを管理できる状態にあることを示しています。
サポートされるには、SUSE Linux Enterprise High AvailabilityクラスタでSTONITH (ノードフェンシング)が有効になっている必要があります。ノードフェンシングメカニズムは、物理デバイス(電源スイッチ)でも、SBDのようなメカニズムとウォッチドッグを組み合わせたものでも構いません。クラスタの使用を続ける前に、1つ以上のSTONITHデバイスを第16章 「フェンシングとSTONITH」または第17章 「ストレージ保護とSBD」の説明に従って設定してください。