子を取得する際のパスエラー

症状

Edge UI または Edge 管理 API で API プロキシ リビジョンのデプロイを行うと、「Error while fetching children for path」という ZooKeeper エラーが発生し、デプロイに失敗します。

エラー メッセージ

    Error in deployment for environment prod.
    The revision is deployed, but traffic cannot flow. com.apigee.repository.RepositoryException{ code = repository.zookeeper.UnExpectedError, message = Unexpected error Error while fetching children for path : /organizations/myorg/environments/prod/apiproxies/tinkerbell/revisions, associated contexts = []};
    

考えられる原因

このエラーは通常、Message Processor と ZooKeeper の間のネットワーク接続が原因で発生します。

診断

注: 次の手順を実施できるのは Edge for Private Cloud ユーザーのみです。Edge Public Cloud を使用している場合は、Apigee サポートにお問い合わせください。

  1. 次の管理 API 呼び出しを行い、このエラーが発生した API のデプロイ ステータスを確認します。
        curl -v http://<management-server-IPaddress>:<port#>/organizations/<orgname>/environments/<envname>/apis/<apiname>/deployments -u <username>
        

    エラーが発生したデプロイ ステータスの出力は次のようになります。

        {
        "environment" : [ {
        "name" : "prod",
        "revision" : [ {
        "configuration" : {
        "basePath" : "/",
        "steps" : [ ]
        },
        "name" : "1",
        "server" : [ {
        "error" : "com.apigee.repository.RepositoryException: com.apigee.zookeeper.ZooKeeperException{ code = zookeeper.ErrorFetchingChildren, message = Error while fetching children for path : /organizations/gsc/environments/prod/apiproxies/apigee_test/revisions, associated contexts = []}",
        "status" : "error",
        "type" : [ "message-processor" ],
        "uUID" : "01fc5b23-8ad3-40bf-b059-2fc82cdac111"
        },
        
  2. Message Processor(/opt/apigee/var/log/edge-message-processor/system.log)を確認します。

    Message Processor ログに記録されたエラーの例

        2017-05-29 01:25:40,592  main ERROR KERNEL - MicroKernel.deployAll() : MicroKernel.deployAll() : Error in deploying the deployment : WebService
        com.apigee.zookeeper.ZooKeeperException: Error while checking path existence for path : /regions/dc-2/pods/gateway/servers/099c2603-93a4-4b73-ae03-a55d130adb80/reachable
                at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:410) ~[zookeeper-1.0.0.jar:na]
                at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:394) ~[zookeeper-1.0.0.jar:na]
                at com.apigee.services.repository.zookeeper.ZKRepository.exists(ZKRepository.java:280) ~[repository-impl-1.0.0.jar:na]
                at com.apigee.services.repository.RepositoryServiceImpl.exists(RepositoryServiceImpl.java:234) ~[repository-impl-1.0.0.jar:na]
                at com.apigee.registration.info.StatusBuilder.build(StatusBuilder.java:26) ~[registration-1.0.0.jar:na]
                at com.apigee.registration.ServerRegistrationServiceImpl.buildServerInfo(ServerRegistrationServiceImpl.java:856) ~[registration-1.0.0.jar:na]
                at com.apigee.registration.ServerRegistrationServiceImpl.start(ServerRegistrationServiceImpl.java:122) ~[registration-1.0.0.jar:na]
                at com.apigee.kernel.service.deployment.ServiceDeployer.startService(ServiceDeployer.java:167) ~[microkernel-1.0.0.jar:na]
                at com.apigee.kernel.service.deployment.ServiceDeployer.deploy(ServiceDeployer.java:70) ~[microkernel-1.0.0.jar:na]
                at com.apigee.kernel.service.deployment.ServiceDeployer.deployDependantServices(ServiceDeployer.java:356) ~[microkernel-1.0.0.jar:na]
                at com.apigee.kernel.service.deployment.ServiceDeployer.deploy(ServiceDeployer.java:76) ~[microkernel-1.0.0.jar:na]
                at com.apigee.kernel.service.deployment.ServiceDeployer.deployDependantServices(ServiceDeployer.java:356) ~[microkernel-1.0.0.jar:na]
                at com.apigee.kernel.service.deployment.ServiceDeployer.deploy(ServiceDeployer.java:76) ~[microkernel-1.0.0.jar:na]
                at com.apigee.kernel.MicroKernel.deployAll(MicroKernel.java:178) [microkernel-1.0.0.jar:na]
                at com.apigee.kernel.MicroKernel.start(MicroKernel.java:139) [microkernel-1.0.0.jar:na]
                at com.apigee.kernel.MicroKernel.start(MicroKernel.java:135) [microkernel-1.0.0.jar:na]
                at com.apigee.kernel.MicroKernel.main(MicroKernel.java:84) [microkernel-1.0.0.jar:na]
        Caused by: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /regions/dc-2/pods/gateway/servers/099c2603-93a4-4b73-ae03-a55d130adb80/reachable
                at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
                at org.apache.zookeeper.KeeperException.create(KeeperException.java:51) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
                at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1045) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
                at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1073) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
                at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:402) ~[zookeeper-1.0.0.jar:na]
                ... 16 common frames omitted
        
  3. 上の例に類似したエラーがある場合は、次の操作を行います。
    1. 次の手順で、Message Processor から ZooKeeper サーバーのポート 2181 への接続を確認します。
      1. telnet を利用できる場合は telnet を使用します。
            telnet <ZooKeeper-IP> 2181
            
      2. telnet を利用できない場合は、次のように netcat を使用して接続を確認します。
            nc -vz <ZooKeeper-IP> 2181
            
      3. [Connection Refused] または [Connection timed out] という応答が返された場合は、ネットワーク オペレーション チームに連絡して、次の解決策に進みます。
  4. 他のエラーが見つかった場合は、Apigee サポートにご連絡してください。

解決策

注: 次の手順を実施できるのは Edge for Private Cloud ユーザーのみです。Edge Public Cloud を使用している場合は、Apigee サポートにお問い合わせください。

  1. ネットワーク チームとともに次の操作を行います。
      1. Message Processor とすべての ZooKeeper ノードの 2181 の間で接続が許可されていることを確認します。
      2. ZooKeeper サーバーのポート 2181 との接続が許可されるように、Message Processor からファイアウォールの制限またはセキュリティ ルールの設定を削除します。
    1. Message Processor にネットワーク問題がある場合、デプロイ ステータスの出力でエラーを確認した Message Processor を再起動すると、問題が解決することがあります。問題のある Message Processor を再起動します。
          /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
          

    問題が解決しない場合は、Apigee サポートにご連絡ください。