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

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

תיאור הבעיה

בעיות הקישוריות שלzoKeeper יכולות להתבטא בתסמינים שונים כמו:

  1. שגיאות בפריסה של שרת proxy ל-API
  2. קריאות ל-API לניהול נכשלות עם שגיאות 5XX
  3. לא ניתן להפעיל את הנתב או מעבדי ההודעות
  4. רכיבי Analytics מדווחים על אובדן החיבור אלzoKeeper ב-system.logs

הודעות שגיאה

בטבלה הבאה מובאות דוגמאות להודעות שגיאה שעשויות להופיע במקרים שבהם החיבור לצמתים שלzoKeeper אבד.

  1. השגיאה הבאה מוחזרת ביומנים של שרת הניהול כשפריסת שרת proxy של API נכשלת בגלל אובדן החיבור שלzoKeeper:
    org: env: main INFO ZOOKEEPER - ZooKeeperServiceImpl.exists() :
    Retry path existence path:
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable,
      reason: KeeperErrorCode = ConnectionLoss
    org: env: main ERROR ZOOKEEPER - ZooKeeperServiceImpl.exists() :
      Could not detect existence of path:
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable ,
      reason: KeeperErrorCode = ConnectionLoss
    org: env: main ERROR KERNEL.DEPLOYMENT - ServiceDeployer.startService() :
      ServiceDeployer.deploy() : Got a life cycle exception while starting service
      [ServerRegistrationService, Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable] :
      com.apigee.zookeeper.ZooKeeperException{ code = zookeeper.ErrorCheckingPathExis tence,
      message = Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable,
      associated contexts = []} 2015-03-25 10:22:39,811
    org: env: main ERROR KERNEL - MicroKernel.deployAll() : MicroKernel.deployAll() :
    Error in deploying the deployment : EventService com.apigee.zookeeper.ZooKeeperException:
    Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable
      at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:339)
      ~[zookeeper-1.0.0.jar:na] at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(
      ZooKeeperServiceImpl.java:323) ~[zookeeper-1.0.0.jar:na] at ... snipped
    
  2. במהלך האתחול, הנתבים ומעבדי ההודעות מתחברים ל-zoKeeper. אם יש בעיות קישוריות ב-ZooKeeper, אז הרכיבים האלה לא יתחילו לפעול עם השגיאה הבאה:
    2017-08-01 23:20:00,404  CuratorFramework-0 ERROR o.a.c.f.i.CuratorFrameworkImpl
      - CuratorFrameworkImpl.logError() : Background operation retry gave up
    org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
      at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkBackgroundRetry(CuratorFrameworkImpl.java:710) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.performBackgroundOperation(CuratorFrameworkImpl.java:827) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:793) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.access$400(CuratorFrameworkImpl.java:57) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl$4.call(CuratorFrameworkImpl.java:275) [curator-framework-2.5.0.jar:na]
      at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_131]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131]
      at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
    
  3. ייתכן שממשק המשתמש של Edge יציג את השגיאה הבאה, שמציינת שהוא לא הצליח לבדוק את סטטוס הפריסה של שרתי ה-proxy של ה-API:
    Error Fetching Deployments
    Error while checking path existence for path: path
    

גורמים אפשריים

הטבלה הבאה מפרטת סיבות אפשריות לבעיה הזו:

סיבה עבור
בעיה בקישוריות לרשת במרכזי נתונים שונים משתמשי ענן פרטי של Edge
צומת ZooKeeper לא ממלא בקשות משתמשי ענן פרטי של Edge

ניתן ללחוץ על קישור בטבלה כדי לראות פתרונות אפשריים לבעיה.

בעיה בקישוריות לרשת במרכזי נתונים שונים

אבחון

באשכול של NaturalKeeper עשויים להיות צמתים שמתפרסים על כמה אזורים או מרכזי נתונים, כמו DC-1 ו-DC-2. לטופולוגיה הטיפוסית של Apigee Edge 2 DC יהיו:

  • TacoKeeper מגיש 1, 2 ו-3 כמצביעים ב-DC-1
  • גן חיות 4 ו-5 כמצביעים ו-ZoKeeper 6 כצופה ב-DC-2.

