אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
תיאור הבעיה
פריסה של עדכונים של שרת proxy ל-API דרך ממשק המשתמש של Edge או קריאה ל-Edge Management API נכשלת עם השגיאה "Error while accessing datastore".
הודעות שגיאה
Error in deployment for environment qa. The revision is deployed, but traffic cannot flow. Error while accessing datastore;Please retry later
סיבות אפשריות
הסיבות הנפוצות לבעיה הזו הן:
-
הסיבה פרטים בשם בעיה בקישוריות לרשת בין מעבד ההודעות לבין Cassandra התקשורת בין מעבד ההודעות לבין Cassandra נכשלה בגלל בעיות בקישוריות לרשת או בגלל כללי חומת אש. משתמשים ב-Edge Private Cloud שגיאות פריסה בגלל הפעלה מחדש של Cassandra צומת או צמתים של Cassandra לא היו זמינים כי הם הופעלו מחדש כחלק מתחזוקה שגרתית. משתמשים ב-Edge Private Cloud עלייה חדה בזמן האחזור של בקשות קריאה ב-Cassandra אם צומת או צמתים של Cassandra מבצעים מספר גדול של קריאות בו-זמנית, יכול להיות שהתגובה תהיה איטית בגלל עלייה חדה בחביון של בקשות הקריאה. משתמשים ב-Edge Private Cloud חבילת API Proxy גדולה מ-15MB מערכת Cassandra הוגדרה כך שלא ניתן להשתמש בחבילות של שרתי proxy ל-API בגודל של יותר מ-15MB. משתמשים ב-Edge Private Cloud בעיה בחיבור לרשת בין מעבד ההודעות לבין Cassandra
אבחון
הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.
- מבטלים את הפריסה של פרוקסי ה-API ופורסים אותו מחדש. אם הייתה בעיה זמנית בקישוריות בין מעבד ההודעות לבין Cassandra, יכול להיות שהשגיאה תיעלם.
אזהרה: אל תבטלו את הפריסה אם השגיאות מופיעות בסביבת הייצור.
- אם הבעיה נמשכת, מריצים את קריאת ה-API לניהול שבהמשך כדי לבדוק את סטטוס הפריסה ולראות אם יש שגיאות ברכיבים כלשהם:
curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
פלט לדוגמה של סטטוס הפריסה שבו מוצגת השגיאה Error while accessing datastore on one of the Message Processors
{ "environment" : [ { "aPIProxy" : [ { "name" : "simple-python", "revision" : [ { "configuration" : { "basePath" : "/", "steps" : [ ] }, "name" : "1", "server" : [ { "status" : "deployed", "type" : [ "message-processor" ], "uUID" : "2acdd9b2-17de-4fbb-8827-8a2d4f3d7ada" }, { "error" : "Error while accessing datastore;Please retry later", "errorCode" : "datastore.ErrorWhileAccessingDataStore", "status" : "error", "type" : [ "message-processor" ], "uUID" : "42772085-ca67-49bf-a9f1-c04f2dc1fce3" } "state" : "error" }
- מפעילים מחדש את מעבדי ההודעות שבהם מופיעה שגיאת הפריסה. אם הייתה בעיה זמנית ברשת, השגיאה אמורה להיעלם:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- חוזרים על שלב 2 כדי לבדוק אם הפריסה מצליחה ב-מעבד בקשות שהופעל מחדש. אם לא נמצאו שגיאות, סימן שהבעיה נפתרה.
- בודקים אם מעבד ההודעות יכול להתחבר לכל צומת Cassandra ביציאות 9042 ו-9160:
:
- אם telnet זמין, משתמשים ב-telnet:
telnet <Cassandra_IP> 9042 telnet <Cassandra_IP> 9160
- אם telnet לא זמין, משתמשים ב-netcat כדי לבדוק את הקישוריות באופן הבא:
nc -vz <Cassandra_IP> 9042 nc -vz <Cassandra_IP> 9160
- אם מקבלים את התגובה Connection Refused (החיבור נדחה) או Connection timed out (החיבור חרג מזמן ההמתנה), צריך לפנות לצוות תפעול הרשת.
- אם telnet זמין, משתמשים ב-telnet:
- אם הבעיה נמשכת, צריך לבדוק אם כל אחד מצמתי Cassandra מאזין ליציאה 9042 וליציאה 9160:
netstat -an | grep LISTEN | grep 9042 netstat -an | grep LISTEN | grep 9160
- אם הצמתים של Cassandra לא מאזינים ליציאות 9042 או 9160, צריך להפעיל מחדש את הצמתים הספציפיים של Cassandra:
/opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
- אם הבעיה נמשכת, צריך לפנות לצוות התפעול של הרשת.
- מבטלים את הפריסה של פרוקסי ה-API ופורסים אותו מחדש. אם הייתה בעיה זמנית בקישוריות בין מעבד ההודעות לבין Cassandra, יכול להיות שהשגיאה תיעלם.
רזולוציה
צריך לעבוד עם צוות תפעול הרשת כדי לפתור את בעיית הקישוריות לרשת בין מעבד ההודעות לבין Cassandra.
שגיאות פריסה בגלל הפעלה מחדש של Cassandra
בדרך כלל מפעילים מחדש את הצמתים של Cassandra מעת לעת כחלק מתחזוקה שגרתית. אם פריסות של שרתי proxy של API מתבצעות במהלך עבודות התחזוקה של Cassandra, הפריסות נכשלות בגלל חוסר גישה למאגר הנתונים של Cassandra.
הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.
אבחון
- בודקים אם צמתי Cassandra הופעלו מחדש בזמן הפריסה.אפשר לעשות את זה על ידי בדיקת יומן Cassandra או יומני זמני ההפעלה האחרונים של צומת Cassandra:
grep"shutdown"/opt/apigee/var/log/apigee-cassandra/system.log
רזולוציה
- מוודאים ש-Cassandra פועל.
- בודקים אם מעבדי ההודעות יכולים להתחבר למאגר הנתונים של Cassandra ביציאות 9042 ו-9160.
עלייה חדה בזמן האחזור של בקשות קריאה ב-Cassandra
מספר גבוה של קריאות ב-Cassandra תלוי בתרחישי שימוש ספציפיים ובדפוסי תעבורת נתונים בשרתי ה-proxy שמכילים מדיניות שדורשת הרשאת קריאה מ-Cassandra.
לדוגמה, אם מתבצעת קריאת GET לסוג מענק refresh_token למדיניות OAuth, ואסימון הרענון משויך להרבה אסימוני גישה, יכול להיות שיתבצעו הרבה קריאות מ-Cassandra. הדבר עלול לגרום לעלייה בחביון של בקשות קריאה ב-Cassandra.
אבחון
הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.

- אם התקנתם את לוח הבקרה של Monitoring בגרסת בטא, כדאי לעיין בלוח הבקרה של Cassandra ולבדוק את התרשים Read Requests (בקשות קריאה) לתקופה שבה הבעיה התרחשה. כדאי גם לעיין בתרשים 'זמני האחזור של בקשות קריאה'.
- כלי חלופי לבדיקת בקשות קריאה וזמני השהיה של קריאה הוא הפקודה
nodetool cfstats. מידע נוסף על השימוש בפקודה הזו מופיע במאמרי העזרה של Cassandra.
רזולוציה
הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.
- אפשר לנסות לפרוס שוב אחרי שהביצועים של Cassandra יחזרו להיות תקינים. מוודאים שכל טבעת Cassandra תקינה.
- (אופציונלי) מבצעים הפעלה מחדש מתגלגלת של מעבדי ההודעות כדי לוודא שהקישוריות נוצרה.
- כדי למצוא פתרון לטווח ארוך, כדאי לבדוק את דפוסי התנועה ב-API שאולי תורמים למספר קריאות גבוה יותר במאגר הנתונים של Cassandra. כדי לקבל עזרה בפתרון הבעיה הזו, אפשר לפנות לתמיכה של Apigee Edge.
- אם הצמתים הקיימים של Cassandra לא מספיקים לטיפול בתנועה הנכנסת, צריך להגדיל את קיבולת החומרה או את מספר הצמתים של מאגר הנתונים של Cassandra.
קובץ App Bundle של proxy ל-API גדול מ-15MB
גודל חבילות ה-proxy ל-API מוגבל ל-15MB ב-Cassandra. אם הגודל של חבילת ה-proxy ל-API גדול מ-15MB, תוצג השגיאה 'Error while accessing datastore' (שגיאה בגישה למאגר הנתונים) כשמנסים לפרוס את ה-proxy ל-API.
אבחון
הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.
- בודקים את היומנים של מעבד בקשות (
/opt/apigee/var/log/edge-message-processor/logs/system.log) כדי לראות אם אירעו שגיאות במהלך הפריסה של ה-API Proxy הספציפי. - אם מופיעה שגיאה דומה לזו שמוצגת באיור שלמטה, סימן שהשגיאה בפריסה נובעת מכך שנפח חבילת ה-proxy ל-API גדול מ-15MB.
2016-03-23 18:42:18,517 main ERROR DATASTORE.CASSANDRA - AstyanaxCassandraClient.fetchDynamicCompositeColumns() : Error while querying columnfamily : [api_proxy_revisions_r21, adevegowdat@v1-node-js] for rowkey:{} com.netflix.astyanax.connectionpool.exceptions.TransportException: TransportException: [host=None(0.0.0.0):0, latency=159(486), attempts=3]org.apache.thrift.transport.TTransportException: Frame size (20211500) larger than max length (16384000)! at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(ThriftConverter.java:197) ~[astyanax-thrift-1.56.43.jar:na] at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:65) ~[astyanax-thrift-1.56.43.jar:na] ...<snipped> Caused by: org.apache.thrift.transport.TTransportException: Frame size (20211500) larger than max length (16384000)! at org.apache.thrift.transport.TFramedTransport.readFrame(TFramedTransport.java:137) ~[libthrift-0.9.1.jar:0.9.1] at org.apache.thrift.transport.TFramedTransport.read(TFramedTransport.java:101) ~[libthrift-0.9.1.jar:0.9.1] at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) ~[libthrift-0.9.1.jar:0.9.1] ...<snipped>
רזולוציה
אם יש יותר מדי קבצי משאבים, חבילת ה-proxy ל-API תהיה גדולה. כדי לפתור את הבעיה, אפשר לנסות את הפתרונות הבאים:
פתרון מספר 1: העברת קובצי משאבים לרמת הסביבה או הארגון
- מעבירים קובצי משאבים, כמו קובצי סקריפט ומודולים של NodeJS, קובצי JavaScript וקובצי JAR, לרמת הסביבה או הארגון. מידע נוסף על קובצי משאבים זמין במאמרי העזרה של Edge.
- מבצעים פריסה של proxy ל-API ובודקים אם השגיאה נעלמת.
אם הבעיה נמשכת או אם לא ניתן להעביר את קובצי המשאבים לרמת הסביבה או הארגון מסיבה כלשהי, צריך להחיל את פתרון מס' 2.
פתרון מס' 2: הגדלת גודל ה-proxy ל-API ב-Cassandra
הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים בענן ציבורי של Edge, פנו אל התמיכה של Apigee Edge.
כדי להגדיל את הגודל של מאפיין Cassandra thrift frame transport size, שקובע את הגודל המקסימלי של חבילת ה-proxy ל-API שמותרת ב-Edge, צריך לפעול לפי השלבים הבאים:
- יוצרים את הקובץ הבא, אם הוא לא קיים:
/opt/apigee/customer/application/cassandra.properties
- מוסיפים את השורה הבאה לקובץ, ומחליפים את <size> בהגדרת הגודל שנדרשת עבור חבילת התכונות הגדולה:
conf_cassandra_thrift_framed_transport_size_in_mb=<size>
- מפעילים מחדש את Cassandra:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- חוזרים על שלבים 1 עד 3 בכל הצמתים של Cassandra באשכול.
אם הבעיה נמשכת, אפשר לפנות לתמיכה של Apigee Edge.