Translated message

A translation of this page exists in English.

RHEL 6.1 で、クラスタノードを設定してクラスタリングに対して SNMP トラップを送る方法

Solution Unverified - Updated -

Issue

はじめに

Red Hat Enterprise Linux (RHEL) 5 以降では高可用性クラスタリングには SNMP MIB がありますが、送信される SNMP トラップはフェンシングや、クラスターサービス状態変化ステータスなどは対象としていませんでした。RHEL 6.1 では、これらのトラップを送信する foghorn という名の新しいパッケージが導入されました。foghorn サービスは、特定の D-Bus シグナルをリッスンするデーモンで、これらのシグナルを SNMPv2 トラップに翻訳します。現在、foghorn は、5 つの D-Bus シグナルをリッスンし、5 つの SNMPv2 トラップを生成します。foghorn サービスは、messagebus (dbus-daemon) サービスおよび snmpd サービスが実行している必要があります。Foghorn は、トラップをリッスンしている snmp サーバーが必要です。

snmp サーバーを、監視している別のクラスターノードにはしませんが、クラスターに含まれるトラップをキャッチする別のホストにします。 この記事では、cluster-snmp および foghorn パッケージにある SNMP トラップの送受信について記載しています。

SNMP および foghorn の詳細については、以下を参照してください。

ここでは、サーバーに送信されたトラップをキャッチする snmptrapd サーバー (snmptrap サーバー) を設定します。事前に設定された snmptrapd サーバー、または SNMP トラップを収集するネットワーク管理デバイスがすでに存在する場合、snmptrapd サービスは必要ありません。

システム構成

  • Red Hat Enterprise Linux Server 6.1 (および High Availability Add on)

Foghorn が提供する SNMP トラップとは何ですか?

Foghorn は、cluster-snmp パッケージに含まれる SNMP トラップを追加します。fenced、rgmanager、および corosync にトラップが追加されます。

  • fenced:
    fenced
    
    DBus interface: com.redhat.cluster.fence
    SNMP MIB:REDHAT-FENCE-MIB
    
    DBus signal           SNMP trap
    FenceNode             fenceNotifyFenceNode
    (1) string            fenceNodeName.0
    (2) int32             fenceNodeID.0
    (3) int32             fenceResult.0
    
  • rgmanager:
    rgmanager
    DBus interface: com.redhat.cluster.rgmanager
    SNMP MIB:REDHAT-RGMANAGER-MIB
    
    DBus signal           SNMP trap
    ServiceStateChange    rgmanagerServiceStateChange
    (1) string            rgmanagerServiceName.0
    (2) string            rgmanagerServiceState.0
    (3) string            rgmanagerServiceFlags.0
    (4) string            rgmanagerServiceCurrentOwner.0
    (5) string            rgmanagerServicePreviousOwner.0
    
  • corosync:
    corosync
    
    DBus interface: org.corosync
    SNMP MIB:COROSYNC-MIB
    
    DBus signal           SNMP trap
    NodeStateChange       corosyncNoticesNodeStatus
    (1) string            corosyncObjectsNodeName.0
    (2) uint32            corosyncObjectsNodeID.0
    (3) string            corosyncObjectsNodeAddress.0
    (4) string            corosyncObjectsNodeStatus.0
    
    DBus signal           SNMP trap
    QuorumStateChange     corosyncNoticesQuorumStatus
    (1) string            corosyncObjectsNodeName.0
    (2) uint32            corosyncObjectsNodeID.0
    (3) string            corosyncObjectsQuorumStatus.0
    
    DBus signal           SNMP trap
    ConnectionStateChange corosyncNoticesAppStatus
    (1) string            corosyncObjectsNodeName.0
    (2) uint32            corosyncObjectsNodeID.0
    (3) string            corosyncObjectsAppName.0
    (4) string            corosyncObjectsAppStatus.0
    

SNMP クライアントの設定

ここでは、特定のトラップをリッスンし、テキストファイルにトラップを書き込むサーバーを正しく設定するために実行する必要があるすべての手順が記載されています。この 3 ノードクラスターで使用されるクラスターノードは、rh6node1.examplerh.comrh6node2.examplerh.comrh6node3,examplerh.com となります。ホスト snmptrapserver.examplerh.com は、クラスターのすべてのクラスターノードからトラップをキャッチする snmp サーバーです。

必要なパッケージをすべてインストールします。クラスターのすべてのノードで以下を実行します。

$ yum -y install foghorn cluster-snmp net-snmp net-snmp-utils

すべてのクラスターノードで以下のコマンドを実行すると、SNMP トラップが corosync に対して生成されます。

$ echo "OPTIONS=\"-d\" " > /etc/sysconfig/corosync-notifyd

foghorn サービスは AgentX を使用して、snmpd (マスターエージェント) と通信します。すべてのノードで /etc/snmp/snmpd.conf ファイルを編集します。ファイルの最後に以下を追加します。

###############################################################################                                                                                                     
# Cluster SNMP Traps                                                                                                                                                                
###############################################################################                                                                                                     
dlmod RedHatCluster    /usr/lib64/cluster-snmp/libClusterMonitorSnmp.so                                                                                                             
view    systemview    included    REDHAT-CLUSTER-MIB:redhatCluster                                                                                                                  

###############################################################################                                                                                                     
# Foghorn                                                                                                                                                                           
###############################################################################                                                                                                     
master agentx                                                                                                                                                                       
trap2sink snmptrapserver.examplerh.com 

SNMP クライアントに対して起動時にサービスを開始

