حدث خطأ أثناء الوصول إلى مخزن البيانات

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

تعذّر نشر مراجعات الخادم الوكيل لواجهة برمجة التطبيقات عبر واجهة مستخدم Edge أو واجهة برمجة تطبيقات إدارة Edge مع ظهور الخطأ "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 فشل الاتصال بين معالج الرسائل وكاساندرا بسبب مشاكل في الاتصال بالشبكة أو قواعد جدار الحماية. مستخدمو Edge Private Cloud
    أخطاء النشر بسبب إعادة تشغيل "كاساندرا" لم تكن عُقد "كاساندرا" متاحة بسبب إعادة تشغيلها كجزء من الصيانة الروتينية. مستخدمو Edge Private Cloud
    ارتفاع كبير في وقت استجابة طلبات القراءة في تطبيق Cassandra إذا كانت عُقد Cassandra تنفّذ عددًا كبيرًا من القراءات المتزامنة، قد تستجيب ببطء بسبب الارتفاع في وقت استجابة طلبات القراءة. مستخدمو Edge Private Cloud
    حزمة الوكيل لواجهة برمجة التطبيقات أكبر من 15 ميغابايت تم إعداد Cassandra بحيث لا يسمح بحِزم الخادم الوكيل لواجهة برمجة التطبيقات التي يزيد حجمها عن 15 ميغابايت. مستخدمو Edge Private Cloud

    مشكلة في الاتصال بالشبكة بين "معالج الرسائل" و"كاساندرا"

    التشخيص

    ملاحظة: يمكن لمستخدمي Edge Private Cloud فقط تنفيذ الخطوات التالية. إذا كنت تستخدم Edge Public Cloud، يُرجى التواصل مع فريق دعم Apigee Edge.

    1. عليك إلغاء نشر الخادم الوكيل لواجهة برمجة التطبيقات وإعادة نشره. وإذا كانت هناك مشكلة مؤقتة في الاتصال بين معالج الرسائل وCassandra، فقد يختفي الخطأ.

      تحذير: يجب عدم إلغاء النشر إذا ظهرت الأخطاء في بيئة الإنتاج.

    2. في حال استمرار المشكلة، يُرجى تنفيذ طلب نقطة الوصول للإدارة أدناه للتحقّق من حالة النشر والتحقّق مما إذا كانت هناك أي أخطاء في أي مكوّنات:
      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، سيتعذّر إتمام عمليات النشر بسبب عدم إمكانية الوصول إلى مخزن بيانات 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

يعتمد عدد كبير من القراءات على "كاساندرا" على حالات الاستخدام الفردي وأنماط حركة الزيارات على الخوادم الوكيلة التي تحتوي على سياسات تتطلب إذن الوصول للقراءة من "كاساندرا".

على سبيل المثال، إذا تم استدعاء طلب GET للحصول على نوع منح rename_token لسياسات OAuth، وكان الرمز المميز لإعادة التحميل مرتبطًا بالعديد من رموز الدخول، قد ينتج عن ذلك عدد كبير من القراءات من Cassandra. قد يتسبب هذا في زيادة وقت استجابة طلب القراءة على Cassandra.

التشخيص

ملاحظة: يمكن لمستخدمي Edge Private Cloud فقط تنفيذ الخطوات التالية. إذا كنت تستخدم Edge Public Cloud، يُرجى التواصل مع فريق دعم Apigee Edge.

  1. إذا كنت قد ثبَّتّ لوحة بيانات التتبُّع التجريبي، راجِع لوحة بيانات Cassandra وراجِع الرسم البياني "قراءة الطلبات" لمعرفة مدة المشكلة. راجِع أيضًا الرسم البياني للاطّلاع على "قراءة أوقات استجابة الطلب".
  2. الأداة البديلة للتحقّق من طلبات القراءة وقراءة أوقات الاستجابة هي الأمر nodetool cfstats. راجِع مستندات Cassandra للحصول على مزيد من التفاصيل حول استخدام هذا الأمر.

درجة الدقّة

