この資料では、分散型Cisco Express Forwarding(CEF)が稼働するCisco 7500および12000シリーズ ルータ上で新しく使用可能になったConsistency Checkerについて説明します。 Consistency Checkerは、Cisco IOS® ソフトウェアRelease 12.0(15)Sおよびその他のリリース トレインから導入され、ライン カードおよびルート プロセッサ(RP)上の転送情報の同期が失われた状況を検知します。Checkerが問題を検知すると、IOSは次のようなログ メッセージを出力します。
%FIB-4-RPPREFIXINCONST2: RP missing prefix for 133.160.0.0/16 (present in routing table) %FIB-4-RPPREFIXINCONST2: RP missing prefix for 133.160.0.0/16 (present in routing table) %FIB-4-LCPREFIXINCONST2: Slot 1 missing prefix entry for 64.0.17.0/32
この資料では、CEFで発生する不一致のトラブルシューティング方法について説明します。
このドキュメントに特有の要件はありません。
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
Cisco IOSソフトウェアリリース12.0(15)S以降
Cisco 7500 および 12000 シリーズ ルータ
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。対象のネットワークが実稼働中である場合には、どのようなコマンドについても、その潜在的な影響について確実に理解しておく必要があります。
ドキュメント表記の詳細は、「シスコ テクニカル ティップスの表記法」を参照してください。
Consistency Checkerが何をチェックするのかを理解するためには、まず、CEFフォワーディング テーブルについて良く知っておく必要があります。
CEFは、ルータが入力インターフェイスから出力インターフェイスにパケットを転送するための高速スイッチング メカニズムです。CEF では、ルータ メモリに保管された次の 2 種類のデータ構造(テーブル)が使用されます。
Forwarding Information Base(FIB) - 転送先の決定に使用する情報のデータベースです。概念的にはルーティング テーブルまたはルート キャッシュと似ていますが、実装方法が異なります。
Adjacency(隣接関係) - ネットワーク上の2つのノードが、リンク レイヤを通して互いにシングル ホップで到達できる場合、それらのノードは隣接しているといいます。
FIBテーブルは、次のいずれかの状況が発生すると更新されます。
ネクスト ホップに対応するAddress Resolution Protocol(ARP)キャッシュ エントリが変更、削除、またはタイムアウトしたとき。
プレフィクスに対応するルーティング テーブル エントリが変更または削除されたとき。
ネクスト ホップに対応するルーティング テーブル エントリが変更または削除されたとき。
Cisco 7500および12000シリーズ ルータは、分散型CEF(dCEF)をサポートしています。dCEFでは、ライン カードはRPと同じFIBテーブルおよび隣接関係テーブルのローカル コピーを使用して、パケットの転送先を決定します。これらのテーブルは、RPとライン カードの間で常に同期している必要があります。RPのテーブルに変更があった場合には、その変更をライン カードに転送する必要があります。
Inter-Process Communication(IPC)は、分散型パケット転送をサポートするルータが使用するプロトコルです。CEFアップデートは、IPCメッセージ内のeXternal Data Representation(XDR)情報として符号化されます。次の図は、CEFデータ構造の分散メカニズムを示しています。
不一致には次の2タイプがあります。
ライン カード上の情報の欠落(特定のプレフィクスの欠落など)
ライン カード上の情報の食い違い(異なるネクスト ホップIPアドレスなど)
router#show ip cef 24.20.84.32 24.16.0.0/13, version 833173, cached adjacency to POS6/0 0 packets, 0 bytes Flow: AS 6172, mask 13 via 4.24.234.153, 0 dependencies, recursive next hop 4.24.234.153, POS6/0 via 4.24.234.152/30 valid cached adjacency router#execute-on all show ip cef 24.20.84.32 ========= Line Card (Slot 1) ======= 24.16.0.0/13, version 408935, cached adjacency 0.0.0.0 0 packets, 0 bytes Flow: AS 6172, mask 13 via 157.130.213.1, 0 dependencies, recursive next hop 157.130.213.1, POS1/0.500 via 157.130.213.0/30 valid cached adjacency ========= Line Card (Slot 2) ======= 24.16.0.0/13, version 13719, cached adjacency 0.0.0.0 0 packets, 0 bytes Flow: AS 6172, mask 13 via 157.130.213.1, 0 dependencies, recursive next hop 157.130.213.1, POS1/0.500 via 157.130.213.0/30 valid cached adjacency
CEFの不一致は、次の例のように、show cef linecardコマンド出力の [CEF-ver] カラムの値が異なることで示されます。
7505-2A#show cef linecard CEF table version 35, 11 routes Slot CEF-ver MsgSent XDRSent Window LowQ MedQ HighQ Flags 1 0 0 0 LC wait 0 0 0 disabled 2 31 95 422 24 0 0 0 up, sync 3 34 105 544 24 0 0 0 up, sync
次の条件が成立していれば、show ip cef summaryコマンドの出力では、RPでもLCでも、ルート数および隣接の数が同じになるはずです。
すべてのライン カードが [up, sync] ステートである。
RPおよびLCのXDRキューが空白である(RPに関してはshow cef linecardコマンド出力の [LowQ/MedQ/HighQ] カラム、ライン カードに関してはshow cef linecardコマンド出力の [RP messages to be processed] データ)。
注:例外として、Cisco 12000シリーズのエンジン2 LCでは、パケットスイッチングASIC(PSA)によってACLを実装するための追加ルートがインストールされます。
IOS 12.0(22)Sには、show ip cef inconsistency nowコマンドを実行して問題の有無を調べることができる、CEF Consistency Checker v2(IOS 12.1Eに含まれる)が組み込まれる予定です。
RPおよびライン カード上のルーティング データベースが更新されていくにつれ、これらのデータベースの分散メカニズムの非同期性に起因して、両者に食い違いが生じることがあります。CEFは、独立的に運用できる各種の受動的(パッシブ)および能動的(アクティブ)なConsistency Checkerをサポートしています。次の表で、これらの機能について説明します。
検出メカニズム | 動作対象 | 説明 |
---|---|---|
Lc-detect | ライン カード | ライン カード上で動作し、FIBテーブルから欠落しているIPプレフィクスがないかどうかをチェックします。IPプレフィクスが欠落していると、ライン カードはそれらのアドレスにパケットを転送できません。この場合、Lc-detectは、確認のためRPにIPプレフィクスを送信します。RPに該当するエントリがあれば、不一致とみなされ、エラー メッセージが表示されます。さらにRPはライン カードに対し、そのIPプレフィクスが不一致であることを確認する信号を送り返します。 |
Scan-lc | ライン カード | ライン カード上で動作し、FIBテーブルを設定された時間だけスキャンして、次の n 個のプレフィクスをRPに送信します。RPは正確な突き合わせを行います。欠落しているプレフィクスが見つかると、RPは不一致を報告します。最後に、RPはライン カードに対し、確認メッセージを送り返します。 |
Scan-rp | ルート プロセッサ | (scan-lcとは逆に)RP上で動作し、FIBテーブルを設定された時間だけスキャンして、次の n 個のプレフィクスをライン カードに送信します。ライン カードが正確な突き合わせを行います。欠落しているプレフィクスが見つかると、ライン カードは不一致を報告し、最後にRPに対し、確認信号を送信します。 |
Scan-rib | ルート プロセッサ | すべてのRP上で動作し(非分散型)、RIBをスキャンして、それらのプレフィクス エントリがRPのFIBテーブルにあるかどうかを確認します。 |
イネーブルに設定したConsistency Checkerおよび関連する変数を設定するには、次のコマンドを使用します。
ip cef table consistency-check type <type> [period <seconds>] [count <count>] - Checkerの一般的なパラメータを制御します。
ip cef table consistency-check - サポートされているタイプをイネーブルまたはディセーブルにし、スキャンを実行する時間、およびスキャン対象のプレフィクスを制御します(lc-detectを除く)。 Consistency Checkerは、デフォルトではディセーブルに設定されています。
不一致は本来、発生してはならないものです。不一致が発見された場合は、詳しく調査する必要があります。次のCEF debugコマンドおよびshowコマンドを使用して、トラブルシューティングを行います。
一部の show コマンドはアウトプット インタープリタ ツールによってサポートされています(登録ユーザ専用)。このツールを使用することによって、show コマンド出力の分析結果を表示できます。
注:debug コマンドを使用する前に、「debug コマンドに関する重要な情報」を参照してください。
show ip cef inconsistency records detail - 検出メカニズムの統計情報を表示します。また、確認された何種類かの(現在は4種類の)不一致について、詳細情報を記録します。
show ip cef inconsistency - ステータスのサマリーを表示します。
Table consistency checkers (settle time 15s) lc-detect: running 0/0/0 queries sent/ignored/received scan-lc: running [100 prefixes checked every 60s] 0/0/1053 queries sent/ignored/received scan-rp: running [100 prefixes checked every 60s] 1053/0/0 queries sent/ignored/received scan-rib: running [1000 prefixes checked every 60s] 81/0/81 queries sent/ignored/received Inconsistencies: 0 confirmed, 0/4 recorded
show ip cef inconsistency records - 記録されている不一致をダンプするには、recordsキーワードを使用します。
show ip cef inconsistency records detail および execute-on slot <problem slot>
router#exec slot 2 show ip cef inconsistency records detail ========= Line Card (Slot 2) ======= Table consistency checkers (settle time 65s) lc-detect: running 0/0/0 queries sent/ignored/received scan-lc: running [100 prefixes checked every 60s] 1289156/0/0 queries sent/ignored/received scan-rp: running [100 prefixes checked every 60s] 0/0/1068308 queries sent/ignored/received scan-rib: running [1000 prefixes checked every 60s] 0/0/0 queries sent/ignored/received Inconsistencies: 340 confirmed, 1/4 recorded Test table insert mode: normal Test table remove mode: normal -------- Inconsistency record 0 -------- Prefix entry for 192.168.3.10/32 present on RP, missing on slot 2 Detected at 00:01:46.736 by scan-rp Event log entries relevant for 192.168.3.10: +00:00:00.000: *.*.*.*/* New FIB table [OK] 0x403FA4E8 0x403FA530 0x4009C1FC 0x4009C1E8 +00:00:03.092: *.*.*.*/* Flush ADJ table [OK] 0x404000B0 0x4040EEC0 0x4040F100 0x40401F64 0x404021AC 0x4040229C 0x404029C8 0x4009C1FC 0x4009C1E8 +00:00:03.100: *.*.*.*/* Flush FIB table [OK] 0x404039D0 0x40401F4C 0x404021AC 0x4040229C 0x404029C8 0x4009C1FC 0x4009C1E8 +00:00:03.124: *.*.*.*/* New FIB table [OK] 0x404039D8 0x40401F4C 0x404021AC 0x4040229C 0x404029C8 0x4009C1FC 0x4009C1E8 First event occurred at 00:00:07.600 (2w5d ago) Last event occurred at 00:00:10.724 (2w5d ago)
注:不整合レコードへのSNMPアクセスはありません。この機能は、今後のIOSリリースで追加される可能性があります。
clear cef linecard <slot>ライン カードからIPプレフィクスが欠落している場合、このコマンドを使用して、ライン カードのFIBにそのプレフィクスを再インストールします。
clear ip route <prefix>RPからプレフィクスが欠落している場合、このコマンドを使用して、RPのFIBにそのプレフィクスを再インストールします。
Consistency Checkerで問題が検出された場合、その問題を正確にトラブルシューティングするには、次のコマンド出力が必要になります。
show ip cef <problem prefix>RP上のFIBのエントリを表示します。
exec all show ip cef <problem prefix>ライン カード上のCEF FIBの値を表示します。
show tech cefCEFに関するテクニカル サポート情報を提供します。
show ip cef inconsistency records detailRP上のCEF FIB不一致に関する詳細情報を表示します。
exec slot show ip cef inconsistency records detailライン カード上のCEF FIB不一致に関する詳細情報を表示します。
no ip cef table consistency-checkCheckerをオフにします。
debug ip cef table consistency-checkersクエリーおよびチェック イベントをデバッグします。
CEFの不一致をクリアするには、clear ip cef inconsistencyコマンドを使用します。Consistency Checkerをオフにするには、no ip cef table consistency-checkコマンドを使用します。Consistency Checkerをオフにしても、報告された問題が解決されるわけではないので注意してください。システムは引き続き不一致のある状態で稼働しているので、不測の事態が引き起こされる可能性があります。
CEF Consistency Checkerの最初のバージョンでは、稀にですが、実際には不一致が発生していないにもかかわらず不一致が報告されることがあります。この問題は、(特に大規模な更新が行われる際に)CEFデータベースを更新するとき、およびRPからライン カードへ新しい情報を配布するときの、一時的なタイミングのずれによって生じます。このようなメッセージは、非常に限られた確率でしか発生しないためCPUへの悪影響はありませんが、作業の妨げになります。不一致に関する問題をトラブルシューティングするとき以外は、CEF Consistency Checkerをディセーブルにしておくことを推奨します。
更新プロセス中に実体のないプレフィクス不一致をできるだけ検出させないようにするには、検出を遅延させる時間(settle-time)を調節します。ip cef table consistency-check [settle-time <time>]コマンドを使用します。このコマンドは、存在するイベントログに依存します。それ以外の場合、settle-timeは事実上0です。
RP上で欠落している隣接プレフィクス(ARPエントリの/32)の誤った検出を防ぐために、65秒のデフォルト値が選ばれています。ARP deleteは、RP上で次の2ステップで行われます。
隣接が不完全であることがマークされ、隣接プレフィクスが削除されます。
1分間のadjacency walkerによって隣接が削除され、ライン カードにも同じ動作を行うように通知されます。
隣接プレフィクスがライン カードに存在していてRPにない場合、このプロセスによって、最大60秒のずれが生じます。
注:コンシステンシチェックのバージョン2.0では、誤った不整合の問題が修正されています。
次の表に、CEF Consistency Checkerに関する既知のバグを示します。このリストは、すべてを網羅するものではありません。
CSCdt18447CEF Event Logger/Consistency CheckerによるCPUの大量消費
CSCuk23390lc-detectによってmallocに割り込みレベルでエラーが発生する
CSCuk23290CEF inconsistency event recorderによって記憶域が不正に割り当てられる
CSCdt04645メモリ リークの問題(c-stat Consistency Checkerプロセスなど、分散型CEFを実行するあらゆるプロセスに影響)を解決
改定 | 発行日 | コメント |
---|---|---|
1.0 |
10-Aug-2005 |
初版 |