خطا در دسترسی به مخزن داده

درحال مشاهده اسناد 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 به‌دلیل مشکلات اتصال‌پذیری شبکه یا قوانین دیوار آتش، ارتباط بین «پردازشگر پیام» و Cassandra ناموفق بود. کاربران Edge Private Cloud
    خطاهای استقرار به‌دلیل بازراه‌اندازی‌های Cassandra گره(های) Cassandra دردسترس نبود زیرا به‌عنوان بخشی از تعمیر و نگهداری معمول بازراه‌اندازی شد. کاربران Edge Private Cloud
    افزایش ناگهانی در تأخیر درخواست خواندن در Cassandra اگر گره(های) Cassandra تعداد زیادی خوانش هم‌زمان انجام دهد، ممکن است به‌دلیل افزایش ناگهانی در تأخیر درخواست خوانش، پاسخ کندی داشته باشد. کاربران Edge Private Cloud
    بسته پراکسی API بزرگ‌تر از ۱۵ مگابایت ‫Cassandra پیکربندی شده است تا بسته‌های پراکسی API بزرگ‌تر از ۱۵ مگابایت را مجاز نکند. کاربران Edge Private Cloud

    مشکل اتصال‌پذیری شبکه بین «پردازنده پیام» و Cassandra

    تشخیص

    توجه: فقط کاربران «ابر خصوصی Edge» می‌توانند مراحل زیر را انجام دهند. اگر در «ابر عمومی Edge» هستید، با پشتیبانی Apigee Edge تماس بگیرید.

    1. کارگزاری 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. مرحله ۲ را تکرار کنید تا ببینید استقرار در «پردازشگر پیام» که بازراه‌اندازی شده است موفقیت‌آمیز بوده است یا نه. اگر خطایی پیدا نشد، یعنی مشکل برطرف شده است.
    5. بررسی کنید که پردازشگر پیام بتواند به هر گره Cassandra در درگاه ۹۰۴۲ و ۹۱۶۰ متصل شود:
      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 در درگاه ۹۰۴۲ و درگاه ۹۱۶۰ گوش می‌دهند یا نه:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
    7. اگر گره‌های Cassandra در درگاه ۹۰۴۲ یا ۹۱۶۰ گوش نمی‌دهند، گره(های) Cassandra خاص را بازراه‌اندازی کنید:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
    8. اگر مشکل ادامه داشت، با تیم عملیات شبکه خود تماس بگیرید.

وضوح

با تیم عملیات شبکه خود همکاری کنید و مشکل اتصال شبکه بین «پردازشگر پیام» و Cassandra را برطرف کنید.

خطاهای استقرار به‌دلیل راه‌اندازی مجدد Cassandra

گره‌های Cassandra معمولاً به‌صورت دوره‌ای به‌عنوان بخشی از نگهداری معمول بازراه‌اندازی می‌شوند. اگر کارگزاران API درطول کار نگهداری Cassandra مستقر شوند، استقرارها به‌دلیل عدم دسترسی به مخزن داده Cassandra ناموفق خواهند بود.

توجه: فقط کاربران «ابر خصوصی Edge» می‌توانند مراحل زیر را انجام دهند. اگر در Edge Public Cloud هستید، با پشتیبانی Apigee Edge تماس بگیرید.

تشخیص

  1. بررسی کنید که آیا گره‌های Cassandra درطول زمان استقرار بازراه‌اندازی شده‌اند یا نه.این کار را می‌توانید با بررسی گزارش Cassandra یا گزارش‌های زمان راه‌اندازی اخیر گره Cassandra انجام دهید:

    ‫grep «shutdown» /opt/apigee/var/log/apigee-cassandra/system.log

وضوح

  1. مطمئن شوید Cassandra روشن و درحال اجرا باشد.
  2. بررسی کنید که آیا «پردازشگرهای پیام» می‌توانند در درگاه‌های ۹۰۴۲ و ۹۱۶۰ به مخزن داده Cassandra متصل شوند یا نه.

افزایش ناگهانی تأخیر در درخواست خواندن در Cassandra

تعداد بالای خواندن در Cassandra به موارد استفاده فردی و الگوهای ترافیک در پراکسی‌هایی که حاوی خط‌مشی‌هایی هستند که نیاز به دسترسی خواندن از Cassandra دارند بستگی دارد.

برای مثال، اگر یک فراخوانی GET برای نوع اعطای refresh_token برای خط‌مشی‌های OAuth فراخوانی شود، و توکن بازآوری با بسیاری از توکن‌های دسترسی مرتبط باشد، این امر ممکن است منجر به تعداد زیادی خواندن از Cassandra شود. این کار می‌تواند باعث افزایش تأخیر درخواست خواندن در Cassandra شود.