ملاحظة: يمكن لمستخدمي Edge Private Cloud فقط تنفيذ الخطوات التالية. إذا كنت تستخدم Edge Public Cloud، يُرجى التواصل مع فريق دعم Apigee Edge.

  1. يُرجى محاولة النشر مرة أخرى بعد عودة "كاساندرا" إلى مستواها الطبيعي. تأكد من أن حلقة كاساندرا بالكامل طبيعية.
  2. (اختياري) نفِّذ عملية إعادة تشغيل مجددًا في معالِجات الرسائل للتأكّد من توفُّر إمكانية الاتصال.
  3. للتوصّل إلى حلّ طويل الأمد، راجِع أنماط زيارات واجهة برمجة التطبيقات التي من المحتمل أن تساهم في الحصول على معدّل قراءة أعلى في مخزن بيانات "كاساندرا". يُرجى التواصل مع فريق دعم Apigee Edge للحصول على مساعدة في تحديد هذه المشكلة وحلّها.
  4. إذا لم تكن عُقد كاساندرا الحالية مناسبة لمعالجة حركة البيانات الواردة، يجب إما زيادة سعة الأجهزة أو عدد عُقد مخزن بيانات "كاساندرا" بشكلٍ مناسب.

واجهة برمجة التطبيقات حزمة الخادم الوكيل (API) التي يزيد حجمها عن 15 ميغابايت

يقتصر حجم حِزم الخادم الوكيل لواجهة برمجة التطبيقات على 15 ميغابايت في Cassandra. إذا كان حجم حزمة الخادم الوكيل لواجهة برمجة التطبيقات أكبر من 15 ميغابايت، ستظهر رسالة "حدث خطأ أثناء الوصول إلى مخزن البيانات" عندما تحاول نشر الخادم الوكيل لواجهة برمجة التطبيقات.

التشخيص

ملاحظة: يمكن لمستخدمي Edge Private Cloud فقط تنفيذ الخطوات التالية. إذا كنت تستخدم Edge Public Cloud، يُرجى التواصل مع فريق دعم Apigee Edge.

  1. تحقَّق من سجلات معالج الرسائل (/opt/apigee/var/log/edge-message-processor/logs/system.log) لمعرفة ما إذا كانت هناك أي أخطاء أثناء نشر الخادم الوكيل المحدد لواجهة برمجة التطبيقات.
  2. في حال ظهور خطأ مشابه للخطأ الموضّح في الشكل أدناه، يكون خطأ النشر هو أنّ حجم حزمة الخادم الوكيل لواجهة برمجة التطبيقات أكبر من 15 ميغابايت.
    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>
    

درجة الدقّة

ستكون حزمة الخادم الوكيل لواجهة برمجة التطبيقات كبيرة إذا كان هناك عدد كبير جدًا من ملفات الموارد. يمكنك استخدام الحلول التالية لمعالجة هذه المشكلة:

الحل 1: نقل ملفات الموارد إلى مستوى البيئة أو المؤسسة

  1. انقل أي من ملفات الموارد، مثل ملفات ووحدات NodeJS Script أو ملفات JavaScript أو ملفات JAR، إلى مستوى البيئة أو المؤسسة. لمعرفة مزيد من المعلومات حول ملفات الموارد، يمكنك الاطّلاع على مستندات Edge.
  2. انشر الخادم الوكيل لواجهة برمجة التطبيقات واعرف ما إذا كان الخطأ قد اختفى أم لا.

في حال استمرار المشكلة أو تعذُّر نقل ملفات الموارد إلى مستوى البيئة أو المؤسسة لسبب ما، يمكنك تطبيق الحل رقم 2.

الحل 2: زيادة حجم حزمة الخادم الوكيل لواجهة برمجة التطبيقات على Cassandra

ملاحظة: يمكن لمستخدمي Edge Private Cloud فقط تنفيذ الخطوات التالية. إذا كنت تستخدم Edge Public Cloud، يُرجى التواصل مع فريق دعم Apigee Edge.

اتّبِع هذه الخطوات لزيادة حجم سمة Cassandra حجم نقل إطار توفير البيانات الذي يتحكّم في الحد الأقصى لحجم حزمة الخادم الوكيل لواجهة برمجة التطبيقات المسموح بها في 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.