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

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

תיאור הבעיה

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

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

הודעות שגיאה

דוגמאות להודעות שגיאה שעשויות להופיע כאשר אובדן החיבור לצמתים של ZoomKeeper.

  1. השגיאה הבאה מוחזרת ביומנים של שרת הניהול כשפריסת API של שרת Proxy נכשל בגלל אבדן החיבור ל-ZooKeeper:
    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. במהלך ההפעלה, הנתבים ומעבדי ההודעות מתחברים ל-ZooKeeper. אם יש בעיות קישוריות ב-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 בענן פרטי

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

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

אבחון

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

  • ZoKeeper משרת את 1, 2 ו-3 כמצביעים ב-DC-1
  • ZoKeeper 4 ו-5 כמצביעים, ו-zoKeeper 6 כצופה ב-DC-2.

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

רזולוציה

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

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

פתרון מס' 1

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

פתרון מס' 2

  1. אם ייקח זמן לתקן את החיבור לרשת, הדרך לעקוף את הבעיה היא להגדיר מחדש את הבעיה. צמתים ב-ZooKeeper באזור שבו הם לא נמצאים. לדוגמה, צריך להגדיר מחדש את ZoomKeeper אשכול ב-DC-2, כך ש-3 הצמתים של ZoKeeper באזור הזה הם מצביעים, ומסירים את server.# ב-zoo.cfg של גן החיות של DC-1 באזור DC-1.
    1. בדוגמה הבאה, zoo.cfg מגדיר צמתים ל-2 אזורים שבהם DC-1 משתמשת ב-us-ea שמות מארחים שמאזכרים את אזור מזרח ארה"ב ואת DC-2 משתמשים בשמות מארחים עם us-wo של אזור ארה"ב-מערב. (הערה: רק הגדרות רלוונטיות מוצגות):
      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.
    • משנים את myid של server.2 מ-5 ל-2.
    • עבור server.3, משנים את myid מ-6 ל-3.
  5. הפעלה מחדש של הצמתים של ZzooKeeper באזור שבו הגדרתם מחדש את ZoomKeeper. אשכול.
  6. חוזרים על ההגדרה שלמעלה משלב 1ב' עד שלב 5' בכל הצמתים שלzoKeeper 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
    

    הפלט של הפקודה הזו יכיל שורה עם הכיתוב 'מצב'. ולאחר מכן 'Leader' אם זה הוא המנהיג, או "עוקב" אם הוא עוקב.

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

פתרון מס' 3

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

    יומני ZoomKeeper זמינים בספרייה הבאה:

    $ 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 ושולחים את הנתונים מ-ZooKeeper מתקיימים כדי לפתור את הבעיה בכל צומת של ZoomKeeper שייתכן שנעצר.

הצומת של ZoomKeeper לא ממלא בקשות

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

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

אבחון

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

      פלט לדוגמה:

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

      בודקים את המצב כדי לקבוע אם הצומת של ZoomKeeper הוא מנהיג או עוקב.

      פלט לדוגמה של כל הצומת ב-ZooKeeper אחד:

      $ 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
      

      הפקודה הזו מפרטת את המשתנים של ZoomKeeper שבאמצעותם ניתן לבדוק את התקינות של את האשכול של ZeoKeeper.

      פלט לדוגמה:

      $ 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
      

      הפקודה הזו מספקת פרטים מורחבים על החיבורים ב-ZooKeeper.

      פלט לדוגמה:

      $ 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
      

      לאחר מכן הוא מציין שצמתים ספציפיים ב-ZooKeeper לא מציגים בקשות.

  2. יש לבדוק את יומני ChromiumKeeper בצומת הספציפי ולנסות לאתר שגיאות שגורמות ל גן החיות של ברית. יומני ZoomKeeper זמינים בספרייה הבאה:
    $ 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. הפעלה מחדש של כל הצמתים האחרים של ZoomKeeper באשכול אחד אחרי השני.
  2. מריצים מחדש את הפקודות לבדיקת התקינות שלZoKeeper בכל צומת כדי לראות אם הן מתקבלות הפלט.

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