שגיאת גישה למאגר הנתונים

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

תיאור הבעיה

פריסת הגרסאות הקודמות של ה-API של ה-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

סיבות אפשריות

הסיבות האופייניות לבעיה הזו הן:

  1. הסיבה פרטים עבור
    בעיית קישוריות רשת בין מעבד ההודעות לבין Cassandra כשל בתקשורת בין מעבד ההודעות לבין Cassandra עקב בעיות בקישוריות לרשת או כללים של חומת האש. משתמשי ענן פרטי של Edge
    שגיאות בפריסה שנוצרו בעקבות הפעלה מחדש של Cassandra הצמתים של Cassandra לא היו זמינים כי היא הופעלה מחדש במסגרת תחזוקה שגרתית. משתמשי ענן פרטי של Edge
    עלייה חדה בזמן האחזור של בקשות קריאה ב-Cassandra אם הצמתים של Cassandra מבצעים מספר גדול של קריאות בו-זמניות, היא עשויה להגיב לאט בגלל עלייה חדה בזמן האחזור של בקשת הקריאה. משתמשי ענן פרטי של Edge
    חבילת API Proxy גדולה מ-15MB Cassandra הוגדרה כך שלא תאפשר חבילות API של שרת proxy שגודלן עולה על 15MB. משתמשי ענן פרטי של Edge

    בעיית קישוריות רשת בין מעבד ההודעות לבין Cassandra

    אבחון

    הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים ב-Edge Public Cloud, תוכלו לפנות לתמיכה של Apigee Edge.

    1. מבטלים את הפריסה ופורסים מחדש את שרת ה-proxy של ה-API. אם הייתה בעיית קישוריות זמנית בין מעבד ההודעות לבין Cassandra, יכול להיות שהשגיאה תיעלם.

      אזהרה: אין לבטל את הפריסה אם השגיאות מזוהות בסביבת הייצור.

    2. אם הבעיה נמשכת, צריך לבצע את הקריאה הבאה ל-AP לניהול כדי לבדוק את סטטוס הפריסה ולבדוק אם יש שגיאות ברכיבים כלשהם:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
      

      פלט של סטטוס הפריסה לדוגמה עם 'שגיאה במהלך הגישה למאגר הנתונים' באחד ממעבדי ההודעות

      {
      "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"
      } 
      
    3. צריך להפעיל מחדש את מעבדי ההודעות שבהם מוצגת שגיאת הפריסה. אם הייתה בעיה זמנית ברשת, השגיאה אמורה להיעלם:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. צריך לחזור על שלב 2 כדי לבדוק אם הפריסה מצליחה במעבד ההודעות שהופעל מחדש. אם לא נמצאו שגיאות, סימן שהבעיה נפתרה.
    5. בודקים אם מעבד ההודעות יכול להתחבר לכל צומת של Cassandra ביציאה 9042 ו-9160:
      1. אם telnet זמין, משתמשים ב-telnet:
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
        
      2. אם telnet לא זמין, השתמשו ב-netcat כדי לבדוק את הקישוריות באופן הבא:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
        
      3. אם מתקבלת התשובה 'החיבור נדחה' או 'תם הזמן הקצוב לתפוגה של החיבור', צריך לפנות לצוות תפעול הרשת.
    6. אם הבעיה נמשכת, צריך לבדוק אם כל צומתי Cassandra מקשיבים ביציאה 9042 וביציאה 9160:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
      
    7. אם צומתי Cassandra לא מאזינים ביציאה 9042 או 9160, יש להפעיל מחדש את הצמתים הספציפיים של Cassandra:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
      
    8. אם הבעיה נמשכת, יש לפנות לצוות תפעול הרשת.

רזולוציה

עובדים עם צוות התפעול של הרשת ופותרים את בעיית הקישוריות ברשת בין מעבד ההודעות לבין Cassandra.

שגיאות פריסה בעקבות הפעלה מחדש של Cassandra

בדרך כלל, צומתי Cassandra מופעלים מחדש מדי פעם במסגרת התחזוקה השגרתית. אם שרתי proxy של ה-API נפרסים במהלך פעולת התחזוקה של Cassandra, הפריסות ייכשלו עקב חוסר נגישות למאגר הנתונים של Cassandra.

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים ב-Edge Public Cloud, תוכלו לפנות לתמיכה של Apigee Edge.

אבחון

  1. בדיקה אם צומתי Cassandra הופעלו מחדש במהלך הפריסה.אפשר לבדוק את זה ביומן של Cassandra או ביומנים האחרונים של זמן ההפעלה של צומת Cassandra:

    grep 'shutdown' /opt/apigee/var/log/apigee-cassandra/system.log

רזולוציה

  1. מוודאים ש-Cassandra פועלת.
  2. צריך לבדוק אם מעבדי הודעות יכולים להתחבר למאגר הנתונים של Cassandra ביציאה 9042 ו-9160.

עלייה חדה בזמן האחזור של בקשות קריאה ב-Cassandra

מספר גדול של קריאות ב-Cassandra תלוי בתרחישים ספציפיים לדוגמה ובדפוסי תנועה בשרתי ה-proxy שמכילים מדיניות שדורשת גישת קריאה מ-Cassandra.

