基本的な3ノード高可用性クラスタのインストール
- 概要
ディスクレスSBDとソフトウェアウォッチドッグを使用した基本的な3ノード高可用性クラスタの設定方法。
- 目的
このクラスタは、テスト目的で使用することも、後で拡張可能な最小クラスタ設定として使用することもできます。
- 所要時間
基本的な高可用性クラスタの設定には、ネットワーク接続の速度にもよりますが、15分ほどを要します。
- 目標
SUSE Linux Enterprise High Availabilityをすばやく簡単に使い始めます。
1 使用シナリオ #
このガイドでは、以下の特性を持つ最小限の高可用性クラスタのセットアップについて説明します。
相互にパスワード不要のSSHアクセスが可能な3つのクラスタノード。ディスクレスSBDがQDeviceの助けを借りずにスプリットブレインシナリオを処理できるように、このセットアップには3つのノードが必要です。
サービスがどのノードで実行されていても、クライアントからのグラフィカル管理ツールHawkへの接続を可能にする浮動仮想IPアドレス。
スプリットブレインシナリオを回避するためのノードフェンシングメカニズムとして使用されるディスクレスSBD (STONITHブロックデバイス)とソフトウェアウォッチドッグ。
アクティブなホストが停止した場合における、あるノードから別のノードへのリソースのフェールオーバー(アクティブ/パッシブセットアップ)。
これは、外部要件を最小限に抑えたシンプルなクラスタセットアップです。このクラスタは、テスト目的で使用することも、後で運用環境向けに拡張可能な基本的なクラスタ設定として使用することもできます。
2 インストールの概要 #
1項 「使用シナリオ」で説明する高可用性クラスタをインストールするには、以下のタスクを実行する必要があります。
3項 「システム要件」を確認し、必要なものがすべて揃っていることを確認します。
4項 「High Availability Extensionの有効化」 に従って、クラスタノードにSUSE Linux Enterprise High Availabilityをインストールします。
5項 「最初のノードの設定」に従って、最初のノードでクラスタを初期化します。
6項 「2つ目と3つ目のノードの追加」に従って、他のノードをクラスタに追加します。
7項 「Hawkへのログイン」に従って、Hawk Webインタフェースにログインして、クラスタを監視します。
8項 「クラスタのテスト」に従って 、クラスタが期待どおりに動作することを確認するための基本的なテストを実行します。
運用環境用にクラスタを拡張する際のアドバイスについては、9項 「次のステップ」を参照します。
3 システム要件 #
このセクションでは、SUSE Linux Enterprise High Availabilityの最小セットアップのシステム要件について説明します。
3.1 ハードウェア要件 #
- サーバ
クラスタノードとして動作する3台のサーバ。
サーバはベアメタルでも仮想マシンでも構いません。各サーバが同一のハードウェア設定(メモリ、ディスクスペースなど)になっている必要はありませんが、アーキテクチャは同じである必要があります。クロスプラットフォームのクラスタはサポートされていません。
サーバハードウェアの詳細については、https://www.suse.com/download/sle-ha/の「System Requirements」セクションを参照してください。
- ネットワークインタフェースカード(NIC)
クラスタノードあたり少なくとも2つのNIC。これにより、以下のいずれかの方法を使用して、クラスタに2つ以上の通信チャネルを設定できます。
NICをネットワークボンドに結合する(推奨)。この場合、クラスタを初期化する前に各ノードでボンドデバイスを設定する必要があります。
Corosync内に2つ目の通信チャネルを作成する。これはクラスタセットアップスクリプトで設定できます。この場合、2つのNICは異なるサブネット上に存在する必要があります。
- STONITH (ノードフェンシング)
サポートされるには、すべてのSUSE Linux Enterprise High Availabilityクラスタに、スプリットブレインシナリオを回避するための少なくとも1つのノードフェンシング(STONITH)デバイスが必要です。これは、物理デバイス(電源スイッチ)でも、ウォッチドッグと組み合わせたSBD (STONITHブロックデバイス)でも構いません。SBDは、共有ストレージまたはディスクレスモードのいずれかで使用できます。
このガイドで説明する最小セットアップでは、ソフトウェアウォッチドッグとディスクレスSBDを使用するため、追加のハードウェアは必要ありません。運用環境でこのクラスタを使用する前に、ソフトウェアウォッチドッグをハードウェアウォッチドッグに置き換えてください。
3.2 ソフトウェアの必要条件 #
- オペレーティングシステム
すべてのノードにSUSE Linux Enterprise Serverがインストールされ、登録されている必要があります。
- High Availability Extension
SUSE Linux Enterprise High Availability Extensionには、追加の登録コードが必要です。
この拡張機能は、SLESのインストール中に有効にするか、実行中のシステムで後で有効にすることができます。このガイドでは、実行中のシステムで拡張機能を有効にして登録する方法を説明します。
3.3 ネットワーク要件 #
- 時刻同期
すべてのシステムはクラスタ外のNTPサーバに同期する必要があります。SUSE Linux Enterprise ServerはNTPに
chronyを使用します。クラスタを初期化する際、chronyが実行されていないと警告が表示されます。ノードが同期されていても、ノードに設定されたタイムゾーンが異なると、ログファイルやクラスタレポートの分析が困難になることがあります。
- ホスト名およびIPアドレス
すべてのクラスタノードは名前で互いを検出できる必要があります。信頼性の高い名前解決を行うには、以下の方法を使用します。
静的IPアドレスを使用します。
/etc/hostsファイル内のすべてのノードを、IPアドレス、FQDN、短いホスト名とともに一覧表示します。
各NICのプライマリIPアドレスのみがサポートされます。
- SSH
すべてのクラスタノードはSSHによって互いにアクセスできる必要があります。特定のクラスタ操作では、パスワード不要のSSH認証も必要です。クラスタを初期化すると、セットアップスクリプトは、既存のSSHキーがあるかどうかを確認し、ない場合には生成します。
重要: SUSE Linux Enterprise 16におけるrootSSHアクセスSUSE Linux Enterprise 16では、パスワードによる
rootSSHログインはデフォルトで無効になっています。各ノードで、クラスタを初期化する前に、
sudo特権を持つユーザを作成するか、rootユーザにパスワード不要のSSH認証を設定します。sudoユーザでクラスタを初期化する場合、特定のcrmshコマンドにもパスワード不要のsudo権限が必要です。
4 High Availability Extensionの有効化 #
この手順では、既存のSUSE Linux Enterprise ServerにSUSE Linux Enterprise High Availabilityをインストールする方法を説明します。Agamaを使用したSLESのインストール中にHigh Availability Extensionとパッケージをすでにインストールしている場合は、この手順を省略できます。
SUSE Linux Enterprise Serverがインストールされ、SUSEカスタマーセンターに登録されている。
SUSE Linux Enterprise High Availabilityの追加の登録コードがある。
クラスタノードとして使用するすべてのマシンでこの手順を実行します。
rootユーザまたはsudo特権を持つユーザとしてログインします。High Availability Extensionがすでに有効になっているかどうかを確認します。
>sudo SUSEConnect --list-extensionsHigh Availabilityパッケージがすでにインストールされているかどうかを確認します。
>zypper search ha_slesSUSE Linux Enterprise High Availability Extensionを有効にします。
>sudo SUSEConnect -p sle-ha/16.0/x86_64 -r HA_REGCODEHigh Availabilityパッケージをインストールします。
>sudo zypper install -t pattern ha_sles
5 最初のノードの設定 #
SUSE Linux Enterprise High Availabilityには、クラスタのインストールを簡素化するセットアップスクリプトが含まれています。最初のノードでクラスタを設定するには、crm cluster init スクリプトを使用します。
5.1 crm cluster initスクリプトの概要 #
crm cluster initコマンドは、クラスタ通信に必要な基本パラメータを定義するスクリプトを起動し、その結果、動作する1ノードクラスタが作成されます。
このスクリプトが確認および設定するコンポーネントは、次のとおりです。
- NTP
chronyがブート時に開始するように設定されているかどうかをチェックします。設定されていない場合は、メッセージが表示されます。- SSH
クラスタノード間でパスワード不要のログインを行うためのSSHキーを検出または生成します。
- ファイアウォール
クラスタ通信に必要なポートをファイアウォールで開きます。
- Csync2
クラスタ内のすべてのノードで設定ファイルを複製するようにCsync2を設定します。
- Corosync
クラスタ通信システムを設定します。
- SBD/ウォッチドッグ
ウォッチドッグが存在するかどうかをチェックし、SBDをノードフェンシングメカニズムとして設定するかどうか確認メッセージを表示します。
- Hawkクラスタの管理
Hawkサービスを有効にし、Hawk WebインタフェースのURLを表示します。
- 仮想浮動IP
Hawk Webインタフェースに仮想IPアドレスを設定するかどうか確認メッセージを表示します。
- QDevice/QNetd
QDevice/QNetdを設定してクォーラムの決定に参加するかどうか確認メッセージを表示します。これは、ノード数が偶数であるクラスタ、特に2ノードクラスタの場合に推奨されます。
crm cluster initスクリプトによって設定されるオプションは、Pacemakerのデフォルト設定と同じではない場合があります。スクリプトが変更した設定は/var/log/crmsh/crmsh.logで確認できます。ブートストラッププロセス中に設定されたオプションは、crmshで後で変更できます。
crm cluster initスクリプトは、システム環境(Microsoft Azureなど)を検出し、その環境のプロファイルに基づいて特定のクラスタ設定を調整します。詳細については、ファイル/etc/crm/profiles.ymlを参照してください。
5.2 最初のノードでのクラスタの初期化 #
crm cluster initスクリプトを使用して、最初のノードでクラスタを設定します。スクリプトは、クラスタに関する基本情報の入力を求め、必要な設定とサービスを構成します。詳細については、crm cluster init --helpコマンドを実行してください。
SUSE Linux Enterprise High Availabilityがインストールされ、最新の状態である。
すべてのノードに、2つ以上のネットワークインタフェースまたは1つのネットワークボンドがあり、各ノードのFQDNと短いホスト名とともに静的IPアドレスが
/etc/hostsファイルに記載されている。
この手順は1つのノードに対してのみ実行します。
rootユーザまたはsudo特権を持つユーザとして最初のノードにログインします。crm cluster initスクリプトを起動します。>sudo crm cluster initスクリプトは、
chronyが実行されているかどうかを確認し、必要なファイアウォールポートを開き、Csync2を設定し、SSHキーを確認します。SSHキーがない場合は、スクリプトによって生成されます。クラスタ通信用にCorosyncを設定します。
最初の通信チャネル(
ring0)のIPアドレスを入力します。デフォルトでは、スクリプトは最初の利用可能なネットワークインタフェースのアドレスを提案します。これは、個々のインタフェースか、ボンドデバイスのいずれかです。このアドレスを受け入れるか、別のアドレスを入力してください。スクリプトが複数のネットワークインタフェースを検出した場合、2つ目の通信チャネル(
ring1)を設定するかどうか確認メッセージを表示します。最初のチャネルをボンドデバイスで設定した場合、nで拒否できます。2つ目のチャネルを設定する必要がある場合は、yで確定し、別のネットワークインタフェースのIPアドレスを入力します。2つのインタフェースは異なるサブネット上に存在する必要があります。
スクリプトは、Corosync通信用のデフォルトのファイアウォールポートを設定します。
SBDをノードフェンシングメカニズムとして設定するかどうかを選択します。
<
y>キーを押して、SBDを使用することを確認します。ブロックデバイスへのパスの入力を求められたら、「
none」と入力し、ディスクレスSBDを設定します。
スクリプトは、関連するタイムアウト設定を含む、SBDを設定します。ディスクベースのSBDとは異なり、ディスクレスSBDはSTONITHクラスタリソースを必要としません。
ハードウェアウォッチドッグが利用できない場合、スクリプトはソフトウェアウォッチドッグ
softdogを設定します。Hawk Webインタフェースでクラスタを管理するための仮想IPアドレスを設定します。
<
y>キーを押して、仮想IPアドレスを設定することを確認します。Hawkの管理IPとして使用する、未使用のIPアドレスを入力します。
個々のクラスタノードでHawkにログインする代わりに、その仮想IPアドレスに接続できるようになります。
QDeviceおよびQNetdを設定するかどうかを選択します。
このドキュメントで説明されている最小限のセットアップについては、
nで拒否してください。
スクリプトはクラスタサービスを開始し、クラスタをオンラインにして、Hawkを有効にします。Hawkに使用するURLが画面に表示されます。また、crm statusコマンドでクラスタのステータスを確認することもできます。
haclusterのセキュリティ保護されたパスワード
crm cluster initスクリプトはデフォルトのクラスタユーザとパスワードを作成します。デフォルトのパスワードはできるだけ早くセキュリティ保護されたパスワードに変更します。
>sudo passwd hacluster
6 2つ目と3つ目のノードの追加 #
crm cluster joinスクリプトを使用して、他のノードをクラスタに追加します。スクリプトは既存のクラスタノードへのアクセスのみが必要で、ご使用のマシンで自動的に基本セットアップを完了します。詳細については、crm cluster join --helpコマンドを実行してください。
SUSE Linux Enterprise High Availabilityがインストールされ、最新の状態である。
既存のクラスタが、少なくとも1つのノードですでに実行されている。
すべてのノードに、2つ以上のネットワークインタフェースまたは1つのネットワークボンドがあり、各ノードのFQDNと短いホスト名とともに静的IPアドレスが
/etc/hostsファイルに記載されている。sudoユーザとしてログインする場合:すべてのノードに同じユーザが存在する必要があります。このユーザには、パスワード不要のsudo権限が必要です。rootユーザとしてログインする場合:パスワード不要のSSH認証がすべてのノードで設定されている必要があります。
追加の各ノードで以下の手順を実行します。
最初のノードの設定に使用したユーザと同じユーザとして、このノードにログインします。
crm cluster joinスクリプトを起動します。最初のノードを
rootとして設定した場合は、追加のパラメータなしでスクリプトを起動できます。#crm cluster join最初のノードを
sudoユーザとして設定する場合は、-cオプションでそのユーザを指定する必要があります。>sudo crm cluster join -c USER@NODE1
スクリプトは、
chronyが実行されているかどうかを確認し、必要なファイアウォールポートを開き、Csync2を設定します。まだ
-cを使用して最初のノードを指定していない場合は、そのIPアドレスまたはホスト名の入力を求められます。ノード間にパスワード不要のSSH認証をまだ設定していない場合、既存の各ノードのパスワードの入力を求められます。
クラスタ通信用にCorosyncを設定します。
スクリプトは
ring0用のIPアドレスを提案します。このIPアドレスは、最初のノードでring0に使用したIPアドレスと同じサブネット上に存在する必要があります。そうでない場合は、正しいIPアドレスを入力してください。クラスタに2つのCorosync通信チャネルが設定されている場合、スクリプトは
ring1用のIPアドレスの入力を求めます。このIPアドレスは、最初のノードでring1に使用したIPアドレスと同じサブネット上に存在する必要があります。
スクリプトは最初のノードからクラスタ設定をコピーし、新しいノードを考慮するようにタイムアウト設定を調整し、新しいノードをオンラインにします。
crm statusコマンドでクラスタのステータスを確認することができます。
haclusterのセキュリティ保護されたパスワード
crm cluster joinスクリプトはデフォルトのクラスタユーザとパスワードを作成します。各ノードで、デフォルトのパスワードはできるだけ早くセキュリティ保護されたパスワードに変更します。
>sudo passwd hacluster
7 Hawkへのログイン #
Hawkを使用すると、グラフィカルなWebブラウザを使用して高可用性クラスタを監視および管理できます。また、実行しているノードがどれであれ、クライアントからのHawkへの接続を可能にする仮想IPアドレスを設定することもできます。
クライアントマシンはクラスタノードに接続できる必要があります。
クライアントマシンには、JavaScriptとクッキーが有効なグラフィカルWebブラウザが必要です。
この手順は、クラスタノードに接続できるマシンであれば、どのマシンでも実行できます。
Webブラウザを起動し、次のURLを入力します。
https://HAWKSERVER:7630/
HAWKSERVERは、クラスタノードのIPアドレスまたはホスト名、またはHawk仮想IPアドレスが設定されている場合はそのアドレスに置き換えてください。
注記: 証明書の警告初めてURLにアクセスするときに証明書の警告が表示される場合は、自己署名証明書が使用されています。証明書を検証するには、クラスタオペレータに証明書の詳細を求めます。続行するには、ブラウザに例外を追加して警告をバイパスします。
Hawkのログイン画面で、
haclusterユーザのとを入力します。をクリックします。Hawk Webインタフェースには、デフォルトで画面が表示されます。
8 クラスタのテスト #
次のテストは、クラスタのセットアップに関する基本的な問題を特定するのに役立ちます。ただし、現実的なテストには、具体的なユースケースやシナリオが含まれます。運用環境でクラスタを使用する前に、ご自分のユースケースに従ってクラスタを十分にテストしてください。
8.1 リソースフェールオーバーのテスト #
現在のノードがstandby に設定されている場合、クラスタがリソースを別のノードに移動するかどうかを確認します。この手順では、aliceとbobというサンプルノードと、admin-ipという仮想IPリソースを、192.168.1.10というサンプルIPアドレスで使用します。
2つの端末を開きます。
最初の端末で、仮想IPアドレスにpingを実行します。
>ping 192.168.1.102つ目の端末で、クラスタノードの1つにログインします。
仮想IPアドレスがどのノードで実行されているかを確認します。
>sudo crm status[..] Node List: * Online: [ alice bob ] Full List of Resources: * admin-ip (ocf:heartbeat:IPaddr2): Started alicealiceをスタンバイモードにします。>sudo crm node standby aliceクラスタの状態を再度確認します。リソース
admin-ipはbobに移行しているはずです。>sudo crm status[...] Node List: * Node alice: standby * Online: [ bob ] Full List of Resources: * admin-ip (ocf:heartbeat:IPaddr2): Started bob最初の端末で、マイグレーション中も、仮想IPアドレスに対して連続してpingが実行されます。これは、クラスタセットアップと浮動IPアドレスが正常に機能していることを示します。
Ctrl–Cを押して
pingコマンドをキャンセルします。2つ目の端末で、
aliceをオンラインに戻します。>sudo crm node online alice
8.2 クラスタ障害のテスト #
crm cluster crash_testコマンドは、クラスタの障害をシミュレートし、結果を報告します。
このコマンドは以下のチェックをサポートします。
-
--split-brain-iptables Corosyncポートをブロックすることでスプリットブレインシナリオをシミュレートし、1つのノードが予期されるようにフェンシングできるかどうかをチェックします。このテストを実行する前に、iptablesをインストールする必要があります。
--kill-sbd/--kill-corosync/--kill-pacemakerdSBD、Corosync、またはPacemakerのデーモンを終了します。これらのテストのいずれかを実行すると、
/var/lib/crmsh/crash_test/ディレクトリにレポートが表示されます。レポートには、テストケースの説明、アクションのログ、考え得る結果の説明が含まれます。-
--fence-node NODE コマンドラインから渡される特定のノードをフェンスします。
詳細については、crm cluster crash_test --helpコマンドを実行してください。
以下の例では、aliceとbobというノードを使用し、bobのフェンシングをテストします。テスト中のbobの変更状態を表示するには、Hawkにログインし、 › に移動します。
>sudo crm status[...] Node List: * Online: [ alice bob ] Active Resources: * admin-ip (ocf:heartbeat:IPaddr2): Started alice>sudo crm cluster crash_test --fence-node bob============================================== Testcase: Fence node bob Fence action: reboot Fence timeout: 95 !!! WARNING WARNING WARNING !!! THIS CASE MAY LEAD TO NODE BE FENCED. TYPE Yes TO CONTINUE, OTHER INPUTS WILL CANCEL THIS CASE [Yes/No](No):YesINFO: Trying to fence node "bob" INFO: Waiting 71s for node "bob" reboot... INFO: Node "bob" will be fenced by "alice"! INFO: Node "bob" was successfully fenced by "alice"
9 次のステップ #
このガイドでは、テスト目的で使用できる基本的な高可用性クラスタについて説明します。運用環境で使用するためにこのクラスタを拡張するには、以下の手順を実行することをお勧めします。
- ノードの追加
crm cluster joinスクリプトを使用して、他のノードをクラスタに追加します。- ハードウェアウォッチドッグの有効化
運用環境でクラスタを使用する前に、
softdogをハードウェアウォッチドッグに置き換えてください。- STONITHデバイスの追加
クリティカルなワークロードには、物理的なSTONITHデバイスまたはディスクベースのSBDを使用して、2台または3台のSTONITHデバイスを用意することを強くお勧めします。
- QDeviceの設定
QDeviceおよびQNetdはクォーラムの決定に参加します。アービトレータであるQNetdの支援により、QDeviceは設定可能な投票数を提供します。これにより、クラスタが標準のクォーラムルールが許可するよりも多くのノード障害に耐えることができます。ノード数が偶数であるクラスタ、特に2ノードクラスタについては、QDeviceおよびQNetdの展開をお勧めします。
10 法的事項 #
Copyright© 2006–2025 SUSE LLC and contributors. All rights reserved.
この文書は、GNU Free Documentation Licenseのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNU Free Documentation License」セクションに含まれています。
SUSEの商標については、https://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは正確性を完全に保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。
![[状態]画面には、aliceというノードで実行されている仮想IPアドレスadmin-ipである、1 つの設定済みリソースが表示されます。 [状態]画面には、aliceというノードで実行されている仮想IPアドレスadmin-ipである、1 つの設定済みリソースが表示されます。](images/ha-hawk-status.png)