לא ניתן להפעיל את שומר גן החיות

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

תיאור הבעיה

לא ניתן להתחיל את התהליך של גן החיות.

הודעות שגיאה

בעת ניסיון להפעיל את תהליך התאמות גן החיות, מוצגת הודעת השגיאה הבאה שמציינת כי לא ניתן להפעיל את גן החיות:

+ apigee-service apigee-zookeeper status
apigee-service: apigee-zookeeper: Not running (DEAD)
apigee-all: Error: status failed on [apigee-zookeeper]

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

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

סיבה עבור
מזהה גן החיות מוגדר באופן שגוי משתמשי ענן פרטי של Edge
יציאת ZooKeeper בשימוש משתמשי ענן פרטי של Edge
מזהה תהליך שגוי בקובץ apigee-zookeeper.pid משתמשי ענן פרטי של Edge
הבחירות של מנהל גן החיות ב-ZooKeep משתמשי ענן פרטי של Edge

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

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

בקטעים הבאים מוצגת סקירה כללית של קובץ ה-myid ומוסבר איך לאבחן ולפתור בעיות הקשורות להגדרה שגויה.

סקירה כללית של קובץ ה-myid

בכל צומת שלzoKeeper יש שני קבצים:

  1. הקובץ /opt/apigee/apigee-zookeeper/conf/zoo.cfg שמכיל רשימה של כתובות IP לכל צומתי התאמות גן החיות באשכול.

    לדוגמה, אם השדה /opt/apigee/apigee-zookeeper/conf/zoo.cfg מכיל את כתובות ה-IP של 3 צומתי גן החיות (zoKeeper) חלק מהאשכול, באופן הבא:

    server.1=11.11.11.11:2888:3888
    server.2=22.22.22.22:2888:3888
    server.3=33.33.33.33:2888:3888
    
  2. הקובץ /opt/apigee/data/apigee-zookeeper/data/myid מכיל שורת טקסט אחת שתואמת למספר השרת של צומת גן החיות הספציפי הזה. ה-myid של server 1 יכיל את הטקסט "1" ולא שום דבר אחר. המזהה חייב להיות ייחודי בתוך המערך, והערך שלו צריך להיות בין 1 ל-255.

    לדוגמה, ב-ZooKeeper server.1, הקובץ /opt/apigee/data/apigee-zookeeper/data/myid צריך להכיל רק את הטקסט 1 כפי שמוצג בהמשך:

    $ cat myid
    1
    

אבחון

  1. כדאי לבדוק אם יש שגיאות ביומן שלzoKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log.
  2. אם מופיעה הודעת WARN שדומה להודעה 'Connection broken for id #, my id = #' ('החיבור נותק עבור מזהה #, my id = #'), כפי שמוצג באיור שבהמשך, הסיבה האפשרית לבעיה הזו עשויה להיות שמספר השרת בקובץ myid מוגדר באופן שגוי או פגום.
    [myid:2] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@762] -
      Connection broken for id 2, my id = 2, error = java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:375)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.
          run(QuorumCnxManager.java:747)
    
  3. בדקו את הקובץ /opt/apigee/apigee-zookeeper/conf/zoo.cfg ורשמו לעצמכם את server.# לצומת גן החיות הנוכחי.
  4. צריך לבדוק את הקובץ /opt/apigee/data/apigee-zookeeper/data/myid ולראות אם הטקסט בקובץ הזה תואם לשרת.# צוין בשלב 2.
  5. אם יש אי התאמה, אז זיהית את הסיבה לכך ש-zooKeeper לא פועל.

רזולוציה

אם קובץ myid מוגדר באופן שגוי, עליכם לערוך את קובץ ה-myid ולהחליף את הערך בטקסט תקין שמייצג את הפרמטר server.# ב-zoo.cfg.

נמל גן החיות של גן החיות בשימוש

