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

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

תיאור הבעיה

לא ניתן להתחיל את התהליך ZoomKeeper.

הודעות שגיאה

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

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

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

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

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

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

מזהה שגוי של ZoomKeeper

בקטעים הבאים יש סקירה כללית של קובץ 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 מכיל שורה אחת של טקסט שתואם למספר השרת של צומת ZoomKeeper המסוים הזה. הפרטים של שרת 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 = #" , כפי שמוצג באיור למטה, הסיבה האפשרית לבעיה זו עשויה להיות שמספר השרת בקובץ 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.# עבור הצומת הנוכחי שלZoKeeper.
  4. יש לבדוק את הקובץ /opt/apigee/data/apigee-zookeeper/data/myid ולראות אם הטקסט בקובץ הזה תואם לשרת. מס' # שצוין בשלב 2.
  5. אם יש חוסר התאמה, אז זיהיתם את הסיבה לכך ש-zooKeeper נכשל הפעלה.

רזולוציה

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

היציאה שלzoKeeper נמצאת בשימוש

אבחון

  1. צריך לבדוק ביומן ZoKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log כדי לראות אם שגיאות.
  2. אם יש חריגה מ-java.net.BindException: Address already in use בזמן שהוא מקושר ליציאה מס' 2181, כפי שמוצג באיור למטה, הוא מציין ש-ZooKeeper יציאה 2181 נמצאת בשימוש בתהליך אחר. לכן, לא ניתן היה להפעיל את ZoomKeeper.
    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 של ZoomKeeper בתהליך אחר:
    netstat -an | grep 2181
    

רזולוציה

אם היציאה 2181 של zooKeeper עדיין בשימוש, צריך לפעול לפי השלבים הבאים כדי לטפל בבעיה. הבעיה:

  1. משתמשים בפקודה netstat כדי למצוא את התהליך שנשמר ביציאה 2181. כדי להשמיד את התהליך באמצעות יציאת ZoKeeper 2181:
    $ 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

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

אבחון

  1. כדי לקבל את מזהה התהליך של תהליך ZoomKeeper שפועל עכשיו צריך להריץ את הפונקציה הפקודה 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. בדקו אם היו שינויי הגדרות שעשויים לגרום לבחירות ב-ZooKeeper מנהיג להיכשל.
  3. צריך לבדוק את /opt/apigee/apigee-zookeeper/conf/zoo.cfg ולוודא שהכל ל-zoKeepers באשכול יש את המספר וכתובות ה-IP הנכונים של הפרמטר server.# . כמו כן, חשוב לזכור שכדי שהבחירות למנהיגות יצליחו, צריכים להיות לפחות 3 מצביעים ומספר המצביעים צריך להיות ממוספר באי-זוגי. אם יש מעט מדי מצביעים, כמו רק 2 מצביעים, הוא לא יכול להגיע לקופה כדי להחליט מנהיג בין שני מצביעים בלבד.

רזולוציה

בדרך כלל, כשל בבחירות ב-ZooKeeper נגרמת על ידי מזהה שלי שהוגדר באופן שגוי. שימוש ברזולוציה ב: הוגדר באופן שגוי עבור ZoomKeeper myid כדי לטפל בכשל בבחירות.

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