אם אזור DC-1 יורד או שהחיבור לרשת בין DC-1 ל-DC-2 מנותק, צמתים של גן החיות לא יכולים לבחור מוביל חדש ב-DC-2 והם לא מצליחים לתקשר עם הצומת המוביל. הצופים ב-zoKeeper לא יכולים לבחור מנהיג חדש, ולשני המצביעים שנותרו בDC-2 אין ספירה של לפחות 3 צומתי מצביעים כדי לבחור מנהיג חדש. לכן, אנשי זכויות היוצרים של גן החיות ב-DC-2 לא יוכלו לעבד בקשות. הצמתים שנותרו ב-zoKeeper ב-DC-2 ימשיכו לפעול בלולאה בניסיון להתחבר חזרה אל המצביעים שלzoKeeper כדי למצוא את המנהיג.

רזולוציה

כדי לטפל בבעיה לפי הסדר שנקבע, צריך להחיל את הפתרונות הבאים.

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

פתרון מס' 1

  1. עובדים עם מנהלי הרשת כדי לתקן את בעיית הקישוריות לרשת בין מרכזי הנתונים.
  2. כשהמבנה של ZoomKeeper יכול לתקשר בין מרכזי הנתונים ולבחור מנהיג שלzoKeeper, הצמתים אמורים להיות תקינים ולעבד בקשות.

פתרון מס' 2

  1. אם ייקח זמן לתקן את החיבור לרשת, פתרון עקיף הוא להגדיר מחדש את צומתי גן החיות באזור שבו הם מושבתים. לדוגמה, צריך להגדיר מחדש את האשכול zoKeeper ב-DC-2 כך ש-3 הצמתים של גן החיות באזור הזה יהיו מצביעים ומסירים את server.# ב-zoo.cfg של ה-ZooKeepers מאזור DC-1.
    1. בדוגמה הבאה, הפונקציה zoo.cfg מגדירה צמתים לשני אזורים שבהם DC-1 משתמש בשמות מארחים מסוג us-ea שמציינים את האזור US-East, ו-DC-2 משתמש בשמות מארחים מסוג us-wo שמציינים את US-West. (הערה: מוצגות רק הגדרות רלוונטיות):
      server.1=zk01ea.us-ea.4.apigee.com:2888:3888
      server.2=zk02ea.us-ea.4.apigee.com:2888:3888
      server.3=zk03ea.us-ea.4.apigee.com:2888:3888
      server.4=zk04wo.us-wo.4.apigee.com:2888:3888
      server.5=zk05wo.us-wo.4.apigee.com:2888:3888
      server.6=zk06wo.us-wo.4.apigee.com:2888:3888:observer
      

      בדוגמה שלמעלה, צריך להגדיר מחדש את zoo.cfg באופן הבא:

      server.1=zk04wo.us-wo.4.apigee.com:2888:3888
      server.2=zk05wo.us-wo.4.apigee.com:2888:3888
      server.3=zk06wo.us-wo.4.apigee.com:2888:3888
      
    2. באמצעות קוד עם config, יוצרים קובץ /opt/apigee/customer/application/zookeeper.properties עם ההגדרות הבאות:
      conf_zoo_quorum=server.1=zk04wo.us-wo.4.apigee.com:2888:3888\
      \nserver.2=zk05wo.us-wo.4.apigee.com:2888:3888\
      \nserver.3=zk06wo.us-wo.4.apigee.com:2888:3888\
      

    למעלה, הצמתים מאזור ארה"ב-מזרח מוסרים, והצמתים בין ארה"ב למערב מקודמים למצביעים אם מוסרת ההערה :observer.

  2. גיבוי של /opt/apigee/apigee-zookeeper/conf/zoo.cfg ושל /opt/apigee/customer/application/zookeeper.properties הישן.

    הקבצים האלה ישמשו לשחזור הגדרות ברירת המחדל בזמן גיבוי החיבור לרשת בין מרכזי נתונים.

  3. השבתה של סימון הצופה בצומת הצופה. כדי לעשות זאת, צריך להוסיף את ההגדרה הבאה לחלק העליון של /opt/apigee/customer/application/zookeeper.properties:

    conf_zoo_peertype=
  4. עורכים את הקובץ /opt/apigee/data/apigee-zookeeper/data/myid באופן הבא:

    • עבור server.1, צריך לשנות את הרשומה בתוך myid מ-4 ל-1.
    • עבור server.2, משנים את myid מ-5 ל-2.
    • עבור server.3, צריך לשנות את myid מ-6 ל-3.
  5. עליך להפעיל מחדש את צומתי התאמות גן החיות באזור שבו הגדרת מחדש את האשכול zoKeeper.
  6. חוזרים על ההגדרה שלמעלה משלב 1ב עד שלב 5 בכל צומתי התאמות גן החיות ב-DC-2.
  7. מאמתים שהצמתים הם עם מוביל:
    $ echo srvr | nc zk04wo.us-wo.4.apigee.com 2181
    > echo srvr | nc zk05wo.us-wo.4.apigee.com 2181
    > echo srvr | nc zk06wo.us-wo.4.apigee.com 2181
    

    הפלט של הפקודה הזו יכלול שורה בנוסח 'mode' ואחריה 'leader' אם הוא המוביל, או 'עוקב' אם הוא עוקב.

    כשהרשת בין מרכזי הנתונים נוצרת מחדש, אפשר לבטל את השינויים בהגדרות של עוד במועדוני החיות ב-ZaKeeper בצומתי DC-2.