マシンを起動したあとに SNMP トラップを送信したい場合は、起動時にサービスを開始する必要があります。

$ chkconfig messagebus on
$ chkconfig snmpd on
$ chkconfig corosync-notifyd on
$ chkconfig foghorn on

SNMP クライアントに対してサービスを開始

それぞれのサービスは前のサービスに依存するため、この特定の順番ですべてサービスを開始します。corosync-notifyd を開始するまえに cman サービスを開始する必要があります。

$ service messagebus restart
$ service snmpd start
$ service forghorn start
$ service corosync-notifyd start

SNMPTrapd サーバーの設定

snmp トラップをキャッチする他のサービスがない場合は snmptrapd サービスだけが必要になります。SNMP トラップをリッスンしているネットワーク管理デバイスまたは SNMP サービスがある環境もあります。以下は、サービスに送信される SNMP トラップをキャッチする snmptrapd サービスのインストールおよび設定方法を説明します。

送信された snmp トラップをサーバーがキャッチするのに必要なパッケージをすべてインストールします。snmpd および foghorn サービスは、開始する必要はありません。SNMP トラップを、以下から人間が読めるコードに翻訳するために必要とされる MIB を含むパッケージがインストールされます。

$ yum -y install foghorn cluster-snmp net-snmp

/var/log/messagesファイルがすべてのSNMPを含んでいないために、/etc/snmp/snmptrapd.conf 設定ファイルを編集します。すべてのトラップは、/var/log/snmptrapd.log

# Authorises traps with the specified community to trigger the types of processing listed.
authCommunity log,execute,net public
# Add a trap handler for fenced,rgmanager notification.
traphandle REDHAT-FENCE-MIB::fenceNotifyFenceNode /root/bin/fenced-FenceNotifyFenceNode.sh
traphandle REDHAT-RGMANAGER-MIB::rgmanagerServiceStateChange /root/bin/rgmanager-ServiceStateChange.sh      

/etc/sysconfig/snmptrapd 設定ファイルを編集すると、/var/log/messages ファイルにはすべての SNMP トラップが含まれません。すべてのトラップのログは /var/log/snmptrapd.log ファイルに記録されます。

# snmptrapd command line options
# OPTIONS="-Lsd -p /var/run/snmptrapd.pid"
OPTIONS="-Lf /var/log/snmptrapd.log -p /var/run/snmptrapd.pid"

このドキュメントに添付されているバイナリをインストールします。/root/bin ディレクトリにインストールされる 2 つのバイナリがあります。

$ mkdir /root/bin
$ tar jxvf snmptrapd-scripts.tar.bz2
$ cp /root/snmptrapd-scripts/* /root/bin
$ chmod 700 /root/bin/fenced-FenceNotifyFenceNode.sh
$ chmod 700 /root/bin/rgmanager-ServiceStateChange.sh

SNMPTrapd サーバーに対して起動時にサービスを開始

マシンを起動したあとに SNMP トラップを受信したい場合は、起動時にサービスを開始する必要があり、これは、snmp トラップをリッスンしているホストに対して有効にする必要があります。この例では、snmptrapserver.examplerh.com となります。

$ chkconfig snmpdtrapd on

SNMPTrapd サーバーに対してサービスを開始

snmp サーバーで snmptrapd サービスを開始するだけです。ここでは、snmptrapserver.examplerh.com となります。

$ service snmptrapd start

SNMP トラップをキャッチしたことを確認

このコマンドを使用して、フェンスイベントに送信される SNMP トラップをシミュレートします。dbus は、dbus メッセージを SNMP トラップに変更する foghorn によってキャッチされるメッセージを送ります。メッセージには、rh6node3.examplerh.com(nodeID:3) had an unsuccesfully(-1) fence と書かれています。メッセージがキャッチされたらメッセージは root のメールボックスに送られる必要があります。そして、ファイルへのログを有効にすると、ログエントリーは /var/log/snmptrapd-traps/fenced.log に書き込まれる必要があります。

$ dbus-send --system --type=signal / com.redhat.cluster.fence.FenceNode string:rh6node3.examplerh.com int32:3 int32:-1

クラスター名を取得すると、snmpd が正しく機能していることを確認します。

$snmpwalk -v 1 -c public localhost REDHAT-CLUSTER-MIB:rhcClusterName.0
REDHAT-CLUSTER-MIB::rhcClusterName.0 = STRING:"rh6nodesThree"

このコマンドは、定期的な SNMP トラップを送信し、この SNMP トラップのログを /var/log/snmptrapd.log に記録する必要があります。

$ snmptrap -v 2c -c public localhost  '' .1.3.6.1.4.1.116.33960.0.10002 .1.3.6.1.4.1.116.33960.0.1000 s "TEST"

SNMP トラップをキャッチすると起こること

すべての SNMP トラップのログが、/var/log/messages ではなく、/var/log/snmptrapd.log に記録されます。設定では、定義した SNMP トラップがキャッチされた場合にバイナリを実行するトラップハンドラーをいくつか定義しました。

  • REDHAT-FENCE-MIB::fenceNotifyFenceNode: /root/bin/fenced-FenceNotifyFenceNode.sh
  • REDHAT-RGMANAGER-MIB::rgmanagerServiceStateChange: /root/bin/rgmanager-ServiceStateChange.sh

バイナリを実行すると、root@localhost にメッセージを送信し、ファイルへのログが有効の場合に、SNMP トラップを /var/log/snmptrapd-traps/ ディレクトリのログファイルに書き込みます。

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content