症状
Edge UI または管理 API を使用した API プロキシ リビジョンのデプロイが失敗し、タイムエラーが表示されます。
エラー メッセージ
Click to change deployment status. The revision is deployed and traffic can flow, but flow may be impaired. Error: Call timed out; either server is down or server is not reachable
考えられる原因
通常この問題は、次の原因によるものです。
原因 | 詳細 | 対象 |
ネットワーク接続の問題 | ネットワーク接続の問題またはファイアウォール ルールが原因で、Management Server と Message Processor との間で通信障害が発生している。 | Private Cloud ユーザーのみ |
API プロキシ バンドルが大きい | API プロキシ バンドルのサイズが大きく、RPC タイムアウトが発生し、おそらく Message Processor がアクティブ化するまでに時間がかかっている。 | Private Cloud と Public Cloud ユーザー |
ネットワーク接続の問題
注: 次の手順を実施できるのは Edge Private Cloud ユーザーのみです。Edge Public Cloud を使用している場合は、Apigee サポートにお問い合わせください。
診断
- 次の管理 API 呼び出しを使用して、エラーを示している API のデプロイのステータスを取得します。
curl -v http://<management-server-IPaddress>:<port#>/organizations/<orgname>/environments/<envname>/apis/<apiname>/deployments -u <username>
エラーを示す出力例:
{ "error": "Call timed out; either server is down or server is not reachable", "status": "error", "type": [ "message-processor" ], "uUID": "ebbc1078-cbde-4a00-a7db-66a3c1b2b748" }, { "status": "deployed", "type": [ "message-processor" ], "uUID": "204e2b7e-52f7-46d9-b458-20f9bfb51e6d" }, { "status": "deployed", "type": [ "router" ], "uUID": "967e63c6-ee95-47c0-9608-f4a32638fb1e" }, { "status": "deployed", "type": [ "router" ], "state" : "error" }
上記の出力例は、UUID が「
ebbc1078-cbde-4a00-a7db-66a3c1b2b748
」である Message Processor のいずれかでエラーが発生したことを示しています。 - 使用している API プロキシのデプロイのステータス出力に基づいて、エラーを示した該当の UUID を使用して各 Message Processor にログインし、次の手順を実施します。
- Message Processor がポート 4528 で待機しているかどうかを確認します。
netstat -an | grep LISTEN | grep 4528
Message Processor がポート 4528 で待機していない場合は、Message Processor を再起動します。
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 上記の手順 1 の管理 API 呼び出しを使用して、API プロキシのデプロイのステータスを再確認します。エラーがなければ、問題が解決されたことを示します。
- Message Processor がポート 4528 で待機しているかどうかを確認します。
- 問題が解決しない場合は、次の手順に沿って、Management Server からポート 4528 の Message Processor への接続をテストします。
- telnet を使用します。
telnet <MessageProcessor_IP> 4528
- telnet を使用できない場合は、次のように netcat で接続を確認します。
nc -vz <MessageProcessor_IP> 4528
- [Connection Refused] または [Connection timed out] と表示された場合は、ネットワーク オペレーション チームにお問い合わせください。
- telnet を使用します。
- 次の手順に沿って、ポート 4526 の Message Processor と Management Server の接続をテストします。
- telnet を使用します。
telnet <management-server-IP> 4526
- telnet を使用できない場合は、次のように netcat で接続を確認します。
nc -vz <management-server-IP> 4526
- [Connection Refused] または [Connection timed out] と表示された場合は、ネットワーク オペレーション チームにお問い合わせください。
- telnet を使用します。
- ネットワーク オペレーション チームの協力で、次の手順を実施してください。
- Management Server と Message Processor の両方で RPC プロトコルが許可されていることを確認します。
- Management Server と Message Processor との間のファイアウォール制限またはセキュリティルール セットアップを削除して、Management Server のポート 4526 への接続と、Management Server からポート 4528 の Message Processor への接続を許可します。
- デプロイ状況を再確認します(上記の手順 1 を参照)。エラーが表示されない場合は、エラーが解決されたことを示します。
- 問題が解決しない場合は、Message Processor のネットワークに問題がないかどうかを確認してください。ネットワークに問題がある場合、タイムアウト エラーを示した該当の Message Processor を再起動すると(デプロイのステータス出力ごとに)問題が解決することがあります。
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- それでも問題が解決しない場合は、(
/opt/apigee/var/log/edge-management-server/logs/system.log
)で Management Server のログを確認してください。Management Server ログの呼び出しタイムアウト エラーの例
2016-05-17 09:29:56,448 org:myorg env:prod qtp281969267-360792 ERROR DISTRIBUTION - RemoteServicesConfigEventHandler.configureServers() : exception for server with uuid e1381db7-d83b-4752-ae04-2de33f07e555 : cause = RPC Error 504: Call timed out communication error = true com.apigee.rpc.RPCException: Call timed out at com.apigee.rpc.impl.AbstractCallerImpl.handleTimeout(AbstractCallerImpl.java:64) ~[rpc-1.0.0.jar:na] at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.handleTimeout(RPCMachineImpl.java:483) ~[rpc-1.0.0.jar:na] at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall.access$000(RPCMachineImpl.java:402) ~[rpc-1.0.0.jar:na] at com.apigee.rpc.impl.RPCMachineImpl$OutgoingCall$1.run(RPCMachineImpl.java:437) ~[rpc-1.0.0.jar:na] at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:532) ~[netty-all-4.0.0.CR1.jar:na] at io.netty.util.HashedWheelTimer$Worker.notifyExpiredTimeouts(HashedWheelTimer.java:430) ~[netty-all-4.0.0.CR1.jar:na] at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:371) ~[netty-all-4.0.0.CR1.jar:na] at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_79]
上記の例と同様のエラーが発生した場合は、Management Server の RPC タイムアウト値を増やすと、ネットワークが遅くなった場合でも Management Server が Message Processor に接続する時間を確保できます。
解決策
注: 次の手順を実施できるのは Edge Private Cloud ユーザーのみです。Edge Public Cloud を使用している場合は、Apigee サポートにお問い合わせください。
- RPC タイムアウト値を増やすには、次の手順を実施します。
- Management Server マシンがまだ存在しない場合は、
/opt/apigee/customer/application/management-server.properties
ファイルを作成します。 - このファイルに次の行を追加します。
conf_cluster_rpc.connect.timeout=<time in seconds>
デフォルトの RPC タイムアウト値は 10 ですが、40 秒に増やすことをおすすめします。次のように設定します。
conf_cluster_rpc.connect.timeout=40
- このファイルが apigee によって所有されていることを確認してください。
chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- Management Server を再起動します。
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- Management Server が複数ある場合は、すべての Management Server で上記の手順を繰り返します。
- Edge UI に API プロキシをデプロイするか、Edge 管理 API 呼び出しを使用してデプロイします。API プロキシが問題なくデプロイされると、問題が解決されたことを示します。
- Management Server マシンがまだ存在しない場合は、
- 問題が解決しない場合は、tcpdump コマンドを Management Server と Message Processor から収集します。各サーバーで tcpdump コマンドを有効にした後、場合によっては管理 API を使用して、UI から API プロキシのデプロイを開始します。
- Management Server から次の tcpdump コマンドを実行します。
tcpdump -i any -s 0 host <message-processor-IP address> -w <File name>
- Message Processor から次の tcpdump コマンドを実行します。
tcpdump -i any -s 0 host <management-server-IP address> -w <File name>
- Apigee サポートに連絡して、tcpdumps の分析のために協力を求めて問題をトラブルシューティングします。
- Management Server から次の tcpdump コマンドを実行します。
API プロキシ バンドルが大きい
診断
- デプロイエラーが発生している API プロキシ バンドルのサイズを確認します。
- サイズがかなり大きい場合(10 MB 以上)、Message Processor が API プロキシをアクティブ化するのに時間がかかることがあります。
- API プロキシ バンドルのサイズが 15 MB を超える場合は、15 MB を超える API プロキシ バンドルに進みます。
解決策
注: 次の手順を実施できるのは Edge Private Cloud ユーザーのみです。Edge Public Cloud を使用している場合は、Apigee サポートにお問い合わせください。
Management Server で RPC タイムアウト値を増やすと、Message Processor に大きい API プロキシ バンドルをアクティブ化するのに十分な時間を確保できます。RPC タイムアウト値を増やすには、次の手順を実施します。
/opt/apigee/customer/application/management-server.properties
ファイルが存在しない場合は、Management Server マシンでこのファイルを作成します。- このファイルに次の行を追加します。
conf_cluster_rpc.connect.timeout=<time in seconds>
デフォルトの RPC タイムアウト値は 10 ですが、40 秒に増やすことをおすすめします。次のように設定します。
conf_cluster_rpc.connect.timeout=40
- このファイルが apigee によって所有されていることを確認してください。
chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- Management Server を再起動します。
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- Management Server が複数ある場合は、すべての Management Server で上記の手順を繰り返します。
問題が解決しない場合は、再度、Apigee サポートにお問い合わせください。