אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
תיאור הבעיה
אי אפשר להפעיל את תהליך ZooKeeper.
הודעות שגיאה
כשמנסים להפעיל את תהליך ZooKeeper, מוחזרת הודעת השגיאה הבאה, שמציינת שלא הייתה אפשרות להפעיל את ZooKeeper:
+ apigee-service apigee-zookeeper status apigee-service: apigee-zookeeper: Not running (DEAD) apigee-all: Error: status failed on [apigee-zookeeper]
גורמים אפשריים
בטבלה הבאה מפורטות הסיבות האפשריות לבעיה הזו:
| סיבה | עבור |
|---|---|
| הגדרה שגויה של myid ב-ZooKeeper | משתמשים ב-Edge Private Cloud |
| יציאת ZooKeeper בשימוש | משתמשים ב-Edge Private Cloud |
| מזהה התהליך שגוי בקובץ apigee-zookeeper.pid | משתמשים ב-Edge Private Cloud |
| ZooKeeper Leader Election Failure | משתמשים ב-Edge Private Cloud |
כדי לראות פתרונות אפשריים לסיבה מסוימת, לוחצים על הקישור בטבלה.
ההגדרה של myid ב-ZooKeeper לא תקינה
בקטעים הבאים מופיע סקירה כללית של קובץ myid והסבר על אבחון ופתרון של בעיות שנובעות מהגדרות שגויות.
סקירה כללית על קובץ myid
בכל צומת של ZooKeeper יש שני קבצים:
- קובץ
/opt/apigee/apigee-zookeeper/conf/zoo.cfgשמכיל רשימה של כתובות IP של כל צמתי ZooKeeper באשכול.לדוגמה, אם הקובץ
/opt/apigee/apigee-zookeeper/conf/zoo.cfgמכיל את כתובות ה-IP של 3 צמתי ZooKeeper שמהווים חלק מהאשכול, באופן הבא:server.1=11.11.11.11:2888:3888 server.2=22.22.22.22:2888:3888 server.3=33.33.33.33:2888:3888
- הקובץ
/opt/apigee/data/apigee-zookeeper/data/myidמכיל שורת טקסט אחת שתואמת למספר השרת של צומת ZooKeeper הספציפי הזה. ה-myid של שרת 1 יכיל את הטקסט '1' בלבד. המזהה חייב להיות ייחודי בתוך האוסף, והערך שלו צריך להיות בין 1 ל-255.לדוגמה, בשרת ZooKeeper מספר 1, הקובץ
/opt/apigee/data/apigee-zookeeper/data/myidצריך להכיל רק את הטקסט 1, כמו שמוצג בהמשך:$ cat myid 1
אבחון
- בודקים את יומן ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logאם יש שגיאות. - אם מופיעה הודעת אזהרה שדומה ל-“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)
- בודקים את הקובץ
/opt/apigee/apigee-zookeeper/conf/zoo.cfgורושמים את מספר השרת של צומת ZooKeeper הנוכחי. - בודקים את הקובץ
/opt/apigee/data/apigee-zookeeper/data/myidומוודאים שהטקסט בקובץ הזה זהה לשרת.# שצוין בשלב #2. - אם יש חוסר התאמה, סימן שזיהיתם את הסיבה לכך ש-ZooKeeper לא מצליח להתחיל.
רזולוציה
אם הקובץ myid מוגדר בצורה שגויה, צריך לערוך אותו ולהחליף את הערך בפרמטר # ב-zoo.cfg בטקסט הנכון שמייצג את השרת.
היציאה של ZooKeeper נמצאת בשימוש
אבחון
- בודקים את יומן ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logאם יש שגיאות. - אם מופיע החריג
java.net.BindException: Address already in useבזמן הקישור ליציאה מספר 2181, כמו שמוצג באיור שלמטה, זה מצביע על כך שיציאה מספר 2181 של ZooKeeper נמצאת בשימוש של תהליך אחר. לכן, לא הייתה אפשרות להפעיל את ZooKeeper.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)
- משתמשים בפקודה netstat שבהמשך כדי לוודא שהפורט 2181 של ZooKeeper נמצא בשימוש של תהליך אחר:
netstat -an | grep 2181
רזולוציה
אם יציאת ZooKeeper 2181 עדיין בשימוש, צריך לפעול לפי השלבים הבאים כדי לפתור את הבעיה:
- משתמשים בפקודה
netstatכדי למצוא את התהליך שמשתמש ביציאה 2181. מפסיקים את התהליך שמשתמש ביציאה 2181 של ZooKeeper:$ netstat -antp | grep 2181 tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 28016/java <defunct> $ kill -9 28016
- מפנים את קובצי ה-pid והנעילה אם הם קיימים:
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- מפעילים מחדש את ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
מזהה התהליך שגוי בקובץ apigee-zookeeper.pid
כשמנסים לעצור או להפעיל מחדש את ZooKeeper, יכול להיות שהפעולה תיכשל כי הקובץ apigee-zookeeper.pid מכיל pid ישן או שגוי, ולא את ה-pid של תהליך ZooKeeper שפועל כרגע. זה יכול לקרות אם תהליך ZooKeeper הסתיים באופן בלתי צפוי או פתאומי מסיבה כלשהי, והקובץ apigee-zookeeper.pid לא נמחק.
אבחון
- כדי לקבל את מזהה התהליך של תהליך ZooKeeper שפועל כרגע, מריצים את הפקודה
ps:ps -ef | grep zookeeper
- בודקים אם הקובץ
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pidקיים. אם הוא קיים, רושמים את מזהה התהליך שמופיע בקובץ הזה. - משווים בין מזהי התהליך שמופיעים בשלב 1 ובשלב 2. אם הם שונים, סימן שהבעיה נובעת ממזהה תהליך שגוי ב-
apigee-zookeeper.pid file.
רזולוציה
- עורכים את הקובץ apigee-zookeeper.pid ומחליפים את מזהה התהליך השגוי במזהה התהליך הנכון שהתקבל מהפקודה ps (שלב 1 למעלה).
- מפעילים מחדש את ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
כשל בבחירת מנהיג ב-ZooKeeper
אבחון
כדי לאבחן:
- בודקים את יומן ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logאם יש שגיאות. - בודקים אם בוצעו שינויים בהגדרות שעלולים לגרום לכך שהבחירה ב-ZooKeeper של המנהל תיכשל.
- בודקים את
/opt/apigee/apigee-zookeeper/conf/zoo.cfgומוודאים שלכל ZooKeeper באשכול יש את המספר הנכון ואת כתובות ה-IP הנכונות של השרת. חשוב גם לזכור שכדי שהבחירה של המנהיג תצליח, צריכים להיות לפחות 3 מצביעים, ומספר המצביעים צריך להיות אי-זוגי. אם יש מעט מדי מצביעים, למשל רק שניים, לא ניתן להגיע למניין החוקי כדי להחליט מי יהיה המנהיג מבין שני המצביעים.
רזולוציה
בדרך כלל, כשל בבחירת מנהיג ב-ZooKeeper נגרם בגלל הגדרה שגויה של myid. כדי לפתור את הבעיה של כשל בבחירת המנהיג, צריך להשתמש ברזולוציה שבקטע Misconfigured ZooKeeper myid.
אם הבעיה נמשכת ונדרש אבחון נוסף, אפשר לפנות לתמיכה של Apigee Edge.