אבחון

  1. כדאי לבדוק אם יש שגיאות ביומן של גן החיות /opt/apigee/var/log/apigee-zookeeper/zookeeper.log.
  2. אם מופיעה החריגה java.net.BindException: Address already in use בזמן החיבור ליציאה #2181, כפי שמוצג באיור שלמטה, המשמעות היא שיציאה 2181 נמצאת בשימוש בתהליך אחר. לכן, לא ניתן להפעיל אתzoKeeper.
    2017-04-26 07:00:10,420 [myid:3] - INFO  [main:NIOServerCnxnFactory@94] -
      binding to port 0.0.0.0/0.0.0.0:2181
    2017-04-26 07:00:10,421 [myid:3] - ERROR [main:QuorumPeerMain@89] -
      Unexpected exception, exiting abnormally
      java.net.BindException: Address already in use
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
        at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
    
  3. משתמשים בפקודת netstat הבאה כדי לוודא שיציאה 2181 שלzoKeeper אכן נמצאת בשימוש בתהליך אחר:
    netstat -an | grep 2181
    

רזולוציה

אם יציאה 2181 של גן החיות עדיין נמצאת בשימוש, בצעו את הפעולות הבאות כדי לטפל בבעיה:

  1. משתמשים בפקודה netstat כדי למצוא את התהליך ששומר על יציאה 2181. מבטלים את התהליך שמשתמש ביציאה 2181 שלzoKeeper:
    $ netstat -antp | grep 2181
    tcp        0      0 0.0.0.0:2181            0.0.0.0:*
    LISTEN      28016/java <defunct>
    $ kill -9 28016
    
  2. ניקוי קובצי PID ונעילת קבצים, אם הם קיימים:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. מפעילים מחדש את ZoomKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

מזהה תהליך שגוי בקובץ apigee-zookeeper.pid

כשמנסים להפסיק/להפעיל מחדש אתzoKeeper, ייתכן שהדבר ייכשל כי קובץ apigee-zookeeper.pid מכיל PID ישן/שגוי ולא זה של תהליך גן החיות שפועל כרגע. מצב כזה עשוי לקרות אם תהליך גן החיות של גן החיות הסתיים באופן בלתי צפוי או פתאומי מסיבה כלשהי והקובץ apigee-zookeeper.pid לא נמחק.

אבחון

  1. כדי לקבל את מזהה התהליך של תהליך גן החיות הנוכחי שפועל כרגע, מריצים את הפקודה ps:
    ps -ef | grep zookeeper
    
  2. יש לבדוק אם הקובץ /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid קיים. אם הוא קיים, צריך לרשום לעצמכם את מזהה התהליך שרשום בקובץ.
  3. השוו את מזהי התהליכים שנלקחו משלב 1 לשלב 2. אם הם שונים, הסיבה לבעיה הזו היא שמזהה התהליך שגוי ב-apigee-zookeeper.pid file.

רזולוציה

  1. צריך לערוך את הקובץ apigee-zookeeper.pid ולהחליף את מזהה התהליך השגוי במזהה התהליך הנכון שהתקבל מפקודת ה-ps (שלב 1 למעלה).
  2. מפעילים מחדש את ZoomKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

כישלון בבחירות של מנהיג גן החיות

אבחון

כדי לאבחן:

  1. כדאי לבדוק אם יש שגיאות ביומן שלzoKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log.
  2. עליך לבדוק אם בוצעו שינויים בהגדרות שעלולים לגרום לכך שהבחירה ב-zoKeeper תיכשל.
  3. צריך לבדוק את /opt/apigee/apigee-zookeeper/conf/zoo.cfg ולוודא שלכל התאמות גן החיות באשכול יש את המספר וכתובות ה-IP הנכונים לפרמטר server.#. כמו כן, חשוב לזכור שכדי שהבחירות למנהיגות יצליחו, צריכים להיות לפחות 3 מצביעים, ומספר המצביעים צריך להיות אי-זוגי. אם יש מעט מדי מצביעים, למשל רק שני מצביעים, לא ניתן להגיע להסכמה כדי לקבוע מנהיג מבין שני מצביעים בלבד.

רזולוציה

בדרך כלל, כישלון בבחירות ב-ZooKeeper נגרם עקב קובץ עזר שהוגדר באופן שגוי. אפשר להשתמש בפתרון הזה בקטע MisconfiguredzoKeeper myid (הפתרון שגוי) כדי לטפל בכישלון הבחירות.

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