このセクションでは、外部健全性モニターの問題をトラブルシューティングする方法について説明します。
NSX Advanced Load Balancer の外部健全性モニターはスクリプトを使用して、高度にカスタマイズされたきめ細かい健全性チェックを提供します。スクリプトは Linux シェル、Python、Perl のいずれかであり、wget
、netcat
、curl
、snmpget
などを実行するために使用できます。
トラブルシューティングの手順
NSX Advanced Load Balancer のディレクトリ構造は、NSX Advanced Load Balancer ユーザー インターフェイスでは公開されません。これは、管理シェルまたはコンソール アクセス経由でのみ使用できます。外部健全性モニター スクリプトのアクセス権は制限されているため、NSX Advanced Load Balancer システムの通常の機能には影響しません。外部健全性モニター スクリプトでは、CPU、メモリ、ディスク、およびその他のリソースが制限されます。そのため、外部健全性モニターのタイムアウトを緩和することをお勧めします。
NSX Advanced Load Balancer CLI の使用
外部モニターを構築する場合、コマンドの正常な実行を手動でテストすることが一般的です。SE からコマンドを実行するには、適切なネームスペースまたはテナントに切り替える必要があります。本番環境の外部モニターは、適切なテナントを正しく使用します。
NSX Advanced Load Balancer CLI を使用して NSX Advanced Load Balancer SE に接続するには、『VMware NSX Advanced Load Balancer 管理ガイド』の「スーパー ユーザーの SSH アクセス」を参照してください。
スクリプト パラメータの詳細については、「外部健全性モニター」を参照してください。
外部健全性モニター スクリプトが stdout
コマンドの出力を提供する場合、健全性モニターが正常に実行されたことを示します。このスクリプトが出力を提供しない場合、失敗として扱われます。
トラブルシューティングの例
出力が stderr
ではなく stdout
に書き込まれることを確認します。
たとえば、次の使用方法が失敗します。
netcat -v -n -z -w 3 $IP $PORT | grep "open" 2>&1 > /dev/null
netcat
コマンドの出力が stderr
に書き込まれます。grep
コマンドは stdout
で動作します。そのため、出力データは stderr
で使用できます。
これを確認するには、次を実行します。
root@avi-se-iihyz:/run/hmuser# netcat -v -n -z -w 3 $IP $PORT | grep "open" 2>&1 > /dev/null (UNKNOWN) [10.10.30.34] 80 (http) open ? still shows up.
上記を次のように変更すると、問題が解決されます。
netcat -v -n -z -w 3 $IP $PORT 2>&1 | grep "open"
Show コマンドの使用
show pool <pool-name> server hmonstat
コマンドは、失敗コード、要求、および応答文字列に関する情報を提供します。
NSX Advanced Load Balancer ユーザー インターフェイスの使用
NSX Advanced Load Balancer ユーザー インターフェイスにログインし、 の順に移動して目的のプールを選択し、[イベント] をクリックして健全性モニター ログを確認します。
スクリプトからのエラー コード
外部健全性モニター スクリプトのリターン コードは、失敗の理由コードを選択するために使用されます。有効なエラー コードは次のとおりです。
- EINTR、ETIMEDOUT
-
接続タイムアウト。(スクリプトのタイムアウト時に NSX Advanced Load Balancer インフラストラクチャによって生成されます)
- ECONNREFUSED
-
Connection refused
- ECONNRESET
-
接続がリセットされました
- EADDRINUSE/EADDRNOTAVAIL
-
アドレスを使用できません
- EHOSTDOWN/EHOSTUNREACH
-
ホストに到達できません
- ENETDOWN/ENETUNREACH
-
ネットワークに到達できません
- ENOBUFS/ENOMEM
-
リソースが不足しています。(これは、リソースの割り当てに失敗した場合に NSX Advanced Load Balancer インフラストラクチャによって生成される可能性があります)
その他すべてのエラーは、他のエラーとして扱われます。
スクリプトはエラーを
$HM_NAME.$IP.$PORT.out
に書き込むことができます。この出力は、デバッグを支援するために上記のコマンドの出力で使用できます。これは、外部健全性モニターのデバッグが有効になっている場合にのみ機能します。
スクリプトを実行してスクリプトのトラブルシューティングを行うために、スーパー ユーザーは root 権限を使用してサービス エンジン コンソールにログインし、sudo - hmuser として、
/run/hmuser
ディレクトリに保存されているスクリプトを実行できます。
トラブルシューティングのためにサービス エンジンのスクリプトを変更することはできますが、この変更は一時的なものです。サービス エンジンが再起動するか、プール/健全性モニターを変更すると、変更は失われます。健全性モニターの構成を変更する正しい方法は、NSX Advanced Load Balancer ユーザー インターフェイス/CLI/API から行うことです。
パケット キャプチャ
外部健全性モニター パケットは、NSX Advanced Load Balancer Controller のシェル プロンプトから、フィルタ オプションを指定して tcpdump
コマンドを使用します。
tcpdump -i <avi_ethX>”
上記のコマンドの出力には、外部健全性モニターのトラフィックが表示されます。
NSX Advanced Load Balancer Controller への SSH キーベースのログインの詳細については、『VMware NSX Advanced Load Balancer 管理ガイド』の「管理者ユーザーのパスワードなしの SSH ベースのログイン」を参照してください。
SNAT IP および外部健全性モニター
外部健全性モニターの SNAT はサポートされていません。そのため、SNAT IP アドレスと外部 HM を一緒に構成することはできません。
仮想サービスに SNAT IP アドレスが構成され、同じ仮想サービスの外部健全性モニターも構成されている場合、組み込みの健全性モニターは SNAT を受け入れ、SNAT IP アドレスを介して TCP 接続を開始します。ただし、外部健全性モニターが使用されている場合、SNAT IP アドレスは考慮されません。これは、想定どおりの動作です。