Błąd pobierania elementów podrzędnych dla ścieżki

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Krótki opis problemu

Wdrażanie poprawek serwera proxy interfejsu API za pomocą interfejsu Edge lub interfejsu Edge Management API nie udaje się z powodu błędu ZooKeeper "Error while fetching children for path".

Komunikaty o błędach

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 = []};

Możliwe przyczyny

Typową przyczyną tego błędu jest problem z łącznością sieciową między procesorem komunikatów a ZooKeeper.

Diagnostyka

Uwaga: te czynności mogą wykonać tylko użytkownicy chmury prywatnej Edge. Jeśli korzystasz z chmury publicznej Edge, skontaktuj się z zespołem pomocy Apigee Edge.

  1. Aby uzyskać dane wyjściowe stanu wdrożenia konkretnego interfejsu API, w którym występuje błąd, użyj tego wywołania interfejsu Management API:
    curl -v http://<management-server-IPaddress>:<port#>/organizations/<orgname>/environments/<envname>/apis/<apiname>/deployments -u <username>

    Przykładowe dane wyjściowe stanu wdrożenia pokazujące błąd:

    { 
    "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. Sprawdź procesor komunikatów (/opt/apigee/var/log/edge-message-processor/system.log).

    Przykładowy błąd z dziennika procesora komunikatów

    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. Jeśli zauważysz podobny błąd jak w powyższym przykładzie, wykonaj te czynności: kroki:
    1. Sprawdź łączność z procesora komunikatów z serwerami ZooKeeper na porcie 2181 wykonując te czynności:
      1. Jeśli telnet jest dostępny, użyj telnetu:
        telnet <ZooKeeper-IP> 2181
      2. Jeśli telnet nie jest dostępny, użyj netcat, aby sprawdzić łączność w ten sposób:
        nc -vz <ZooKeeper-IP> 2181
      3. Jeśli otrzymasz odpowiedź "Connection Refused" (Odmowa połączenia) lub "Connection timed out" (Przekroczono limit czasu połączenia), skontaktuj się z zespołem ds. operacji sieciowych. Przejdź do sekcji Rozwiązanie poniżej.
  4. Jeśli zauważysz inny błąd, skontaktuj się z zespołem pomocy Apigee Edge.

Rozdzielczość

Uwaga: te czynności mogą wykonać tylko użytkownicy chmury prywatnej Edge. Jeśli korzystasz z chmury publicznej Edge, skontaktuj się z zespołem pomocy Apigee Edge.

  1. Poproś zespół ds. sieci o:
      1. upewnienie się, że połączenie między procesorem komunikatów a wszystkimi węzłami ZooKeeper na porcie 2181 jest dozwolone;
      2. usunięcie wszelkich ograniczeń zapory sieciowej lub reguł bezpieczeństwa skonfigurowanych w procesorach komunikatów, aby umożliwić połączenie z portem 2181 na serwerach ZooKeeper.
    1. Jeśli wystąpi problem z siecią na procesorze komunikatów, ponowne uruchomienie konkretnego procesora komunikatów, w którym występuje błąd (zgodnie z danymi wyjściowymi stanu wdrożenia), może rozwiązać problem. Uruchom ponownie konkretny procesor komunikatów:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

    Jeśli problem będzie nadal występował, skontaktuj się z zespołem pomocy Apigee Edge.