パッケージのインストールやクラスタのオンライン化では、次のように問題をトラブルシュートします。
クラスタの構成を管理に必要なパッケージは、High Availability Extensionで使用できるHigh Availabilityインストールパターンに付属しています。
High Availability Extensionが各クラスタノードにSUSE Linux Enterprise Server 12 SP5の拡張としてインストールされているか、パターンが『インストールおよびセットアップクイックスタート』で説明するように各マシンにインストールされているか、確認します。
相互に通信するため、第4章 「YaSTクラスタモジュールの使用」で説明するように、同じクラスタに属するすべてのノードは同じbindnetaddr、mcastaddr、mcastportを使用する必要があります。
/etc/corosync/corosync.confで設定されている通信チャネルとオプションがすべてのクラスタノードに関して同一かどうか確認します。
暗号化通信を使用する場合は、/etc/corosync/authkeyファイルがすべてのクラスタノードで使用可能かどうかを確認します。
すべてのcorosync.conf設定(nodeid以外)が同一で、すべてのノードのauthkeyファイルが同一でなければなりません。
mcastportによる通信が許可されているかクラスタノード間の通信に使用されるmcastportがファイアウォールでブロックされている場合、ノードは相互に認識できません。第4章 「YaSTクラスタモジュールの使用」と『インストールおよびセットアップクイックスタート』で説明されているように、YaSTまたはブートストラップスクリプトで初期セットアップを設定しているときに、ファイアウォール設定は通常、自動的に調整されます。
mcastportがファイアウォールでブロックされないようにするには、各ノードの/etc/sysconfig/SuSEfirewall2の設定を確認します。または、各クラスタノードのYaSTファイアウォールモジュールを起動します。 › をクリックして、mcastportを許可されたのリストに追加し、変更を確定します。
通常、Pacemakerを開始すると、Corosyncサービスも開始します。両方のサービスが実行されているかどうかを確認するには、次のコマンドを実行します。
root #systemctlstatus pacemaker corosync
両方のサービスが実行されていない場合は、次のコマンドを実行して開始します。
root #systemctlstart pacemaker
Pacemakerログファイルの場合は、/etc/corosync/corosync.confのloggingセクションで指定されている設定を参照してください。ここで指定したログファイルをPaceacemakerで無視する場合は、Pacemaker独自の設定ファイル/etc/sysconfig/pacemakerのログ記録設定を確認してください。PCMK_logfileがそこで設定されている場合、Pacemakerはこのパラメータで定義したパスを使用します。
すべての関連ログファイルを表示するクラスタ全体のレポートが必要な場合は、詳細についてすべてのクラスタノードの分析を含むレポートを作成するにはどうしたらよいですか。を参照してください。
lrmdデーモンは、エラーが発生しない限り、複数の監視操作はログに記録しません。複数の監視操作をすべてログ記録すると、多量のノイズが発生してしまいます。そのため、複数の監視操作は、1時間に1度だけ記録されます。
failedメッセージだけが出ました。詳細情報を取得できますか。
コマンドに--verboseパラメータを追加してください。これを複数回行うと、デバッグ出力が非常に詳細になります。役立つヒントについては、ログ記録データ(sudo journalctl -n)を参照してください。
crm_monコマンドを使用してください。次のコマンドは、リソース操作履歴(-oオプション)と非アクティブなリソース(-r)を表示します。
root #crm_mon-o -r
表示内容は、ステータスが変わると、更新されます(これをキャンセルするには、Ctrl– C を押します)。次に例を示します
Last updated: Fri Aug 15 10:42:08 2014
Last change: Fri Aug 15 10:32:19 2014
Stack: corosync
Current DC: bob (175704619) - partition with quorum
Version: 1.1.12-ad083a8
2 Nodes configured
3 Resources configured
Online: [ alice bob ]
Full list of resources:
my_ipaddress (ocf:heartbeat:Dummy): Started bob
my_filesystem (ocf:heartbeat:Dummy): Stopped
my_webserver (ocf:heartbeat:Dummy): Stopped
Operations:
* Node bob:
my_ipaddress: migration-threshold=3
+ (14) start: rc=0 (ok)
+ (15) monitor: interval=10000ms rc=0 (ok)
* Node alice:『 Explained (Pacemaker )』PDF (http://www.clusterlabs.org/doc/から入手可能)では、「How are OCF Return Codes Interpreted?」セクションで3つの異なる復元タイプを説明しています。
クラスタで発生している現象をより詳しく表示するには、次のコマンドを使用します。
root #crmhistory log [NODE]
NODEは、調べたいノードに置き換えるか、空のままにします。詳細については、A.5項 「履歴」を参照してください。
次のコマンドを使用してください。
root #crmresource list crm resource cleanup rscid [node]
ノードを指定しないと、すべてのノードでリソースがクリーンアップされます。詳細については、8.5.3項 「リソースのクリーンアップ」を参照してください。
コマンドcrm_resource listを使用して、現在のリソースの情報を表示できます。
OCFスクリプトを確認するには、たとえば、次のocf-testerコマンドを使用します。
ocf-tester -n ip1 -o ip=YOUR_IP_ADDRESS \ /usr/lib/ocf/resource.d/heartbeat/IPaddr
パラメータを増やすには、-oを複数回使用します。必須パラメータとオプションパラメータのリストは、crm ra info
AGENTの実行によって取得できます。たとえば、次のようにします。
root #crmra info ocf:heartbeat:IPaddr
ocf-testerを実行する場合は、その前に、リソースがクラスタで管理されていないことを確認してく ださい。
終端ノードはunclean(アンクリーン)と考えられる場合があります。その場合には、それをフェンシングする必要があります。STONITHリソースが動作していない、または存在しない場合、残りのノードはフェンシングが実行されるのを待機することになります。フェンシングのタイムアウトは通常長いので、問題の兆候がはっきりと現れるまでには(仮に現れたとしても)、かなり長い時間がかかることがあります。
さらに別の可能性としては、単にこのノードでのリソースの実行が許可されていないという場合があります。このことは、過去にエラーが発生し、それが正しく「解決」されていないために生じることがあります。または、以前に行った管理上の操作が原因である場合もあります。つまり、負のスコアを持つ場所の制約のためです。そのような場所の制約は、たとえば、crm resource migrateコマンドによって挿入されることがあります。
リソースに対して場所の制約が設定されていない場合、その配置は、(ほとんど)ランダムなノード選択によって決まります。どのノードでリソースを実行することが望ましいか、常に明示的に指定することをお勧めします。このことは、すべてのリソースに対して、場所の初期設定を行う必要があるという意味ではありません。関連する(コロケーション)リソースのセットに対して優先指定を設定すれば十分です。ノードの優先指定は次のようになります。
location rsc-prefers-alice rsc 100: alice
開始(または有効化)操作には、デバイスのステータスのチェックが含まれます。デバイスの準備ができていない場合、STONITHリソースの開始は失敗します。
同時に、STONITHプラグインは、ホストリストを生成するように要求されます。リストが空の場合、STONITHリソースが対象にできるものがないことになるので、いずれにせよシューティングは行われません。STONITHが動作しているホストの名前は、リストから除外されます。ノードが自分自身をシューティングすることはできないからです。
停電デバイスのような、シングルホスト管理デバイスを使用する場合、フェンシングの対象とするデバイスではSTONITHリソースの動作を許可しないようにしてください。-INFINITYの、ノードの場所優先設定(制約)を使用してください。クラスタは、STONITHリソースを、起動できる別の場所に移動します。その際にはそのことが通知されます。
それぞれのSTONITHリソースは、ホストリストを持つ必要があります。このリストは、手動でSTONITHリソースの設定に挿入される場合、またはデバイス自体から取得される場合があります(たとえば出力名から)。この点は、STONITHプラグインの性質に応じて決まります。stonithdは、このリストを基に、どのSTONITHリソースがターゲットノードのフェンシングを行えるかを判断します。ノードがリストに含まれている場合に限って、STONITHリソースはノードのシューティング(フェンシング)を行えます。
stonithdは、動作しているSTONITHリソースから提供されたホストリスト内にノードを見つけられなかった場合、他のノードのstonithdインスタンスに問い合わせます。他のstonithdインスタンスのホストリストにもターゲットノードが含まれていなかった場合、フェンシング要求は、開始ノードでタイムアウトのために終了します。
ブロードキャストトラフィックが多すぎると、電源管理デバイスが機能しなくなることがあります。監視操作を少なくして、余裕を持たせてください。フェンシングが一時的にのみ必要な場合(必要が生じないのが最善ですが)、デバイスのステータスは数時間に1回チェックすれば十分です。
また、この種のデバイスの中には、同時に複数の相手と通信するのを拒否するものもあります。このことは、ユーザが端末またはブラウザセッションを開いたままにしていて、クラスタがステータスのテストを行おうとした場合には、問題となり得ます。
historyコマンド、およびそのサブコマンドresourceを使用します。
root #crmhistory resource NAME1
これにより、指定したリソースのみの完全な遷移ログが得られます。ただし、複数のリソースを調査することも可能です。その場合、最初のリソース名の後に目的のリソース名を追加します。
一定の命名規則(を参照してください)に従っていれば、resourceコマンドでリソースのグループを調査するのが容易になります。たとえば、次のコマンドは、dbで始まるすべてのプリミティブを調査します。
root #crmhistory resource db*
/var/cache/crm/history/live/alice/ha-log.txtのログファイルを表示します。
historyコマンドには、次の2つのオプションがあります。
excludeを使用する
timeframeを使用する
excludeコマンドを使用すると、追加の正規表現を設定して、ログから特定のパターンを除外できます。たとえば、次のコマンドは、SSH、systemd、およびカーネルのメッセージをすべて除外します。
root #crmhistory exclude ssh|systemd|kernel.
timeframeコマンドを使用して、出力を特定の範囲に制限します。たとえば、次のコマンドは、8月23日12:00~12:30のイベントをすべて表示します。
root #crmhistory timeframe "Aug 23 12:00" "Aug 23 12:30"
詳しい調査を要するバグまたはイベントが発生した場合、現在のすべての設定を保存しておくと役に立ちます。このファイルをサポートに送信したり、bzlessで表示したりできます。次に例を示します。
crm(live)history#timeframe"Oct 13 15:00" "Oct 13 16:00"crm(live)history#sessionsave tux-testcrm(live)history#sessionpack Report saved in '/root/tux-test.tar.bz2'
Hawk2の最初の起動で自己署名証明書に関する警告が発行されるのを避けるには、自動生成された証明書を、独自の証明書または公式認証局(CA)によって署名された証明書で置き換えてください。
/etc/hawk/hawk.keyを秘密鍵で置き換えます。
/etc/hawk/hawk.pemをHawk2が提供する証明書で置き換えます。
root:haclientにファイルの所有権を変更して、そのファイルがグループにアクセスできるようにします。
chown root:haclient /etc/hawk/hawk.key /etc/hawk/hawk.pem chmod 640 /etc/hawk/hawk.key /etc/hawk/hawk.pem
この作業を実行するには、psshコマンドを使用します。必要であれば、psshをインストールしてください。ファイル(たとえばhosts.txt)を作成し、その中に操作する必要のあるノードのIPアドレスまたはホスト名を含めます。sshを使用してhosts.txtファイルに含まれている各ホストにログインしていることを確認します。準備ができたら、psshを実行します。hosts.txtファイルを(オプション-hで)指定し、対話モードを使用してください(オプション-i)。次のようになります。
pssh -i -h hosts.txt "ls -l /corosync/*.conf" [1] 08:28:32 [SUCCESS] root@venus.example.com -rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf [2] 08:28:32 [SUCCESS] root@192.168.2.102 -rw-r--r-- 1 root root 1480 Nov 14 13:37 /etc/corosync/corosync.conf
クラスタの現在のステータスを確認するには、crm_monかcrm
statusのどちらかを使用します。これによって、現在のDCと、現在のノードに認識されているすべてのノードとリソースが表示されます。
これにはいくつかの理由が考えられます。
まず設定ファイル/etc/corosync/corosync.confを調べます。マルチキャストまたはユニキャストアドレスがクラスタ内のすべてのノードで同一かどうか確認します(キーmcastaddrを含むinterfaceセクションを調べてください)。
ファイアウォール設定を確認します。
スイッチがマルチキャストまたはユニキャストアドレスをサポートしているか確認します。
ノード間の接続が切断されていないかどうか確認します。その原因の大半は、ファイアウォールの設定が正しくないことです。また、これはスプリットブレインの理由にもなり、クラスタがパーティション化されます。
ログメッセージ(sudo journalctl -n)に次の行があるか確認してください。
Jan 12 09:58:55 alice lrmd: [3487]: info: RA output: [...] ERROR: Could not load ocfs2_stackglue Jan 12 16:04:22 alice modprobe: FATAL: Module ocfs2_stackglue not found.
この場合、カーネルモジュールocfs2_stackglue.koがありません。インストールしたカーネルに応じて、パッケージocfs2-kmp-default、ocfs2-kmp-pae、またはocfs2-kmp-xenをインストールします。
crmシェルで、crm reportを使用してレポートを作成します。このツールは以下を収集します。
クラスタ全体のログファイル
パッケージ状態
DLM/OCFS2状態
システム情報
CIB履歴
コアダンプレポートの解析(debuginfoパッケージがインストールされている場合)
通常は、次のコマンドでcrm reportを実行します。
root #crm report-f 0:00 -n alice -n bob
このコマンドは、ホストaliceおよびbob上の午前0時以降のすべての情報を抽出し、現在のディレクトリにcrm_report-DATE.tar.bz2という名前の*.tar.bz2アーカイブを作成します(例: crm_report-Wed-03-Mar-2012)。特定のタイムフレームのみを対象とする場合は、-tオプションを使用して終了時間を追加します。
crm reportツールは、CIBと入力ファイルから機密の情報を削除しようと試みますが、完全に削除できるわけではありません。他にも機密の情報が含まれている場合には、付加的なパターンを指定してください。ログファイルとcrm_mon、ccm_tool、およびcrm_verifyの出力は、フィルタされません。
データをいずれの方法でも共有する前に、アーカイブをチェックして、公表したくない情報があればすべて削除してください。
さらに追加のオプションを使用して、コマンドの実行をカスタマイズします。たとえば、Pacemakerクラスタがある場合は、確実にオプション-Aを追加する必要があるでしょう。別のユーザがクラスタに対するパーミッションを持っている場合は、(rootおよびhaclusterに加えて)-uオプションを使用してこのユーザを指定します。非標準のSSHポートを使用する場合は、-Xオプションを使用して、ポートを追加します(たとえば、ポート3479では、-X "-p 3479"を使用)。その他のオプションは、crm reportのマニュアルページに記載されています。
crm reportで、関連するすべてのログファイルを分析し、ディレクトリ(またはアーカイブ)を作成したら、ERRORという文字列(大文字)があるかどうかログファイルをチェックします。レポートの最上位ディレクトリにある最も重要なファイルは次のとおりです。
analysis.txt
すべてのノードで同一である必要があるファイルを比較します。
corosync.txt
Corosync設定ファイルのコピーを格納します。
crm_mon.txt
crm_monコマンドの出力を格納します。
description.txt
ノード上のすべてのクラスタパッケージのバージョンを格納します。ノード固有のsysinfo.txtファイルもあります。これは最上位ディレクトリにリンクしています。
このファイルは、発生した問題を説明してhttps://github.com/ClusterLabs/crmsh/issuesに送信するためのテンプレートとして使用できます。
members.txtすべてのノードのリストです。
sysinfo.txt関連するすべてのパッケージ名とそのバージョンのリストが記述されています。さらに、元のRPMパッケージとは異なる設定ファイルのリストもあります。
ノード固有のファイルは、ノードの名前を持つサブディレクトリに保存されます。ここには、それぞれのノードのディレクトリ/etcのコピーが保存されます。
クラスタリソースの設定、およびHigh Availabilityクラスタの管理とカスタマイズなど、Linuxの高可用性に関するその他の情報については、http://clusterlabs.org/wiki/Documentationを参照してください。