אתם קוראים את מסמכי התיעוד של Apigee Edge.
למעבר אל
מסמכי התיעוד של Apigee X info
תיאור הבעיה
בעיות הקישוריות של ZooKeeper יכולות להתבטא בתסמינים שונים, כמו:
- שגיאות בפריסת proxy ל-API
- קריאות ל-Management API נכשלות עם שגיאות 5XX
- הנתבים או מעבדי הבקשות לא מתחילים לפעול
- רכיבי Analytics מדווחים על אובדן החיבור ל-ZooKeeper בקובץ system.logs
הודעות שגיאה
בהמשך מפורטות דוגמאות להודעות שגיאה שעשויות להופיע כשמתרחש ניתוק מהצמתים של ZooKeeper.
- השגיאה הבאה מוחזרת ביומנים של שרת הניהול כשפריסת proxy ל-API נכשלת בגלל אובדן חיבור ל-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
- במהלך ההפעלה, נתבים ומעבדי הודעות מתחברים ל-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]
- יכול להיות שבממשק המשתמש החדש של Edge תוצג השגיאה הבאה, שמציינת שלא הייתה אפשרות לבדוק את סטטוס הפריסה של שרתי ה-proxy ל-API:
Error Fetching Deployments Error while checking path existence for path: path
גורמים אפשריים
בטבלה הבאה מפורטות סיבות אפשריות לבעיה הזו:
| סיבה | עבור |
|---|---|
| בעיה בקישוריות לרשת במרכזי נתונים שונים | משתמשי Edge Private Cloud |
| צומת ZooKeeper לא משרת בקשות | משתמשים ב-Edge Private Cloud |
לוחצים על קישור בטבלה כדי לראות פתרונות אפשריים לסיבה הזו.
בעיה בחיבור לרשת במרכזי נתונים שונים
אבחון
באשכול ZooKeeper יכולים להיות צמתים שמתפרסים על פני כמה אזורים או מרכזי נתונים, כמו DC-1 ו-DC-2. טופולוגיה טיפוסית של Apigee Edge 2 DC תכלול:
- שרתי ZooKeeper 1, 2 ו-3 כמשתתפים בהצבעה ב-DC-1
- ZooKeeper 4 ו-5 כמצביעים ו-ZooKeeper 6 כמשקיף ב-DC-2.
אם אזור DC-1 מושבת או שקישוריות הרשת בין DC-1 ל-DC-2 נקטעת, צומתי ZooKeeper לא יכולים לבחור מנהיג חדש ב-DC-2 והם לא מצליחים לתקשר עם צומת המנהיג. משקיפי ZooKeeper לא יכולים לבחור מנהיג חדש, ולשני המצביעים שנותרו ב-DC-2 אין קוורום של לפחות 3 צמתים מצביעים כדי לבחור מנהיג חדש. לכן, ל-ZooKeepers ב-DC-2 לא תהיה אפשרות לעבד בקשות. הצמתים הנותרים של ZooKeeper ב-DC-2 ימשיכו לנסות להתחבר מחדש לבוחרים של ZooKeeper כדי למצוא את הצומת הראשי.
רזולוציה
כדי לפתור את הבעיה, נסו את הפתרונות הבאים לפי הסדר שבו הם מופיעים.
אם ניסיתם את הפתרונות האלה והבעיה לא נפתרה, פנו לתמיכה של Apigee.
פתרון מספר 1
- צריך לפנות לאדמינים של הרשת כדי לפתור את בעיית הקישוריות בין מרכזי הנתונים.
- כשהמערך של ZooKeeper יוכל לתקשר בין מרכזי הנתונים ולבחור מנהיג ZooKeeper, הצמתים אמורים להיות תקינים ולעבד בקשות.
פתרון מס' 2
- אם תיקון הקישוריות לרשת ייקח זמן, אפשר להגדיר מחדש את צומתי ZooKeeper באזור שבו הם מושבתים. לדוגמה, מגדירים מחדש את אשכול ZooKeeper ב-DC-2 כך ש-3 צומתי ZooKeeper באזור הזה יהיו כולם מצביעים, ומסירים את
server.#ב-zoo.cfgשל ZooKeepers מאזור DC-1.- בדוגמה הבאה,
zoo.cfgמגדיר צמתים ל-2 אזורים שבהם 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
- באמצעות קוד עם הגדרה, יוצרים קובץ
/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\
בדוגמה שלמעלה, הצמתים מאזור US-East מוסרים, והצמתים מאזור US-West מקודמים לצמתים עם זכות הצבעה כשמסירים את ההערה
:observer. - בדוגמה הבאה,
- מגבים את
/opt/apigee/apigee-zookeeper/conf/zoo.cfgואת/opt/apigee/customer/application/zookeeper.propertiesהישן.הקבצים האלה ישמשו לשחזור הגדרות ברירת המחדל כשהקישוריות לרשת תחזור לפעולה בין מרכזי הנתונים.
משביתים את הסימון של הצופה עבור צומת הצופה. כדי לעשות את זה, מוסיפים את ההגדרה הבאה לחלק העליון של
/opt/apigee/customer/application/zookeeper.properties:conf_zoo_peertype=
-
עורכים את הקובץ
/opt/apigee/data/apigee-zookeeper/data/myidבאופן הבא:- עבור
server.1, משנים את הערך בתוךmyidמ-4 ל-1. - ב-
server.2, משנים אתmyidמ-5 ל-2. - ב-
server.3, משנים את הערך שלmyidמ-6 ל-3.
- עבור
- מפעילים מחדש את הצמתים של ZooKeeper באזור שבו הגדרתם מחדש את אשכול ZooKeeper.
- חוזרים על ההגדרה שלמעלה משלב 1ב עד שלב 5 בכל הצמתים של ZooKeeper ב-DC-2.
- מוודאים שהצמתים פועלים עם מנהיג:
$ 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" אם הוא ה-leader, או "follower" אם הוא follower.
כשהרשת בין מרכזי הנתונים תתחבר מחדש, אפשר יהיה לבטל את השינויים בהגדרות של ZooKeeper בצמתים של ZooKeeper ב-DC-2.
פתרון 3
- אם צומתי ZooKeeper באשכול לא הופעלו, צריך להפעיל אותם מחדש.
- בודקים את היומנים של ZooKeeper כדי להבין למה הצומת של ZooKeeper הושבת.
היומנים של ZooKeeper זמינים בספרייה הבאה:
$ 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
- פנו אל התמיכה של Apigee ושלחו את היומנים של ZooKeeper כדי לפתור את הבעיה שגרמה להפסקת הפעולה של צומת ZooKeeper.
צומת ZooKeeper לא משרת בקשות
צומת ZooKeeper באנסמבל עלול להפוך ללא תקין ולא להיות מסוגל להגיב לבקשות של לקוחות. הסיבה לכך יכולה להיות:
- הצומת נעצר בלי שהופעל מחדש.
- ההפעלה מחדש של הצומת בוצעה בלי שהופעלה התכונה להפעלה אוטומטית.
- עומס המערכת על הצומת גרם לו לקרוס או לפעול באופן לא תקין.
אבחון
- מריצים את הפקודות הבאות לבדיקת התקינות של ZooKeeper בכל אחד מהצמתים של ZooKeeper ובודקים את הפלט:
-
$ echo "ruok" | nc localhost 2181
פלט לדוגמה:
$ echo "ruok" | nc localhost 2181 imok
-
echo srvr | nc localhost 2181
בודקים את המצב כדי לקבוע אם צומת ZooKeeper הוא מוביל או עוקב.
פלט לדוגמה לצומת ZooKeeper יחיד, All-in-One:
$ 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
-
$ echo mntr | nc localhost 2181
הפקודה הזו מציגה את משתני ZooKeeper שאפשר להשתמש בהם כדי לבדוק את תקינות אשכול ZooKeeper.
פלט לדוגמה:
$ 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
-
$ 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
-
$ 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 לא משרתים בקשות.
-
- בודקים את יומני ZooKeeper בצומת הספציפי ומנסים לאתר שגיאות שגורמות ל-ZooKeeper להיות מושבת. יומני ZooKeeper זמינים בספרייה הבאה:
$ 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
רזולוציה
- מפעילים מחדש את כל שאר צומתי ZooKeeper באשכול, אחד אחרי השני.
- מריצים מחדש את פקודות בדיקת התקינות של ZooKeeper בכל צומת ובודקים אם מתקבל הפלט הצפוי.
אם הבעיה נמשכת או אם הפעלה מחדש לא פותרת אותה, צריך לפנות לתמיכה של Apigee כדי לפתור את הבעיה שגורמת לעומס על המערכת.