この製品のマニュアルセットは、偏向のない言語を使用するように配慮されています。このマニュアルセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザーインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブランゲージに対する取り組みの詳細は、こちらをご覧ください。
このドキュメントは、米国シスコ発行ドキュメントの参考和訳です。リンク情報につきましては、日本語版掲載時点で、英語版にアップデートがあり、リンク先のページが移動/変更されている場合がありますことをご了承ください。あくまでも参考和訳となりますので、正式な内容については米国サイトのドキュメントを参照ください。
この章では、コンテント スイッチングの設定方法について説明します。この章の構成は次のとおりです。
CSM により、Toolkit Command Language(TCL)スクリプトをアップロードし、CSM上で実行できるようになります。 TCLは、ネットワーク コミュニティで普及しているスクリプト言語です。 また、TCL には膨大なスクリプト ライブラリが開発されており、さまざまなサイトから容易にアクセスできます。 TCLスクリプトを使用すると、カスタムTCLスクリプトを作成し、カスタム ヘルス プローブまたはスタンドアロン タスクを開発することができます。
CSM の TCL インタープリタ コードは、標準 TCL のリリース 8.0 に準拠しています。 スクリプトを作成してヘルス プローブを設定する(「ヘルス モニタリング用プローブの設定」 を参照)、またはヘルス プローブに含まれないタスクを CSM 上で実行することができます。 CSMはユーザ側で設定可能な間隔で、定期的にスクリプトを実行します。
CSM リリース 3.1(1a) までは、基本ヘルス モニタリング コードに含まれないプロトコル用にヘルス プローブを設定することはできませんでした。 現在は、プローブを作成し、特定のアプリケーションに合わせてCSMをカスタマイズできます。 CSM リリース 3.2 は、UDP ソケット機能をサポートします。
CSMは現在、次の2種類のスクリプト モードをサポートしています。
• プローブ スクリプト モード-このタイプのスクリプトは、ある種の単純なルールに従って作成する必要があります。 このスクリプトの実行は、ヘルス モニタリング モジュールが制御します。
スクリプトは、スクリプト プローブの一部として定期的に実行され、実行中のスクリプトが返した終了コードによって、特定の実サーバについて、相対的な状態と可用性がわかります。 スクリプト プローブの動作は、現在のCSMソフトウェアで利用できる他のヘルス プローブと類似しています。
• スタンドアロン スクリプト モード-このタイプのスクリプトは、汎用的なTCLスクリプトです。 このスクリプトの実行は、CSM のコンフィギュレーションによって制御します。 プローブ スクリプトはスタンドアロン タスクとして実行できます。
TCL機能をサポートするために、サンプル スクリプトを利用できます。 その他のカスタム スクリプトも使用できますが、これらのサンプル スクリプトはシスコシステムズのTACがサポートしています。 サンプル スクリプトのファイルには、次のURLからアクセスしてください。
http://www.cisco.com/cgi-bin/tablebuild.pl/cat6000-intellother
スクリプトは、スクリプト ファイルによってCSMにロードします。 スクリプト ファイルには、スクリプトがない場合もあれば、1つまたは複数のスクリプトが含まれている場合もあります。 1つのスクリプトに128 KBのスタック スペースが必要です。 ヘルス スクリプトは最大50ありますので、スクリプト プローブのスタックスペースは、最大で6.4 MBになります。 スタンドアロン スクリプトも実行できますが、そのためにさらにスタック スペースを消費します。
スクリプトはTFTPサーバ、ブートフラッシュ、スロット0、またはその他のストレージ デバイスから、 script file [ file-url ] コマンドを使用してロードできます。
スクリプト名は、スクリプトのファイル名またはスクリプト ファイル内部で符号化された特殊な名前です。 各スクリプト ファイルは、同じファイルに複数のスクリプトが収められている場合があります。 スクリプトを実行する、またはスクリプトを使用してヘルス プローブを作成するには、スクリプトのロード元となったスクリプトファイルではなく、スクリプト名を参照する必要があります。
各関連スクリプトを識別できるように、次の行から各スクリプトを始める必要があります。
次に、スクリプトをバンドルしたマスター スクリプト ファイルの例を示します。
次に、マスター スクリプト ファイルに含まれているファイルを調べる例を示します。
次に、script.masterファイルにスクリプトが 3 つある例を示します。
ロードしたスクリプト ファイルの内容を表示するには、次のコマンドを使用します。
スタンドアロン スクリプト タスクとスクリプト プローブとで大きく異なる点は、ヘルス モニタリング用のCSMモジュールによって、ヘルス スクリプトがスケジューリングされるかどうかです。 次の条件が当てはまります。
• スクリプト プローブがアクティブでも、スクリプトを変更できます。 変更点は、次のスクリプト実行時に、コマンド ラインの引数用に自動的に適用されます。
• プローブの設定時に、特定のスクリプトがプローブに結合されます。 その時点でスクリプトが使用できないと、プローブはNULLスクリプトを使用して実行されます。 この状況が発生すると、警告フラグが生成されます。 ただし、スクリプトのリロード時には、プローブ オブジェクトとスクリプト間のバインディングは自動的には実行されません。 バインディングを実行するには、もう一度、 no script および script コマンドを使用する必要があります。
• スクリプトがロードされると、スクリプトはシステムにロードされたままになり、削除できません。 スクリプトを変更するには、スクリプトを変更してから再び no script file および script file コマンドを入力します。
• 各スクリプトは常に固有の名前で識別されます。 同名のスクリプトが2つ以上ある場合、CSMは最後にロードされたスクリプトを使用します。 スクリプト名が重複していると、CSMによって警告メッセージが生成されます。
スクリプト ファイルをロードすると、スクリプトのロード元ファイルとは無関係に、そのファイルに含まれていたスクリプトがCSMに組み込まれます。 その後、スクリプト ファイルを変更する場合には、 script file コマンドを使用して、スクリプト ファイルをリロードし、CSM上で変更できるようにします (詳細は、『Catalyst 6500 シリーズ コンテント スイッチング モジュール コマンド リファレンス』を参照)。 次に、スクリプトをリロードする例を示します。
実行コンフィギュレーションから script file コマンドを削除する場合は、 no script file コマンドを使用します。 このコマンドによってファイルに含まれていたスクリプトがアンロードされるわけではありません。また、CSM上で実行中のスクリプトも影響を受けません。 ロードしたスクリプトをアンロードすることはできません。 ロードしたスクリプトが不要になっても、スクリプトを削除する必要はありません。
CSM リリース 4.1(1) の TCL スクリプト機能は、TCL 8.0 ソース ディストリビューション ソフトウェアに準拠しています。 CSM TCL の変更により、スタンダード TCL ライブラリとは異なる他のプロセスを呼び出すために中断したり、同時に TCL インタープリタを実行したりすることが可能になりました。 CSM TCL ライブラリは、 file 、 fcopy 、およびその他の標準TCLファイル入出力コマンドをサポートしません。
表 10-1 では、CSMがサポートするTCLコマンドを示しています。
|
|||
---|---|---|---|
|
|||
|
|||
|
|||
表 10-2 では、CSMがサポートしないTCLコマンドを示しています。
|
|||
---|---|---|---|
表 10-3 では、CSM に固有 TCL コマンドを示しています。
|
|
---|---|
disable_real serverfarmName realIp port ,-1 | all probeNumId probeNameId |
PROBE_FAILステートにすることで、サーバ ファームの実サーバをディセーブルにします。 成功した場合、このコマンドは 1 を返します。失敗した場合、0 を返します。 disable_real SF_TEST 1.1.1.1 -1 10 cisco ![]() (注) サーバ ファーム名は、CSCec72471ごとに大文字を使用する必要があります。 |
enable_real serverfarmName realIp port ,-1 | all probeNumId probeNameId |
PROBE_FAILステートから動作可能な状態に実サーバをイネーブルにします。 成功した場合、このコマンドは 1 を返します。失敗した場合、0 を返します。 ![]() (注) サーバ ファーム名は、CSCec72471 ごとに大文字を使用する必要があります。 |
同じスクリプトで実行されているすべてのプローブ スレッドに対してグローバルな変数を設定することで、プローブ状態を保存できます。 このコマンドは、プローブ スクリプトに対してのみ機能します。スタンドアロン スクリプトには適用されません。 プローブ スクリプトの変数は、1つのプローブ スレッド内でしか認識できません。 プローブが終了するたびに、すべての変数は消去されます。 たとえば、プローブ スクリプトに「gset x 1 ; incr x」が含まれている場合、変数xにはプローブごとに1が追加されます。 • • • |
|
デフォルトでは、すべてのCSMスクリプト プローブがリセットの送信によってTCPソケットをクローズしています。 このアクションは、CSMがアクティブTCPクローズを初期化するときに、TIME_WAITステートを回避するために実行されます。 VxWorkで使用できるソケット数が255に制限されているため、多くのプローブが同時に実行されている場合、CSMのシステム リソースが足りなくなり、ソケットのオープン時に次のプローブを実行できなくなります。 ソケットに適切なコマンドが入力されると、CSMはリセットの代わりにFINを使用してTCP接続をクローズします。 このコマンドをは、システムのプローブが 250 未満の場合のみ使用します。 |
|
このコマンドは CSM リリース 3.2 では現在使用できません。 スクリプトのホストにpingを実行できます。 成功した場合、このコマンドは 1 を返します。失敗した場合、0 を返します。 ![]() (注) リモート ホストが各CSCea67098のCSMと同じサブネットにない場合、このコマンドはスクリプトをブロックします。 |
|
TCLスクリプトからCSMにXML設定文字列を送信します。 このコマンドは、XML サーバが CSM でイネーブルになっている場合のみ機能します。 XML設定の章を参照してください。 |
UDPコマンド セットにより、ScottyベースのTCLスクリプトがCSM上で実行されます。 Scottyはソフトウェア パッケージの名前で、高レベル、文字列ベースのAPIを使用するサイト特有のネットワーク管理ソフトウェアの実装を可能にします。 すべてのUDPコマンドは、その他のCSM TCLコマンド同様、スレッド セーフ(複数のプログラム間でデータ共有が可能)です。
表 10-4 に、CSMで使用するUDPコマンドを示します。
多様なアプリケーション セットおよびヘルス プローブを使用してネットワークを管理する必要がある場合、CSMではHTTPヘルス プローブ、TCPヘルス プローブ、およびICMPヘルス プローブなどいくつかの特定タイプのヘルス プローブをサポートします。 現在のCSMソフトウェア リリースでサポートされる基本的なヘルス プローブ タイプは、ネットワークの求める特定のプローブ動作をサポートしないことがあります。 より柔軟なヘルス プローブ機能をサポートするために、CSMは現在、TCLスクリプトをアップロードし、CSM上で実行できるようになっています
プローブに関連付けられたサーバ ファーム内の個々の実サーバに対して、CSMが定期的に実行するスクリプト プローブを作成できます。 スクリプトの終了コードに基づいて、実サーバはヘルシー、サスペクト、失敗と判断されます。 プローブ スクリプトは、サーバへのネットワーク接続を確立し、サーバにデータを送信し、応答を確認することによって、実サーバの状態をテストします。 このTCLスクリプト環境は柔軟性が高いので、プローブ機能が使用できるようになります。
各タイム インターバルを設定すると、CSMの内部スケジューラがヘルス スクリプトをスケジューリングします。 一回だけプローブ実行されるように、スクリプトを作成してください。 exit コマンドを使用して、プローブの結果を宣言する必要があります。
• exit 5000(成功)またはexit 5001(失敗)を使用することによって、スクリプトを終了します。
新しい probe probe-name script コマンドを使用すると、Cisco IOSソフトウェアでスクリプト プローブを作成できます。 このコマンドによって、従来のCSMヘルス プローブ サブモード(HTTP、TCP、DNS、SMTPなど)と同様のプローブ サブモードが開始されます。 プローブ スクリプト サブモードには、従来のプローブ サブモード コマンド( failed 、 interval 、 open 、 receive 、および retries )が含まれます。
さらに、新しい script script-name コマンドがプローブ スクリプト サブモードに追加されました。 このコマンドでは5つの引数を使用できます。各引数は、実行時にヘルス プローブ機能の一部としてスクリプトに渡されます。
次に、ヘルス スクリプトを使用してHTTPサーバを調べる記述例を示します。
ヘルス プローブ スクリプトは、事前に定義されたTCL配列によって、さまざまな設定項目にアクセスできます。 この配列の最も一般的な用途は、スクリプトの起動中に疑わしいとされたもの(サスペクト)の、現在の実サーバIPアドレスを調べることです。
CSM上でスクリプト プローブが実行されるたびに、csm_envという特殊な配列がスクリプトに渡されます。 この配列には、スクリプトが使用する重要なパラメータが格納されます。
(注) ここで使用する環境変数の情報は、プローブ スクリプトのみに適用されます。スタンドアロン スクリプトには適用できません。
表 10-5 では、csm_env 配列のメンバーを示しています。
|
|
---|---|
プローブ スクリプトは終了コードを使用して、各種の内部状態を示します。 終了コード情報は、スクリプトが正常に動作しなかった場合のトラブルシューティングに役立ちます。 使用できる終了コードは、 exit 5000 および exit 5001 だけです。 プローブ スクリプトは、スクリプトの終了コードを使用して、実サーバの相対的な健康状態と可用性を示します。 スクリプトはexit 5000を呼び出すことによって、サーバがプローブに正常に応答したことを示します。 exit 5001を呼び出した場合、サーバがヘルス プローブに正しく応答しなかったことを示します。
プローブ スクリプトが失敗して5001で終了した場合、対応するサーバはPROBE_FAILEDとマーキングされ、一時的にサーバ ファームからディセーブルにされます。 CSMはサーバの調査を継続します。 プローブが正常に再接続されて5000で終了した場合、CSMはサーバ ステータスにOPERATIONALとマーキングして、サーバ ファームからそのサーバを再度イネーブルにします。
exit 5001のスクリプトに加え、次の状態はスクリプトを失敗させて、PROBE_FAILED(サスペクト)とマーキングされる可能性があります。
• TCL エラー-スクリプト内に、TCL インタープリタで検出されたエラーが含まれる場合に発生します(構文エラーなど)。 構文エラー メッセージは特殊な変数 erroInfo に保存されるため、 show mod csm X tech script コマンドで表示できます。
• スクリプトの停止-無限ループまたはスクリプトが無効なIPアドレスに接続しようとしたことが原因です。 各スクリプトは設定された時間内にタスクを完了しなければなりません。 スクリプトがタスクを完了できなかった場合、スクリプト コントローラがスクリプトを中止します。サスペクトは暗黙の失敗とみなされます。
• エラー条件-接続のタイムアウトまたはピアによる接続拒否も、暗黙の失敗として扱われる場合に発生します。
表 10-6 では、CSM で使用される終了コードをすべて示しています。
|
|
---|---|
デバッグが目的であれば、特殊な変数EXIT_MSGにスクリプト デバッグ情報を設定すると効果的です。 EXIT_MSG変数を使用して特定のCisco IOS show コマンドを入力することで、スクリプトの実行ポイントを追跡できます。
次に、EXIT_MSG変数を使用して、スクリプトの終了点を追跡し、スクリプトが機能しなかった理由を調べる方法を示します。
EXIT_MSG変数を調べるには、 show module csm slot tech script コマンドを使用します。
次に、終了前に実行した最後のスクリプトが EXIT_MSG であるために、EXIT_MSG が「opening socket」に設定された例を示します。
プローブ スクリプトを実行するには、スクリプト プローブ タイプを設定し、スクリプト名をプローブ オブジェクトに関連付けます(『Catalyst 6500 シリーズ コンテント スイッチング モジュール コマンド リファレンス』を参照)。
サーバ ファームおよび仮想サーバにスクリプトをロード、生成、適用してプローブ スクリプトを実行し、結果を表示する手順は、次のとおりです。
ステップ 3 サーバ ファームおよび仮想サーバにプローブを適用します。
この時点でスクリプト プローブが設定されます。 show module csm slot tech probe コマンドを使用して、実行されているスクリプトを確認できます。
ここでは、スクリプト コマンドの結果を検証する例を示します。
次に、プローブ スクリプトに関する情報を表示する例を示します。
次に、特定のプローブ スクリプトに関する詳細情報を表示する例を示します。
• verboseモードで実行しているスクリプトにTCLの puts コマンドを使用します。
verboseモードで puts コマンドを使用すると、各プローブ サスペクトはCSMコンソールに文字列を表示します。 システムで実行しているサスペクトが多いと、リソースもそれだけ必要になるため、CSMコンソールがハングする可能性があります。 この機能は、システムに設定されたサスペクトが1つである場合にのみイネーブルにすることを推奨します。
各プローブ サスペクトに自身のEXIT_MSG変数が含まれています。 この変数によりスクリプトのステータスを追跡して、プローブの状態を確認できます。
メッセージ受信時にプローブ サスペクトが失敗した場合、文字列を受信する前にEXIT_MSG =を確認する必要があります。
• show module csm slot probe real [ ip ]コマンドを使用します。
このコマンドは、システム内で現在アクティブなプローブ サスペクトを表示します。
(注) 最後の終了コードには、表 10-6に示す終了コードのうち1つが表示されます。
• show module csm slot tech probe コマンドを使用します。
このコマンドは現在のプローブ ステータスを表示します(標準およびスクリプト プローブの両方)。
• show module csm slot tech script コマンドを使用して、最後の終了ステータス、永続変数、errorInfo、およびEXIT_MSGの出力を検出します。
最後の終了ステータスには、表 10-6に示す終了コード番号が表示されます。
永続変数情報は、 gset varname value コマンドで設定されます(表 10-3を参照)。
erroInfo変数はTCLコンパイラで生成されたエラーのリストです。 スクリプトにTCLのランタイム エラーが含まれている場合、TCLインタープリタはスクリプトの実行を停止して、erroInfo変数のエラー情報を保存します。
EXIT_MSG(「EXIT_MSG変数」を参照)は、失敗の恐れがある各プローブの詳細なデバッグ情報を表示します。 出力が非常に長くなる可能性があるため、次の例のようにキーワードで最初にフィルタリングすることもできます。
スタンドアロン スクリプトは、CSMでロードおよび実行する一般的なTCLスクリプトです。 スタンドアロン スクリプトはプローブ スクリプトとは違い、設定してサーバ ファームに適用されないため、CSMの定期的な実行タスクとしてのスケジューリングは行われません。 タスクを実行するには、 script task コマンドを使用する必要があります。
csm_env環境変数はスタンドアロン スクリプトには適用されません。 ただし、プローブ スクリプトの終了コードにスタンドアロン スクリプトに対する特別な意味が含まれていない場合、 exit コマンドを使用できます。
スタンドアロン スクリプトはスクリプト プローブと異なり、タスクを1度だけ実行するTCLスクリプトです。 スクリプトのロードが完了すると、実行が終了します。 スタンドアロン スクリプトはタスクとしてスクリプトが設定されないかぎり、定期的にCSMに実行されることはありません。 script file コマンドをスタートアップ コンフィギュレーションに組み込むと、CSMの起動時にコマンドが実行されます。 スクリプトはCSMの稼働中、引き続き実行されます。
スタンドアロン スクリプトを実行するには、次の手順を実行します。
ステップ 2 スタンドアロン タスクとしてスクリプトを実行します。
次のように新しいタスクIDを指定することで、新規タスクを開始することもできます。
ステップ 5 スクリプトのステータスを表示するには、 show コマンドを使用します。
特定の実行スクリプトに関する情報を表示するには、 show module csm slot script task index script-index detail または show module csm slot script name script-name code コマンドを使用します。
スタンドアロン スクリプトのデバッグは、プローブ スクリプトのデバッグとよく似ています (「プローブ スクリプトのデバッグ」を参照)。 実行している複数のスレッドが影響することはないため、スクリプトで puts コマンドを使用して、デバッグに役立てることができます。
ここでは、CSMのTCLスクリプトに関するよくある質問(FAQ)を説明します。
VxWorksサポート アプリケーションには、ファイル ディスクリプタが 255 個あります。これは標準入力、標準出力、あらゆるソケット接続(受信または送信)など、すべてのアプリケーション間で使用されています。 スタンドアロン スクリプトを作成する場合は、いつソケットをオープンするかについて、慎重に配慮する必要があります。 リソース不足を防ぐために、動作の完了後、ただちにソケットをクローズすることを推奨します。 ヘルス モニタリング モジュールは、活発に実行しているスクリプトの数を制御することによって、オープン ソケット数を制御します。 スタンドアロン スクリプトには、このような制御がありません。
メモリは考慮事項ではあるものの、大きな制約をもたらすことはありません。モジュールには通常、十分なメモリが装備されているからです。 スクリプトごとに 128 KB のスタックを 1 つずつ使用し、残りのメモリが実行時にスクリプトによって割り当てられます。
スクリプトの実行中もシステムのリアルタイム特性がある程度一定に保てるように、スクリプト タスクにはシステムで最下位のプライオリティが与えられています。 スクリプトのプライオリティが低いということは残念ながら、システムが TCL 以外の動作でビジーになっている場合に、どの TCL スレッドも完了までに時間がかかることを意味します。 このような状況では、一部のヘルス スクリプトが打ち切られ、未完了のスレッドにエラーのマークが設定されることがあります。 スクリプトがエラーにならないように、すべてのスクリプト プローブで再試行値を2以上に設定する必要があります。 可能なかぎり、固有の CSM プローブ(HTTP、DNS など)を使用してください。 スクリプトのヘルス プローブは、サポート外のアプリケーションをサポートする場合に使用してください。 目的は機能を提供することであり、速度ではありません。
TCLは同期と非同期の両方のソケット コマンドをサポートします。 非同期のソケット コマンドは、実接続を待たずに、ただちに戻ります。 非同期バージョンのスクリプトを内部で実装するには、この種のコマンドごとに多数のシステムコールを使用する、非常に複雑なコード パスが必要になります。 一般にこのような状況は、他のコマンドによるシステム コールの処理中にいくつかのクリティカル リソースが待機する原因となるので、システム速度を低下させます。 どうしても避けられない場合以外、スクリプト プローブに非同期ソケットを使用することは推奨できません。 ただし、スタンドアロン システムでこのコマンドを使用することは可能です
ネットワークの実サーバ側でSnifferを実行できます。 また、次の show コマンドを使用して、プローブがCSM上で実行されているかどうかを判断できます。
–プローブが実行されていれば、次の例で示すようにプローブを試行した回数が増加していきます。
–プローブが実行されていれば、この例で示すように成功または失敗のカウントが増加します。
また、リセット(RST)の代わりにFINを使用してソケットをクローズすることもできます。
• リモート ホストが到達不能の場合、UDPプローブが実サーバをPROBE_FAILステートにできない理由は?
UDP プローブは「icmp port unreachable」メッセージを受信して、サーバに PROBE_FAIL をマーキングする必要があります。 リモート ホストがダウンした場合、または応答しない場合、UDP プローブは ICMP メッセージを受信しないために、そのプローブのパケットは喪失したとみなされ、サーバは正常の状態にあると判断されます。
UDP プローブは Raw UDP プローブのため、CSM はプローブの応答ペイロードに単一のバイトを使用します。 CSM は UDP アプリケーションから意味のある応答がくることを想定していません。 CSM は ICMP 到達不能メッセージを使用して、UDP アプリケーションが到達可能かどうかを判断します。
受信タイムアウトでICMP到達不能の応答がない場合、CSM はプローブが正常に実行されていると判断します。 実サーバのIPインターフェイスがダウンまたは切断された場合、UDPプローブは自身で UDP アプリケーションが到達不能にあることを判断できません。 指定のサーバの UDP プローブのほかにICMP プローブを設定する必要があります。
回避策 : 常に ICMP を UDP のプローブ タイプで設定します。
• ダウンロード可能なサンプル スクリプトはどこにありますか?
TCL 機能をサポートするために、サンプル スクリプトを利用できます。 その他のカスタム スクリプトも使用できますが、これらのサンプル スクリプトはシスコシステムズの TAC がサポートしています。 サンプル スクリプトのファイルには、次の URL からアクセスしてください。
http://www.cisco.com/cgi-bin/tablebuild.pl/cat6000-intellother
スクリプト ファイルの名前は、 c6slb-script.3-3-1.tclです。
TCL 8.0のコマンド リファレンスには、次のURLからアクセスできます。
http://www.tcl.tk/man/tcl8.0/TclCmd/contents.html