פתרון מס' 3

  1. אם לא הפעלת את צומתי התאמות גן החיות באשכול, עליך להפעיל אותו מחדש.
  2. מומלץ לבדוק את היומנים של NaturalKeeper כדי להבין מדוע הצומת שלzoKeeper ירד.

    יומני {/5}Keeper זמינים בספרייה הבאה:

    $ cd /opt/apigee/var/log/apigee-zookeeper
    $ ls -l
    total 188
    -rw-r--r--. 1 apigee apigee   2715 Jul 22 19:51 apigee-zookeeper.log
    -rw-r--r--. 1 apigee apigee  10434 Jul 17 19:51 config.log
    -rw-r--r--. 1 apigee apigee 169640 Aug  1 19:51 zookeeper.log
    
  3. כדי לפתור את הבעיה שגרמה לצומת של גן החיות שנעצר, צריך לפנות לתמיכה של Apigee ולמסור את יומני גן החיות.

צומת התאמות גן החיות לא ממלא בקשות

צומת שלzoKeeper במתחם עלול להיות לא תקין ולא יוכל להגיב לבקשות לקוח. הסיבה לכך יכולה להיות:

  1. הצומת הופסק ללא הפעלה מחדש.
  2. הצומת הופעל מחדש בלי שהתכונה 'הפעלה אוטומטית' הופעלה.
  3. עומס מערכת על הצומת גרם לירידה או לפגיעה בתקינותו.

