この製品のマニュアルセットは、偏向のない言語を使用するように配慮されています。このマニュアルセットでの偏向のない言語とは、年齢、障害、性別、人種的アイデンティティ、民族的アイデンティティ、性的指向、社会経済的地位、およびインターセクショナリティに基づく差別を意味しない言語として定義されています。製品ソフトウェアのユーザーインターフェイスにハードコードされている言語、RFP のドキュメントに基づいて使用されている言語、または参照されているサードパーティ製品で使用されている言語によりドキュメントに例外が存在する場合があります。シスコのインクルーシブランゲージに対する取り組みの詳細は、こちらをご覧ください。
このドキュメントは、米国シスコ発行ドキュメントの参考和訳です。リンク情報につきましては、日本語版掲載時点で、英語版にアップデートがあり、リンク先のページが移動/変更されている場合がありますことをご了承ください。あくまでも参考和訳となりますので、正式な内容については米国サイトのドキュメントを参照ください。
この章では、コンテント スイッチングの設定方法について説明します。
Content Switching Module(CSM;コンテント スイッチング モジュール)により、Toolkit Command
Language(TCL)スクリプトをアップロードし、CSM上で実行できます。TCLは、ネットワーク コミュニティで普及しているスクリプト言語です。また、TCLには開発されたスクリプトに関連する大量のライブラリがあり、さまざまなサイトから容易にアクセスできます。TCLスクリプトを使用すると、カスタムTCLスクリプトを作成し、カスタム ヘルス プローブまたはスタンドアロン タスクを開発することができます。
CSMのTCLインタープリタ コードは、標準TCLのRelease 8.0に準拠しています。スクリプトを作成してヘルス プローブを設定するか( ヘルス モニタリング用プローブの設定を参照)、またはヘルス プローブに含まれないタスクをCSM上で実行することができます。CSMはユーザ側で設定可能な間隔で、定期的にスクリプトを実行します。
CSM Release 3.1(1a)までは、基本ヘルス モニタリング コードに含まれないプロトコル用にヘルス プローブを設定することはできませんでした。現在は、プローブを作成し、特定のアプリケーションに合わせてCSMをカスタマイズできます。CSM Release 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 Series Content Switching Module Command Reference 』を参照してください)。次に、スクリプトをリロードする例を示します。
実行コンフィギュレーションから script file コマンドを削除する場合は、 no script file コマンドを使用します。このコマンドによってファイルに含まれていたスクリプトがアンロードされるわけではありません。また、CSM上で実行中のスクリプトも影響を受けません。ロードしたスクリプトをアンロードすることはできません。ロードしたスクリプトが不要になっても、スクリプトを削除する必要はありません。
CSM Release 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 |
|
enable_real serverfarmName realIp |
|
同じスクリプトで実行されているすべてのプローブ スレッドに対してグローバルな変数を設定することで、プローブ状態を保存できます。このコマンドは、プローブ スクリプトに対してのみ機能します。スタンドアロン スクリプトには適用されません。 プローブ スクリプトの変数は、1つのプローブ スレッド内でしか認識できません。プローブが終了するたびに、すべての変数は消去されます。たとえば、プローブ スクリプトに「gset x 1 ; incr x」が含まれている場合、変数xにはプローブごとに1が追加されます。 • • • |
|
デフォルトでは、すべてのCSMスクリプト プローブがリセットの送信によってTCPソケットをクローズしています。このアクションは、CSMがアクティブTCPクローズを初期化するときに、TIME_WAITステートを回避するために実行されます。 VxWorkで使用できるソケット数が255に制限されているため、多くのプローブが同時に実行されている場合、CSMのシステム リソースが足りなくなり、ソケットのオープン時に次のプローブを実行できなくなります。 ソケットに適切なコマンドが入力されると、CSMはリセットの代わりにFINを使用してTCP接続をクローズします。このコマンドは、システムのプローブが250未満の場合のみ使用します。 |
|
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 Series Content Switching Module Command Reference 』を参照)。
サーバ ファームおよび仮想サーバにスクリプトをロード、生成、適用してプローブ スクリプトを実行し、結果を表示する手順は、次のとおりです。
ステップ 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の出力を検出します。
最後の終了ステータスには、終了コード番号(CSMの終了コードに示す)が表示されます。
固定変数情報は、 gset varname value コマンドで設定されます(CSM固有のTCLコマンドを参照)。
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