تشخیص

توجه: فقط کاربران «ابر خصوصی Edge» می‌توانند مراحل زیر را انجام دهند. اگر در Edge Public Cloud هستید، با پشتیبانی Apigee Edge تماس بگیرید.

  1. اگر داشبورد «پایش نسخه بتا» را نصب کرده‌اید، به داشبورد Cassandra نگاه کنید و نمودار «درخواست‌های خواندن» را برای دوره مشکل بررسی کنید. همچنین نمودار «تأخیرهای درخواست خواندن» را مرور کنید.
  2. ابزار جایگزین برای بررسی درخواست‌های خواندن و تأخیرهای خواندن، فرمان nodetool cfstats است. برای دریافت جزئیات بیشتر درباره استفاده از این فرمان، مستندات Cassandra را ببینید.

وضوح

توجه: فقط کاربران «ابر خصوصی Edge» می‌توانند مراحل زیر را انجام دهند. اگر در Edge Public Cloud هستید، با پشتیبانی Apigee Edge تماس بگیرید.

  1. وقتی عملکرد Cassandra به حالت عادی برگشت، استقرار را دوباره امتحان کنید. مطمئن شوید کل حلقه Cassandra عادی است.
  2. (اختیاری) «پردازنده‌های پیام» را بازراه‌اندازی چرخشی کنید تا مطمئن شوید اتصال برقرار شده است.
  3. برای راه‌حل بلندمدت، الگوهای ترافیک میانای برنامه‌سازی کاربردی را که احتمالاً در خواندن‌های بیشتر در مخزن داده Cassandra نقش دارند بررسی کنید. برای دریافت کمک در عیب‌یابی این مشکل، با پشتیبانی Apigee Edge تماس بگیرید.
  4. اگر گره(های) Cassandra موجود برای مدیریت ترافیک ورودی کافی نیست، ظرفیت سخت‌افزار یا تعداد گره‌های مخزن داده Cassandra را به‌طور مناسب افزایش دهید.

API دسته پراکسی بزرگ‌تر از ۱۵ مگابایت

اندازه دسته‌های پراکسی API در Cassandra به ۱۵ مگابایت محدود شده است. اگر اندازه بسته پراکسی API بزرگ‌تر از ۱۵ مگابایت باشد، هنگام تلاش برای استقرار پراکسی API، پیام «خطا در دسترسی به مخزن داده» را خواهید دید.

تشخیص

توجه: فقط کاربران «ابر خصوصی Edge» می‌توانند مراحل زیر را انجام دهند. اگر در Edge Public Cloud هستید، با پشتیبانی Apigee Edge تماس بگیرید.

  1. گزارش‌های «پردازشگر پیام» (/opt/apigee/var/log/edge-message-processor/logs/system.log) را بررسی کنید و ببینید آیا خطایی درطول استقرار «پراکسی API» خاص رخ داده است یا نه.
  2. اگر خطایی مشابه آنچه در شکل زیر نشان داده شده است مشاهده کردید، خطای استقرار به این دلیل است که اندازه بسته پراکسی API بیشتر از ۱۵ مگابایت است.
    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 بزرگ خواهد بود. برای رفع این مشکل، از راه‌حل‌های زیر استفاده کنید:

راه‌حل شماره ۱: انتقال فایل‌های منبع به سطح «محیط» یا «سازمان»

  1. هریک از فایل‌های منبع، مثل فایل‌های «دستورگان NodeJS» و واحدها، فایل‌های «جاوا اسکریپت»، فایل‌های JAR را به سطح محیط یا سازمان منتقل کنید. برای کسب اطلاعات بیشتر درباره فایل‌های منبع، اسناد Edge را ببینید.
  2. کارگزاری API را مستقر کنید و ببینید آیا خطا برطرف می‌شود یا نه.

اگر مشکل همچنان ادامه داشت یا به هر دلیلی نمی‌توانید فایل‌های منبع را به سطح محیط یا سازمان منتقل کنید، راه‌حل شماره ۲ را اعمال کنید.

راه‌حل شماره ۲: افزایش اندازه بسته پراکسی API در Cassandra

توجه: فقط کاربران «ابر خصوصی Edge» می‌توانند مراحل زیر را انجام دهند. اگر در Edge Public Cloud هستید، با پشتیبانی Apigee Edge تماس بگیرید.

برای افزایش اندازه دارایی Cassandra thrift frame transport size که حداکثر اندازه دسته پراکسی 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. مراحل ۱ تا ۳ را در همه گره‌های Cassandra در خوشه تکرار کنید.

اگر مشکل برطرف نشد، با پشتیبانی Apigee Edge تماس بگیرید.