לדוגמה, אם מתבצעת קריאה של סוג ההרשאה GET לרענון_אסימון עבור מדיניות OAuth, ואסימון הרענון משויך לאסימוני גישה רבים, התוצאה עשויה להיות כמות גדולה של קריאות מ-Cassandra. הדבר עלול לגרום להארכת זמן האחזור של בקשת הקריאה ב-Cassandra.

אבחון

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים ב-Edge Public Cloud, תוכלו לפנות לתמיכה של Apigee Edge.

  1. אם התקנת את מרכז הבקרה של Beta Monitoring, עליך לעיין במרכז הבקרה של Cassandra ולבדוק את התרשים 'בקשות לקריאה' לגבי התקופה שבה קרתה הבעיה. כדאי לבדוק גם את התרשים 'קריאת זמני האחזור של הבקשות'.
  2. כלי חלופי לבדיקת בקשות הקריאה וזמני האחזור של קריאה הוא הפקודה nodetool cfstats. במסמכי התיעוד של Cassandra ניתן לקרוא פרטים נוספים על השימוש בפקודה הזו.

רזולוציה

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים ב-Edge Public Cloud, תוכלו לפנות לתמיכה של Apigee Edge.

  1. אפשר לנסות שוב את הפריסה כשהביצועים של Cassandra יחזרו למצבם הרגיל. מוודאים שכל הטבעת של Cassandra תקינה.
  2. (אופציונלי) מבצעים הפעלה מחדש במצב של מעבדי הודעות כדי לוודא שהקישוריות מחוברת.
  3. רוצה לפתור את הבעיה לטווח ארוך? כדאי לבדוק את דפוסי התנועה של ה-API שעשויים לתרום לקריאות גבוהות יותר במאגר הנתונים של Cassandra. לקבלת עזרה בפתרון הבעיה, יש לפנות לתמיכה של Apigee Edge.
  4. אם הצמתים הקיימים של Cassandra לא מתאימים לטיפול בתנועה הנכנסת, יש להגדיל את קיבולת החומרה או את מספר הצמתים של מאגר הנתונים של Cassandra בהתאם.

חבילת Proxy ל-API גדולה מ-15MB

הגודל של חבילות proxy ל-API מוגבל ל-15MB ב-Cassandra. אם הגודל של חבילת שרת ה-Proxy של ה-API גדול מ-15MB, כשתנסו לפרוס את שרת ה-API של ה-API, תוצג ההודעה "שגיאה בזמן הגישה למאגר הנתונים".

אבחון

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים ב-Edge Public Cloud, תוכלו לפנות לתמיכה של Apigee Edge.

  1. צריך לבדוק את היומנים של מעבד ההודעות (/opt/apigee/var/log/edge-message-processor/logs/system.log) ולבדוק אם אירעו שגיאות במהלך הפריסה של שרת ה-API הספציפי.
  2. אם מופיעה שגיאה שדומה לזו שמוצגת באיור למטה, שגיאת הפריסה היא שגודל החבילה של שרת ה-API של שרת ה-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>
    

רזולוציה

אם יהיו יותר מדי קובצי משאבים, חבילת ה-API של שרת ה-proxy תהיה גדולה. אפשר להשתמש בפתרונות הבאים כדי לטפל בבעיה הזו:

פתרון מס' 1: העברת קובצי משאבים לרמת הסביבה או הארגון

  1. מעבירים את כל קובצי המשאבים, כמו מודולים, קבצים ומודולים של NodeJS, קובצי JavaScript וקובצי JAR, לסביבה או לרמת הארגון. מידע נוסף על קובצי משאבים זמין במסמכי התיעוד של Edge.
  2. פורסים את שרת ה-proxy של ה-API ובודקים אם השגיאה נעלמת.

אם הבעיה נמשכת או שאי אפשר להעביר את קובצי המשאבים לרמת הסביבה או הארגון מסיבה כלשהי, אפשר להחיל את פתרון מס' 2.

פתרון מס' 2: הגדלת חבילת ה-API של שרת ה-proxy ב-Cassandra

הערה: רק משתמשי Edge Private Cloud יכולים לבצע את השלבים הבאים. אם אתם משתמשים ב-Edge Public Cloud, תוכלו לפנות לתמיכה של Apigee Edge.

כדי להגדיל את גודל התעבורה של מסגרת thrift frame ב-Cassandra, אפשר לבצע את הפעולות הבאות כדי לקבוע את הגודל המקסימלי של חבילת ה-API של שרת ה-API שמותרת ב-Edge:

  1. יוצרים את הקובץ הבא, אם הוא לא קיים:
    /opt/apigee/customer/application/cassandra.properties
    
  2. מוסיפים את השורה הבאה לקובץ ומחליפים את <size> בהגדרת הגודל הדרושה לחבילה הגדולה:
    conf_cassandra_thrift_framed_transport_size_in_mb=<size>
    
  3. מפעילים מחדש את Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    
  4. חוזרים על שלבים 1 עד 3 בכל צומתי Cassandra באשכול.

אם הבעיה נמשכת, יש לפנות לתמיכה של Apigee Edge.