Show Table of Contents
第13章 クラスターイベントのスクリプトのトリガー
Pacemaker クラスターはイベント駆動型のシステムで、イベントはリソースやノードの障害、設定の変更、またはリソースの開始や停止になります。Pacemaker クラスターアラートを設定すると、クラスターイベントの発生時に外部で一部の処理を行うことができます。クラスターアラートを設定するには、以下の 2 つの方法の 1 つを使用します。
- Red Hat Enterprise Linux 7.3 より、アラートエージェントを使用して Pacemaker アラートを設定できるようになりました。アラートエージェントは、リソース設定と操作を処理するためにクラスター呼び出しのリソースエージェントと同様にクラスターが呼び出す外部プログラムです。これは推奨される方法で、クラスターアラートをより簡単に設定できます。Pacemaker アラートエージェントの説明は 「Pacemaker アラートエージェント (Red Hat Enterprise Linux 7.3 以降)」 を参照してください。
ocf:pacemaker:ClusterMonリソースはクラスターの状態を監視でき、クラスターイベントごとにアラートをトリガーできます。このリソースは、標準の間隔でcrm_monコマンドをバックグランドで実行します。ClusterMonリソースの詳細は 「モニタリングのリソースを使ったイベント通知」 を参照してください。
13.1. Pacemaker アラートエージェント (Red Hat Enterprise Linux 7.3 以降)
クラスターイベントの発生時に Pacemaker アラートエージェントを作成して外部で一部の処理を行うことができます。クラスターは環境変数を用いてイベントの情報をエージェントに渡します。エージェントは、E メールメッセージの送信、ログのファイルへの記録、監視システムの更新など、この情報を自由に使用できます。
- Pacemaker は、デフォルトで
/usr/share/pacemaker/alertsにインストールされるアラートエージェントのサンプルを複数提供します。これらのサンプルスクリプトは、コピーしてそのまま使用したり、目的に合わせて編集するテンプレートとして使用することもできます。サポートされる属性は、サンプルエージェントのソースコードを参照してください。サンプルアラートエージェントを使用するアラートの基本的な設定手順の例は、「サンプルアラートエージェントの使用」 を参照してください。 - アラートエージェントの設定および管理に関する一般的な情報は、「アラートの作成」、「アラートの表示、編集、および削除」、「アラートの受信側」、「アラートメタオプション」、および 「アラート設定コマンドの例」 を参照してください。
- Pacemaker アラートの独自のアラートエージェントを作成することができます。アラートエージェントの記述に関する情報は、「アラートエージェントの作成」 を参照してください。
13.1.1. サンプルアラートエージェントの使用
サンプルアラートエージェントの 1 つを使用するとき、必要性に見合うようスクリプトを確認してください。サンプルエージェントは、特定のクラスター環境のカスタムスクリプトを作成するためのテンプレートとして提供されます。
サンプルアラートエージェントの 1 つ を使用するには、クラスターの各ノードにエージェントをインストールする必要があります。たとえば、以下のコマンドは
alert_snmp.sh.sample スクリプトを alert_snmp.sh としてインストールします。
# install --mode=0755 /usr/share/pacemaker/alerts/alert_snmp.sh.sample /var/lib/pacemaker/alert_snmp.sh
スクリプトをインストールした後、そのスクリプトを使用するアラートを作成できます。以下の例は、インストールされた
alert_snmp.sh アラートエージェントを使用するアラートを設定し、クラスターイベントを SNMP トラップとして送信します。デフォルトでは、正常なモニター呼び出し以外のすべてのイベントを SNMP サーバーに送信します。この例では、タイムスタンプの形式はメタオプションとして設定されます。メタオプションの詳細は、「アラートメタオプション」 を参照してください。アラートの設定後にアラートの受信側が設定され、アラート設定が表示されます。
#pcs alert create id=snmp_alert path=/var/lib/pacemaker/alert_snmp.sh meta timestamp_format="%Y-%m-%d,%H:%M:%S.%01N". #pcs alert recipient add snmp_alert 192.168.1.2#pcs alertAlerts: Alert: snmp_alert (path=/var/lib/pacemaker/alert_snmp.sh) Meta options: timestamp_format=%Y-%m-%d,%H:%M:%S.%01N. Recipients: Recipient: snmp_alert-recipient (value=192.168.1.2)
以下の例は
alert_smtp.sh エージェントをインストールし、インストールされたアラートエージェントを使用するアラートを設定してクラスターイベントを E メールメッセージとして送信します。アラートの設定後に受信側が設定され、アラート設定が表示されます。
#install --mode=0755 /usr/share/pacemaker/alerts/alert_smtp.sh.sample /var/lib/pacemaker/alert_smtp.sh#pcs alert create id=smtp_alert path=/var/lib/pacemaker/alert_smtp.sh options email_sender=donotreply@example.com#pcs alert recipient add smtp_alert admin@example.com#pcs alertAlerts: Alert: smtp_alert (path=/var/lib/pacemaker/alert_smtp.sh) Options: email_sender=donotreply@example.com Recipients: Recipient: smtp_alert-recipient (value=admin@example.com)
13.1.2. アラートの作成
以下のコマンドはクラスターアラートを作成します。設定するオプションは、追加の環境変数として指定するパスでアラートエージェントスクリプトに渡されるエージェント固有の設定値です。
id の値を指定しないと、値が生成されます。アラートメタオプションに関する情報は、「アラートメタオプション」 を参照してください。
pcs alert create path=path [id=alert-id] [description=description] [options [option=value]...] [meta [meta-option=value]...]
複数のアラートエージェントを設定できます。この場合、クラスターは各イベントですべてのアラートエージェントを呼び出します。アラートエージェントはクラスターノード上でのみ呼び出されます。アラートエージェントは Pacemaker リモートノードが関係するイベントに対して呼び出されますが、これらのノード上では呼び出されません。
以下の例は、各イベントで
my-script.sh を呼び出す簡単なアラートを作成します。
# pcs alert create id=my_alert path=/path/to/myscript.sh
サンプルアラートエージェントの 1 つを使用するクラスターアラートの作成方法の例は、「サンプルアラートエージェントの使用」 を参照してください。
13.1.3. アラートの表示、編集、および削除
以下のコマンドは、設定されたすべてのアラートと設定されたオプションの値を表示します。
pcs alert [config|show]
以下のコマンドは、指定した alert-id 値を持つ既存のアラートを更新します。
pcs alert update alert-id [path=path] [description=description] [options [option=value]...] [meta [meta-option=value]...]
以下のコマンドは、指定の alert-id 値を持つアラートを削除します。
pcs alert remove alert-id
13.1.4. アラートの受信側
通常、アラートは受信側に送信されます。よって、各アラートに 1 つ以上の受信側を追加設定できます。クラスターは受信側ごとに別々にエージェントを呼び出します。
受信側は、IP アドレス、E メールアドレス、ファイル名など、エージェントがサポートし認識できるものになります。
以下のコマンドは新しい受信側を指定のアラートに追加します。
pcs alert recipient add alert-id recipient-value [id=recipient-id] [description=description] [options [option=value]...] [meta [meta-option=value]...]
以下のコマンドは、既存のアラート受信側を更新します。
pcs alert recipient update recipient-id [value=recipient-value] [description=description] [options [option=value]...] [meta [meta-option=value]...]
以下のコマンドは指定のアラート受信側を削除します。
pcs alert recipient remove recipient-id
以下のコマンド例は、受信者 ID が
my-recipient-id のアラート受信側 my-alert-recipient をアラート my-alert に追加します。これにより、 my-alert に設定されたアラートスクリプトを各イベントで呼び出すよう、クラスターが設定されます。
# pcs alert recipient add my-alert my-alert-recipient id=my-recipient-id options value=some-address13.1.5. アラートメタオプション
リソースエージェントと同様に、メタオプションをアラートエージェントに対して設定すると、Pacemaker の呼び出し方法を調整できます。アラートメタオプションの説明は 表13.1「アラートメタオプション」 を参照してください。メタオプションは、アラートエージェントごとまたは受信側ごとに設定できます。
表13.1 アラートメタオプション
| メタ属性 | デフォルト | 説明 |
|---|---|---|
timestamp-format
|
%H:%M:%S.%06N
|
イベントのタイムスタンプをエージェントに送信するときにクラスターが使用する形式。この文字列は
date(1) コマンドと使用されます。
|
timeout
|
30s
|
アラートエージェントがこの時間内に完了しないと終了させられます。
|
以下の例は、
my-script.sh スクリプトを呼び出すアラートを設定し、2 つの受信側をアラートに追加します。最初の受信側の ID は my-alert-recipient1 で、2 つ目の受信側の ID は my-alert-recipient2 です。スクリプトは各イベントで 2 回呼び出され、呼び出しのタイムアウト値はそれぞれ 15 秒です。1 つの呼び出しは受信側 someuser@example.com に渡され、タイムスタンプの形式は %D %H:%M になります。もう 1 つの呼び出しは受信側 otheruser@example.com へ渡され、タイムスタンプの形式は %c になります。
#pcs alert create id=my-alert path=/path/to/my-script.sh meta timeout=15s#pcs alert recipient add my-alert someuser@example.com id=my-alert-recipient1 meta timestamp-format=%D %H:%M#pcs alert recipient add my-alert otheruser@example.com id=my-alert-recipient2 meta timestamp-format=%c
13.1.6. アラート設定コマンドの例
以下の例は、基本的なアラート設定コマンドの一部と、アラートの作成、受信側の追加、および設定されたアラートの表示に使用される形式を表しています。
以下のコマンドは簡単なアラートを作成し、アラートに 2 つの受信側を追加した後、設定された値を表示します。
- アラート ID の値が指定されていないため、
alertが値となるアラート ID が作成されます。 - 最初の受信側作成コマンドは、
rec_valueの受信側を指定します。このコマンドには受信側 ID が指定されていないため、受信側 ID の値としてalert-recipientが使用されます。 - 2 番目の受信側作成コマンドは、
rec_value2の受信側を指定します。このコマンドは、my-recipientを受信側 ID として指定します。
#pcs alert create path=/my/path#pcs alert recipient add alert rec_value#pcs alert recipient add alert rec_value2 id=my-recipient#pcs alert configAlerts: Alert: alert (path=/my/path) Recipients: Recipient: alert-recipient (value=rec_value) Recipient: my-recipient (value=rec_value2)
以下のコマンドは 2 番目のアラートとそのアラートの受信側を追加します。2 番目のアラートのアラート ID は
my-alert で、受信側の値は my-other-recipient です。受信側 ID が指定されていないため、my-alert-recipient が受信側 ID として使用されます。
#pcs alert create id=my-alert path=/path/to/script description=alert_description options option1=value1 opt=val meta meta-option1=2 m=val#pcs alert recipient add my-alert my-other-recipient#pcs alertAlerts: Alert: alert (path=/my/path) Recipients: Recipient: alert-recipient (value=rec_value) Recipient: my-recipient (value=rec_value2) Alert: my-alert (path=/path/to/script) Description: alert_description Options: opt=val option1=value1 Meta options: m=val meta-option1=2 Recipients: Recipient: my-alert-recipient (value=my-other-recipient)
以下のコマンドは、アラート
my-alert と受信側 my-alert-recipient のアラート値を変更します。
#pcs alert update my-alert options option1=newvalue1 meta m=newval#pcs alert recipient update my-alert-recipient options option1=new meta metaopt1=newopt#pcs alertAlerts: Alert: alert (path=/my/path) Recipients: Recipient: alert-recipient (value=rec_value) Recipient: my-recipient (value=rec_value2) Alert: my-alert (path=/path/to/script) Description: alert_description Options: opt=val option1=newvalue1 Meta options: m=newval meta-option1=2 Recipients: Recipient: my-alert-recipient (value=my-other-recipient) Options: option1=new Meta options: metaopt1=newopt
以下のコマンドは、受信側
my-alert-recipient を alert から削除します。
#pcs alert recipient remove my-recipient#pcs alertAlerts: Alert: alert (path=/my/path) Recipients: Recipient: alert-recipient (value=rec_value) Alert: my-alert (path=/path/to/script) Description: alert_description Options: opt=val option1=newvalue1 Meta options: m=newval meta-option1=2 Recipients: Recipient: my-alert-recipient (value=my-other-recipient) Options: option1=new Meta options: metaopt1=newopt
以下のコマンドは設定から
myalert を削除します。
#pcs alert remove my-alert#pcs alertAlerts: Alert: alert (path=/my/path) Recipients: Recipient: alert-recipient (value=rec_value)
13.1.7. アラートエージェントの作成
Pacemaker アラートには、ノードアラート、フェンスアラート、およびリソースアラートの 3 種類があります。アラートエージェントに渡される環境変数は、アラートの種類によって異なります。アラートエージェントに渡される環境変数と、特定のアラートの種類に関連する環境変数の説明は、表13.2「アラートエージェントに渡される環境変数」 を参照してください。
表13.2 アラートエージェントに渡される環境変数
| 環境変数 | 説明 |
|---|---|
CRM_alert_kind
|
アラートの種類 (ノード、フェンス、またはリソース)
|
CRM_alert_version
|
アラートを送信する Pacemaker のバージョン
|
CRM_alert_recipient
|
設定された送信側
|
CRM_alert_node_sequence
|
アラートがローカルノードで発行されるたびに増加するシーケンス番号。Pacemaker によってアラートが発行された順序を参照するために使用することができます。後で発生したイベントのアラートは、先に発生したイベントのアラートよりも確実にシーケンス番号が大きくなります。この番号は、クラスター全体を対象とする番号ではないことに注意してください。
|
CRM_alert_timestamp
|
エージェントの実行前に
timestamp-format メタオプションによって指定された形式で作成されたタイムスタンプ。これにより、エージェント自体が呼び出されたタイミング (システムの負荷やその他の状況によって遅延される可能性があります) に関係なく、エージェントは信頼できる精度が高いイベント発生時間を使用できます。
|
CRM_alert_node
|
影響を受けるノードの名前
|
CRM_alert_desc
|
イベントの詳細。ノードアラートの場合はノードの現在の状態 (番号または lost) になります。フェンスアラートの場合は、フェンス操作の要求元、ターゲット、フェンス操作のエラーコードなどを含む要求されたフェンス操作の概要になります。リソースアラートの場合は
CRM_alert_status と同等の読み取り可能な文字列になります。
|
CRM_alert_nodeid
|
状態が変更したノードの ID (ノードアラートの場合のみ提供)。
|
CRM_alert_task
|
要求されたフェンスまたはリソース操作 (フェンスおよびリソースアラートの場合のみ提供)。
|
CRM_alert_rc
|
フェンスまたはリソース操作の数値の戻りコード (フェンスおよびリソースアラートの場合のみ提供)。
|
CRM_alert_rsc
|
影響を受けるリソースの名前 (リソースアラートのみ)。
|
CRM_alert_interval
|
リソース操作の間隔 (リソースアラートのみ)
|
CRM_alert_target_rc
|
操作の予期される数値の戻りコード (リソースアラートのみ)。
|
CRM_alert_status
|
操作の結果を示すために Pacemaker によって使用される数値コード (リソースアラートのみ)。
|
アラートエージェントを記述するとき、以下を考慮する必要があります。
- アラートエージェントは受信側がない状態で呼び出されることがあります (受信側が設定されていない場合)。そのため、エージェントはこの状態に対応できなければなりません (このような状況では終了する場合でも)。設定を段階的に変更し、後で受信側を追加することもできます。
- 1 つのアラートに複数の受信側が設定された場合、アラートエージェントは受信側ごとに 1 回呼び出されます。エージェントが同時実行できない場合、受信側を 1 つのみ設定する必要があります。エージェントは受信側をリストとして解釈することができます。
- クラスターイベントの発生時、すべてのアラートは別々のプロセスとして同時に発生します。設定されたアラートと受信側の数や、アラートエージェント内で実行されることによって、負荷が急激に増加する可能性があります。リソースが集中するアクションを直接実行せずに他のインスタンスのキューに置くなど、これを考慮してエージェントを記述する必要があります。
- アラートエージェントは最低限のパーミッションを持つ
haclusterユーザーとして実行されます。アラートエージェントに追加のパーミッションが必要な場合は、sudoを設定してアラートエージェントが適切な特権を持つ別ユーザーとして必要なコマンドを実行できるようにすることが推奨されます。 CRM_alert_timestamp(このコンテンツはユーザー設定のtimestamp-formatによって指定)、CRM_alert_recipient、およびすべてのアラートオプションなど、ユーザー設定のパラメーターを検証およびサニタイズする場合は十分注意してください。設定エラーから保護する必要があります。また、クラスターへのhaclusterレベルのアクセスがなくても CIB を変更できるユーザーが存在する場合、セキュリティーの問題が発生する可能性もあり、コードを挿入できないようにする必要があります。onfailパラメーターがfenceに設定されているリソースがクラスターに含まれる場合、障害時に複数のフェンス通知が送信されます (このパラメーターが設定されたリソースごとに 1 つの通知とそれに加えてさらに 1 つの通知)。STONITH デーモンとcrmdデーモンの両方が通知を送信します。この場合、送信される通知の数に関係なく、Pacemaker は 1 つのフェンス操作のみを実際に実行します。
注記
アラートインターフェースは、
ocf:pacemaker:ClusterMon リソースによって使用される外部スクリプトインターフェースと後方互換性を維持するよう設計されています。この互換性を維持するには、先頭に CRM_notify_ および CRM_alert_ が付けられたアラートエージェントに渡される環境変数を使用できます。ClusterMon リソースは root ユーザーとして実行し、アラートエージェントは hacluster ユーザーとして実行することがこの互換性の例外になります。ClusterMon によるスクリプトの設定に関する情報は、「モニタリングのリソースを使ったイベント通知」 を参照してください。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.