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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X.
info

المشكلة

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

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

    التشخيص

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

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

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

    2. إذا استمرت المشكلة، نفِّذ طلب البيانات من واجهة برمجة تطبيقات الإدارة أدناه للاطّلاع على حالة النشر ومعرفة ما إذا كانت هناك أي أخطاء في أي من المكوّنات:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments

      نموذج لناتج حالة النشر يعرض الخطأ "Error while accessing datastore" على أحد "معالجات الرسائل"

      {
      "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 <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
      2. إذا لم يكن الأمر telnet متاحًا، استخدِم netcat للتحقّق من الاتصال على النحو التالي:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
      3. إذا ظهرت لك الاستجابة "Connection Refused" أو "Connection timed out"، يُرجى التواصل مع فريق عمليات الشبكة.
    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، ستفشل عمليات النشر بسبب تعذُّر الوصول إلى مخزن بيانات Cassandra.

ملاحظة: لا يمكن لمستخدمي Edge Public 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 على حالات الاستخدام الفردية وأنماط الزيارات على الوكلاء الذين يحتويون على سياسات تتطلب إذن الوصول للقراءة من Cassandra.

على سبيل المثال، إذا تم طلب بيانات من نوع منح refresh_token لسياسات OAuth، وكان الـ الرمز المميز لإعادة التحميل مرتبطًا بالعديد من رموز الوصول، قد يؤدي ذلك إلى عدد كبير من عمليات القراءة من Cassandra. ويمكن أن يؤدي ذلك إلى زيادة وقت استجابة طلبات القراءة على Cassandra.

التشخيص

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

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

الدقة

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

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

حِزمة وكيل واجهة برمجة التطبيقات أكبر من 15 ميغابايت

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

التشخيص

ملاحظة: لا يمكن لمستخدمي Edge Public 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، وملفات JavaScript، ملفات JAR إلى مستوى البيئة أو المؤسسة. لمزيد من المعلومات عن ملفات الموارد، اطّلِع على مستندات Edge.
  2. انشر وكيل واجهة برمجة التطبيقات ومعرفة ما إذا اختفى الخطأ.

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

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

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

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