4 YaSTクラスタモジュールの使用 #
YaSTクラスタモジュールでは、クラスタを手動で(最初から)設定するか、既存のクラスタのオプションを変更することができます。
ただし、クラスタの設定に自動化された方法を選ぶ場合は、インストールとセットアップクイックスタートを参照してください。このマニュアルでは、必要なパッケージのインストール方法と、crmによって提供されているブートストラップスクリプトを使用して基本的な2ノードクラスタを設定する手順を説明しています。
たとえば、1つのノードをYaSTクラスタで設定してから、ブートストラップスクリプトの1つを使用して他のノードを統合させる(またはその逆も可能)など、両方のセットアップ方法を組み合わせることもできます。
4.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設定を持ちますが、必ずしもリソース設定を持つとは限りません。
- マルチキャスト
ネットワーク内で一対多数の通信に使用される技術で、クラスタ通信に使用できます。Corosyncはマルチキャストとユニキャストの両方をサポートしています。
注記: スイッチとマルチキャストクラスタ通信にマルチキャストを使用するには、ご使用のスイッチがマルチキャストをサポートしていることを確認します。
- マルチキャストアドレス (
mcastaddr
) Corosyncエグゼクティブによるマルチキャストに使用されるIPアドレス。このIPアドレスはIPv4またはIPv6のいずれかに設定できます。IPv6ネットワークを使用する場合は、ノードのIDを指定する必要があります。プライベートネットワークでは、どのようなマルチキャストアドレスでも使用できます。
- マルチキャストポート(
mcastport
) クラスタ通信に使用されるポート。Corosyncでは、マルチキャストの受信用に指定する
mcastport
と、マルチキャストの送信用のmcastport -1
の、2つのポートを使用します。- 冗長リングプロトコル(RRP)
ネットワーク障害の一部または全体に対する災害耐性のために、複数の冗長ローカルエリアネットワークが使用できるようになります。この方法では、1つのネットワークが作動中である限り、クラスタ通信を維持できます。Corosyncはトーテム冗長リングプロトコルをサポートします。信頼できるソートされた方式でメッセージを配信するために、論理トークンパスリングがすべての参加ノードに課せられます。ノードがメッセージをブロードキャストできるのは、トークンを保持している場合のみです。
Corosyncに定義済みの冗長通信チャネルを持つ場合、RRPを使用してこれらのインタフェースの使用方法をクラスタに伝えます。RRPでは次の3つのモードを使用できます(
rrp_mode
)。active
に設定した場合、Corosyncは両方のインタフェースをアクティブに使用します。ただし、このモードは非推奨の機能です。passive
に設定した場合、Corosyncは代わりに使用可能なネットワークを介してメッセージを送信します。none
に設定した場合、RRPは無効になります。
- ユニキャスト
1つのあて先ネットワークにメッセージを送信する技術Corosyncはマルチキャストとユニキャストの両方をサポートしています。Corosyncでは、ユニキャストはUDP-unicast (UDPU)として実装されます。
4.2 YaST モジュール #
YaSTを起動して、
› を選択します。または、コマンドラインでモジュールを開始します。sudo yast2 cluster
次のリストは、YaSTクラスタモジュールで使用可能な画面の概要を示しています。この画面には、クラスタセットアップの成功に必要なパラメータが含まれているかどうか、またはそのパラメータがオプションであるかどうかも説明されています。
- 通信チャネル(必須)
クラスタノード間の通信に1つまたは2つの通信チャネルを定義できます。転送プロトコルとして、マルチキャスト(UDP)またはユニキャスト(UDPU)のいずれかを使用します。詳細については、4.3項 「通信チャネルの定義」を参照してください。
重要: 冗長通信パスサポートされるクラスタセットアップでは、2つ以上の冗長通信パスが必要です。推奨される方法は、第16章 「ネットワークデバイスボンディング」で説明されるように、ネットワークデバイスボンディングを使用することです。
使用できない場合は、Corosync内にの2つ目の通信チャネルを定義する必要があります。
- セキュリティ(オプションだが推奨)
クラスタの認証設定を定義できます。共有シークレットが必要なHMAC/SHA1認証を使用して、メッセージを保護し、認証することができます。詳細については、4.4項 「認証設定の定義」を参照してください。
- Csync2の設定(オプションだが推奨)
Csync2では、設定変更を追跡して、クラスタノード間でファイルの同期を取ることができます。詳細については、4.7項 「すべてのノードへの設定の転送」を参照してください。
- conntrackdの設定(オプション)
ユーザスペース
conntrackd
を設定できます。iptablesでの「ステートフルな」パケット検査のためにconntrackツールを使用します。詳細については、4.5項 「クラスタノード間の接続ステータスの同期」を参照してください。- サービス(必須)
クラスタノードをオンラインにするためにサービスを設定できます。ブート時にクラスタサービスを開始するかどうか、およびノード間の通信に必要なポートをファイアウォールで開くかどうかを定義します。詳細については、4.6項 「サービスの設定」を参照してください。
初めてクラスタモジュールを起動した場合は、モジュールが、ウィザードのように、基本設定に必要なすべてのステップをガイドします。そうでない場合は、左パネルのカテゴリをクリックして、ステップごとに設定オプションにアクセスします。
YaSTクラスタモジュール内の特定の設定は、現在のノードにのみ適用されます。他の設定はCsync2を使用してすべてのノードに自動的に転送できます。これについての詳しい情報は次のセクションを参照してください。
4.3 通信チャネルの定義 #
クラスタノード間で正常な通信を行うには、少なくとも1つの通信チャネルを定義します。手順 4.1または手順 4.2のそれぞれで説明されるように、転送プロトコルとしてマルチキャスト(UDP)またはユニキャスト(UDPU)のいずれかを使用します。2番目の冗長チャネル(手順 4.3)を定義する場合は、両方の通信チャネルで「同じ」プロトコルを使用する必要があります。
SUSE Linux Enterprise High Availabilityをパブリッククラウドプラットフォームに展開する場合は、ユニキャストで通信してください。クラウドプラットフォームでは、一般的にマルチキャストでの通信がサポートされていません。
YaST/etc/corosync/corosync.conf
に書き込まれます。マルチキャストとユニキャストの設定のサンプルファイルは/usr/share/doc/packages/corosync/
にあります。
IPv4アドレスを使用する場合、ノードIDはオプションです。IPv6アドレスを使用する場合、ノードIDは必須です。各ノードにIDを手動で指定する代わりに、YaSTクラスタモジュールには、クラスタノードごとに固有のIDを自動的に生成するオプションが含まれています。
マルチキャストを使用する場合、すべてのクラスタノードに同じbindnetaddr
、mcastaddr
、およびmcastport
が使用されます。クラスタ内のすべてのノードは同じマルチキャストアドレスを使用することで互いを認識します。別のクラスタは、別のマルチキャストアドレスを使用します。
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。Multicast
に設定します。クラスタノードごとに一意のIDを自動的に生成するには、
を有効にしたままにします。クォーラムを計算する場合に重要です。デフォルトでは、各ノードには
の数を入力します。これは、パーティションされたクラスタでCorosyncが1
票が割り当てられています。 の数は、クラスタ内のノード数と一致する必要があります。変更内容を確認します。
必要な場合は、手順4.3「冗長通信チャネルの定義」で説明するように、Corosyncで冗長な通信チャネルを定義します。
クラスタ通信にマルチキャストではなくユニキャストを使用する場合は、次の手順に従います。
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。Unicast
に設定します。ユニキャスト通信では、Corosyncはクラスタ内のすべてのノードのIPアドレスを認識する必要があります。各ノードで、
をクリックし、次の詳細情報を入力します。クラスタメンバーのアドレスを変更または削除するには、
または ボタンを使用します。クラスタノードごとに一意のIDを自動的に生成するには、
を有効にしたままにします。クォーラムを計算する場合に重要です。デフォルトでは、各ノードには
の数を入力します。これは、パーティションされたクラスタでCorosyncが1
票が割り当てられています。 の数は、クラスタ内のノード数と一致する必要があります。変更内容を確認します。
必要な場合は、手順4.3「冗長通信チャネルの定義」で説明するように、Corosyncで冗長な通信チャネルを定義します。
ネットワークデバイスボンディングが何らかの理由で使用できない場合、第2の選択は、Corosyncに冗長通信チャネル(2つ目のリング)を定義することです。この方法では、2つの物理的に分かれたネットワークが通信に使用できます。1つのネットワークが失敗しても、クラスタノードは、もう一方のネットワークを介して通信できます。
Corosync内の追加の通信チャネルは2つ目のトークンパスリングを形成します。/etc/corosync/corosync.conf
では、設定した最初のチャネルはプライマリリングで、リング番号0
を取得します。2つ目のリング(冗長チャネル)はリング番号1
を取得します。
Corosyncに定義済みの冗長通信チャネルを持つ場合、RRPを使用してこれらのインタフェースの使用方法をクラスタに伝えます。RRPでは、2つの物理的に別個のネットワークが通信に使用されます。1つのネットワークが失敗しても、クラスタノードは、もう一方のネットワークを介して通信できます。
RRPでは次の3つのモードを使用できます。
active
に設定した場合、Corosyncは両方のインタフェースをアクティブに使用します。ただし、このモードは非推奨の機能です。passive
に設定した場合、Corosyncは代わりに使用可能なネットワークを介してメッセージを送信します。none
に設定した場合、RRPは無効になります。
/etc/hosts
Corosync内で複数のリングが設定されている場合、各ノードが複数のIPアドレスを持つことができます。これはすべてのノードの/etc/hosts
に反映する必要があります。
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。マルチキャストを使用する場合は冗長チャネル用に次のパラメータを入力します: 使用する
、 、および 。ユニキャストを使用する場合は次のパラメータを定義します: 使用する
、および 。クラスタに参加するすべてのノードのIPアドレスを入力します。Corosyncに、異なるチャネルを使用する方法とタイミングを伝えるには、使用する
を選択します。通信チャネルが1つだけ定義されている場合、
が自動的に無効化されます(値none
)。active
に設定した場合、Corosyncは両方のインタフェースをアクティブに使用します。ただし、このモードは非推奨の機能です。passive
に設定した場合、Corosyncは代わりに使用可能なネットワークを介してメッセージを送信します。
RRPの使用時に、SUSE Linux Enterprise High Availabilityは現在のリングの状態を監視し、障害発生後に冗長リングを自動的に再度有効化します。
または、
corosync-cfgtool
を使用してリングの状態を手動で確認します。使用可能なオプションは-h
で参照できます。変更内容を確認します。
4.4 認証設定の定義 #
クラスタの認証設定を定義するには、HMAC/SHA1認証を使用できます。共有シークレットが必要なHMAC/SHA認証を使用して、メッセージを保護し、認証する必要があります。指定した認証キー(パスワード)が、クラスタ中のすべてのノードで使用されます。
YaSTクラスタモジュールを起動し、
カテゴリに切り替えます。新しく作成したクラスタの場合は、
をクリックします。認証キーが作成され、/etc/corosync/authkey
に書き込まれます。ご使用のマシンを既存のクラスタに参加させたい場合、新しいキーファイルは生成しないでください。代わりに、いずれかのノードから
/etc/corosync/authkey
を(手動またはCsync2によって)ご使用のマシンにコピーします。変更内容を確認します。YaSTが設定を
/etc/corosync/corosync.conf
に書き込みます。
4.5 クラスタノード間の接続ステータスの同期 #
iptablesに対してステートフルなパケット検査ができるようにするには、conntrackツールを設定して使用します。これには、次の基本手順を必要とします。
conntrackd
の設定 #
YaSTクラスタモジュールを使用して、ユーザスペースconntrackd
を設定します(図4.4「YaSTconntrackd
」を参照してください)。これには、その他の通信チャネルに使用されていない専用のネットワークインタフェースが必要です。デーモンは後でリソースエージェントによって起動できます。
—
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。接続ステータスの同期に使用する
を定義します。conntrackd
の設定ファイルを作成します。既存のクラスタでオプションを変更した場合、変更を確認して、クラスタモジュールを終了します。
クラスタ設定を先に進めるには、4.6項 「サービスの設定」で続行します。
をクリックして、
conntrackd
— #conntrackツールを設定したら、これをLinux Virtual Serverで使用できます(負荷分散を参照してください)。
4.6 サービスの設定 #
YaSTクラスタモジュールは、ブート時にノード上で一定のサービスを開始するかどうか定義します。サービスを手動で開始または停止するためにモジュールを使用することもできます。クラスタノードをオンラインにし、クラスタリソースマネージャを起動するには、Pacemakerをサービスとして実行する必要があります。
YaSTクラスタモジュール内で、
カテゴリに切り替えます。このクラスタノードがブートするたびにクラスタサービスを開始するには、
グループで該当するオプションを選択します。 グループで、 を選択する場合は、このノードがブートするたびに手動でクラスタサービスを開始する必要があります。クラスタサービスを手動で開始するには、次のコマンドを使用します:#
crm cluster start
クラスタサービスを直ちに開始または停止するには、それぞれのボタンをクリックします。
現在のマシン上でのクラスタ通信に必要なポートをファイアウォールで開くには、
をアクティブにします。変更内容を確認します。この設定は、すべてのクラスタノードではなく、ご使用のマシンにのみ適用されることにご注意ください。
4.7 すべてのノードへの設定の転送 #
結果として生成された設定ファイルをすべてのノードに手動でコピーする代わりに、csync2
ツールを使用して、クラスタ内のすべてのノードにレプリケートします。
これには、次の基本手順を必要とします。
YaSTによるCsync2の設定ボタンをクリックします。
Csync2による設定ファイルの同期ボタンをクリックします。
Csync2では、設定変更を追跡して、クラスタノード間でファイルの同期を取ることができます。
操作に対して重要なファイルのリストを定義できます。
(他のクラスタノードに対して)これらのファイルの変更を表示できます。
1つのコマンドで複数の設定済みファイルの同期を取ることができます。
~/.bash_logout
の単純なシェルスクリプトを使用して、システムからログアウトする前に、同期化されていない変更について通知できます。
Csync2の詳細については、https://oss.linbit.com/csync2/とhttps://oss.linbit.com/csync2/paper.pdfにアクセスしてください。
4.7.1 YaSTによるCsync2の設定 #
YaSTクラスタモジュールを起動して、
カテゴリに切り替えます。同期グループを指定するには、
グループで をクリックし、クラスタ内のすべてのノードのローカルホスト名を入力します。ノードごとに、hostname
コマンドから返された文字列を正確に使用する必要があります。ヒント: ホスト名解決ホスト名解決がネットワークで正しく機能しない場合は、各クラスタノードのホスト名とIPアドレスの組み合わせを指定することもできます。この指定には、HOSTNAME@IP文字列(たとえば、
alice@192.168.2.100
)を使用します。Csync2は、接続時にIPアドレスを使用します。/etc/csync2/key_hagroup
に書き込まれます。このファイルは、作成後に、クラスタのすべてのメンバーに手動でコピーする必要があります。すべてのノード間で、通常、同期される必要のあるファイルを
リストに入れるには、 をクリックします。同期するファイルのリストからファイルを
、 、または するには、該当する各ボタンを使用します。ファイルごとに絶対パス名を入力する必要があります。#
systemctl enable csync2.socket
をクリックします。YaSTがCsync2の設定内容を/etc/csync2/csync2.cfg
に書き込みます。
4.7.2 Csync2を使用した変更内容の同期 #
Csync2を初めて実行する前に、次の準備をする必要があります。
ファイル
/etc/csync2/csync2.cfg
を、4.7.1項 「YaSTによるCsync2の設定」で説明されるとおりに設定した後、すべてのノードに手動でコピーします。4.7.1項のステップ 3の1つのノードで作成した
/etc/csync2/key_hagroup
ファイルを、クラスタ内の「すべての」ノードにコピーしてください。このファイルは、Csync2による認証で必要になります。ただし、すべてのノードで同じファイルでなければならないので、他のノードではファイルを再生成しないでください。すべてのノード上で次のコマンドを実行して、Csync2サービスを今すぐ開始します。
#
systemctl start 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 -x
Csync2オプションの詳細については、次のコマンドを実行してください
#
csync2 -help
Csync2は変更のみをプッシュします。Csync2はマシン間でファイルを絶えず同期しているわけではありません。
同期が必要なファイルを更新する際はいつも、変更を加えたマシン上でcsync2
-xv
を実行することで、変更をその他のマシンにプッシュする必要があります。変更されていないファイルが配置された他のマシン上でこのコマンドを実行しても、何も起こりません。
4.8 クラスタをオンラインにする #
最初のクラスタ設定が完了した後、すべてのクラスタノード上でクラスタサービスを開始し、スタックをオンラインにします。
既存のノードにログインします。
すべてのクラスタノード上でクラスタサービスを開始します。
#
crm cluster start --all
このコマンドにはノード間のパスワード不要のSSHが必要です。パスワード不要の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 ] ...この出力は、クラスタリソースマネージャが起動し、リソースを管理できる状態にあることを示しています。
基本設定を完了し、ノードがオンラインになったら、クラスタリソースの設定を開始できます。crmシェル(crmsh)やHawk2などのクラスタ管理ツールのいずれかを使用します。詳細については、5.5項 「crmshの概要」または5.4項 「Hawk2の概要」を参照してください。