שגיאה באחזור ילדים לנתיב

אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X.
מידע

תיאור הבעיה

פריסת תיקונים של proxy ל-API דרך ממשק המשתמש של Edge או Edge Management API נכשלת עם השגיאה ZooKeeper ‏ "Error while fetching children for path" (שגיאה במהלך אחזור צאצאים עבור נתיב).

הודעות שגיאה

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

סיבות אפשריות

הסיבה הנפוצה לשגיאה הזו היא בעיה בקישוריות לרשת בין מעבד ההודעות לבין ZooKeeper.

אבחון

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.

  1. כדי לקבל את הפלט של סטטוס הפריסה של ה-API הספציפי שבו מוצגת השגיאה, משתמשים בקריאה הבאה ל-Management 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. בודקים את מעבד ההודעות (/opt/apigee/var/log/edge-message-processor/system.log).

    דוגמה לשגיאה מיומן של מעבד ההודעות

    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. בודקים את הקישוריות ממעבד ההודעות לשרתי ZooKeeper ביציאה 2181 באמצעות השלבים הבאים:
      1. אם telnet זמין, משתמשים ב-telnet:
        telnet <ZooKeeper-IP> 2181
      2. אם telnet לא זמין, משתמשים ב-netcat כדי לבדוק את הקישוריות באופן הבא:
        nc -vz <ZooKeeper-IP> 2181
      3. אם מקבלים את התגובה 'החיבור נדחה' או 'החיבור הסתיים בגלל חוסר פעילות', צריך לפנות לצוות התפעול של הרשת. עוברים לקטע פתרון בהמשך.
  4. אם אתם רואים שגיאה אחרת, פנו אל התמיכה של Apigee Edge.

רזולוציה

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.

  1. צריך לעבוד עם צוות הרשת כדי:
      1. מוודאים שהחיבור מותר בין מעבד ההודעות לבין כל הצמתים של ZooKeeper ביציאה 2181.
      2. צריך להסיר את כל ההגבלות של חומת האש או כללי האבטחה שהוגדרו ממעבדי ההודעות כדי לאפשר קישוריות ליציאה 2181 בשרתי ZooKeeper.
    1. אם יש בעיה ברשת של מעבד ההודעות, יכול להיות שהפעלה מחדש של מעבד ההודעות הספציפי שבו מופיעה השגיאה (כפי שמוצג בפלט של סטטוס הפריסה) תפתור את הבעיה. מפעילים מחדש את מעבד ההודעות הספציפי:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

    אם הבעיה נמשכת, אפשר לפנות לתמיכה של Apigee Edge.