אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
תיאור הבעיה
בעיות בקישוריות של 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 תוצג השגיאה הבאה, שמציינת שלא הייתה אפשרות לבדוק את סטטוס הפריסה של שרתי ה-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 מרכזי נתונים תכלול:
- שרתי 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 צמתים מצביעים כדי לבחור מנהיג חדש. לכן, שרתי ZooKeeper ב-DC-2 לא יוכלו לעבד בקשות. הצמתים הנותרים של ZooKeeper ב-DC-2 ימשיכו לנסות להתחבר מחדש לבוחרים של ZooKeeper כדי למצוא את הצומת הראשי.
רזולוציה
כדי לפתור את הבעיה, צריך לנסות את הפתרונות הבאים לפי הסדר שבו הם מופיעים.
אם ניסיתם את הפתרונות האלה ולא הצלחתם לפתור את הבעיה, אפשר לפנות אל התמיכה של Apigee.
פתרון 1
- צריך לעבוד עם מנהלי הרשת כדי לתקן את בעיית הקישוריות בין מרכזי הנתונים.
- כשהקבוצה של ZooKeeper יכולה לתקשר בין מרכזי הנתונים ולבחור מנהיג של ZooKeeper, הצמתים אמורים להיות תקינים ולעבד בקשות.
פתרון מספר 2
- אם ייקח זמן לתקן את הבעיה בקישוריות לרשת, אפשר להגדיר מחדש את צמתי ZooKeeper באזור שבו הם לא פעילים. לדוגמה, אפשר להגדיר מחדש את אשכול ZooKeeper ב-DC-2 כך שכל 3 הצמתים של ZooKeeper באזור הזה יהיו מצביעים, ולהסיר את
server.#ב-zoo.cfgשל ZooKeeper מאזור 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
הפלט של הפקודה הזו יכיל שורה עם הערך 'leader' אם זה המנהיג, או '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:
$ 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 כדי לפתור את הבעיה שגורמת לעומס על המערכת.