אבחון

  1. מפעילים את הפקודות הבאות של בדיקת התקינות של גן החיות בכל אחד מהצמתים שלzoKeeper ובודקים את הפלט:
    1. $ echo "ruok" | nc localhost 2181
      

      פלט לדוגמה:

      $ echo "ruok" | nc localhost 2181
      imok
      
    2. echo srvr | nc localhost 2181
      

      עליך לבדוק את המצב כדי לקבוע אם הצומת שלzoKeeper הוא מוביל או עוקב.

      דוגמה לפלט של צומת אחד בלבד שלzoKeeper:

      $ echo srvr | nc localhost 2181
      ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      Latency min/avg/max: 0/0/88
      Received: 4206601
      Sent: 4206624
      Connections: 8
      Outstanding: 0
      Zxid: 0x745
      Mode: standalone
      Node count: 282
      
    3. $ echo mntr | nc localhost 2181
      

      פקודה זו מפרטת את המשתנים שלzoKeeper שבהם אפשר להשתמש כדי לבדוק את התקינות של אשכול התאמות החיות.

      פלט לדוגמה:

      $ echo mntr | nc localhost 2181
      zk_version 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      zk_avg_latency 0
      zk_max_latency 88
      zk_min_latency 0
      zk_packets_received     4206750
      zk_packets_sent 4206773
      zk_num_alive_connections 8
      zk_outstanding_requests 0
      zk_server_state standalone
      zk_znode_count 282
      zk_watch_count 194
      zk_ephemerals_count 1
      zk_approximate_data_size 22960
      zk_open_file_descriptor_count 34
      zk_max_file_descriptor_count 4096
      
    4. $ echo stat | nc localhost 2181
      

      פקודה זו מציגה נתונים סטטיסטיים לגבי ביצועים ולקוחות מחוברים.

      פלט לדוגמה:

      $ echo stat | nc localhost 2181
      ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      Clients:
       /10.128.0.8:54152[1](queued=0,recved=753379,sent=753385)
       /10.128.0.8:53944[1](queued=0,recved=980269,sent=980278)
       /10.128.0.8:54388[1](queued=0,recved=457094,sent=457094)
       /10.128.0.8:54622[1](queued=0,recved=972938,sent=972938)
       /10.128.0.8:54192[1](queued=0,recved=150843,sent=150843)
       /10.128.0.8:44564[1](queued=0,recved=267332,sent=267333)
       /127.0.0.1:40820[0](queued=0,recved=1,sent=0)
       /10.128.0.8:53960[1](queued=0,recved=150844,sent=150844)
      
      Latency min/avg/max: 0/0/88
      Received: 4206995
      Sent: 4207018
      Connections: 8
      Outstanding: 0
      Zxid: 0x745
      Mode: standalone
      Node count: 282
      
    5. $ echo cons | nc localhost 2181
      

      פקודה זו נותנת פרטים מורחבים על החיבורים שלzoKeeper.

      פלט לדוגמה:

      $ echo cons | nc localhost 2181
      /127.0.0.1:40864[0](queued=0,recved=1,sent=0)
      /10.128.0.8:54152[1](queued=0,recved=753400,sent=753406,sid=0x15d521a96d40007,
        lop=PING,est=1500321588647,to=40000,lcxid=0x972e9,lzxid=0x745,lresp=1502334173174,
        llat=0,minlat=0,avglat=0,maxlat=26)
      /10.128.0.8:53944[1](queued=0,recved=980297,sent=980306,sid=0x15d521a96d40005,
        lop=PING,est=1500321544896,to=40000,lcxid=0xce92a,lzxid=0x745,lresp=1502334176055,
        llat=0,minlat=0,avglat=0,maxlat=23)
      /10.128.0.8:54388[1](queued=0,recved=457110,sent=457110,sid=0x15d521a96d4000a,
        lop=PING,est=1500321673852,to=40000,lcxid=0x4dbe3,lzxid=0x745,lresp=1502334174245,
        llat=0,minlat=0,avglat=0,maxlat=22)
      /10.128.0.8:54622[1](queued=0,recved=972967,sent=972967,sid=0x15d521a96d4000b,
        lop=PING,est=1500321890175,to=40000,lcxid=0xccc9d,lzxid=0x745,lresp=1502334182417,
        llat=0,minlat=0,avglat=0,maxlat=88)
      /10.128.0.8:54192[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40008,
        lop=PING,est=1500321591985,to=40000,lcxid=0x8,lzxid=0x745,lresp=1502334184475,
        llat=3,minlat=0,avglat=0,maxlat=19)
      /10.128.0.8:44564[1](queued=0,recved=267354,sent=267355,sid=0x15d521a96d4000d,
        lop=PING,est=1501606633426,to=40000,lcxid=0x356e2,lzxid=0x745,lresp=1502334182315,
        llat=0,minlat=0,avglat=0,maxlat=35)
      /10.128.0.8:53960[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40006,
        lop=PING,est=1500321547138,to=40000,lcxid=0x5,lzxid=0x745,lresp=1502334177036,
        llat=1,minlat=0,avglat=0,maxlat=20)
      

      אם באחת מ-3 הפקודות האחרונות של בדיקת התקינות מוצגת ההודעה הבאה:

      $ echo stat | nc localhost 2181
          This ZooKeeper instance is not currently serving requests
      

      אז הוא מציין שצמתים ספציפיים שלzoKeeper לא מגישים בקשות.

  2. יש לבדוק את יומני גן החיות בצומת הספציפי ולנסות לאתר שגיאות שגורמות להשבתה של גן החיות. יומני {/5}Keeper זמינים בספרייה הבאה:
    $ cd /opt/apigee/var/log/apigee-zookeeper
    $ ls -l
    total 188
    -rw-r--r--. 1 apigee apigee   2715 Jul 22 19:51 apigee-zookeeper.log
    -rw-r--r--. 1 apigee apigee  10434 Jul 17 19:51 config.log
    -rw-r--r--. 1 apigee apigee 169640 Aug  1 19:51 zookeeper.log
    

רזולוציה

  1. מפעילים מחדש את כל הצמתים האחרים שלzoKeeper באשכול, אחד בכל פעם.
  2. מריצים מחדש את הפקודות של בדיקת התקינות של גן החיות בכל צומת כדי לראות אם מתקבלת הפלט הצפוי.

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