خطا در دسترسی به Datastore

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

علامت

استقرار ویرایش‌های پراکسی API از طریق تماس Edge UI یا مدیریت 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. علت جزئیات برای
    مشکل اتصال شبکه بین پردازشگر پیام و کاساندرا ارتباط بین پردازشگر پیام و کاساندرا به دلیل مشکلات اتصال به شبکه یا قوانین فایروال خراب شد. کاربران Edge Private Cloud
    خطاهای استقرار به دلیل راه اندازی مجدد کاساندرا گره(های) کاساندرا در دسترس نبود زیرا به عنوان بخشی از تعمیر و نگهداری روتین راه اندازی مجدد شد. کاربران Edge Private Cloud
    افزایش تاخیر درخواست خواندن در Cassandra اگر گره(های) کاساندرا تعداد زیادی خواندن همزمان انجام دهد، ممکن است به دلیل افزایش تاخیر در درخواست خواندن، به کندی پاسخ دهد. کاربران Edge Private Cloud
    API Proxy Bundle بزرگتر از 15 مگابایت Cassandra به گونه ای پیکربندی شده است که به بسته های پراکسی API با اندازه بزرگتر از 15 مگابایت اجازه نمی دهد. کاربران Edge Private Cloud

    مشکل اتصال شبکه بین پردازشگر پیام و کاساندرا

    تشخیص

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

    1. پراکسی API را Undeploy و مجدداً مستقر کنید. اگر مشکل اتصال موقت بین پردازشگر پیام و کاساندرا وجود داشته باشد، ممکن است خطا برطرف شود.

      اخطار: در صورت مشاهده خطاها در محیط تولید، از راه اندازی مجدد خودداری کنید.

    2. اگر مشکل ادامه داشت، برای بررسی وضعیت استقرار و بررسی وجود هرگونه خطا در هر یک از اجزا، فراخوانی AP مدیریت زیر را اجرا کنید:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments

      نمونه خروجی وضعیت استقرار نشان دادن خطا در حین دسترسی به 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 استفاده کنید:
        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. اگر گره های کاساندرا به پورت 9042 یا 9160 گوش نمی دهند، گره(های) خاص کاساندرا را مجددا راه اندازی کنید:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
    8. اگر مشکل ادامه داشت، تیم عملیات شبکه خود را درگیر کنید.

قطعنامه

با تیم عملیات شبکه خود کار کنید و مشکل اتصال شبکه بین Message Processor و Cassandra را برطرف کنید.

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

گره‌های کاساندرا معمولاً به‌عنوان بخشی از تعمیر و نگهداری معمول به‌صورت دوره‌ای مجدداً راه‌اندازی می‌شوند. اگر پراکسی های 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 به موارد استفاده فردی و الگوهای ترافیک در پراکسی‌هایی که حاوی خط‌مشی‌هایی هستند که نیاز به دسترسی خواندن از Cassandra دارند، بستگی دارد.

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

تشخیص

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

  1. اگر داشبورد مانیتورینگ بتا را نصب کرده‌اید، به داشبورد کاساندرا نگاه کنید و نمودار "درخواست‌های خواندن" را برای دوره مشکل بررسی کنید. همچنین نمودار "Read Request Latencies" را بررسی کنید.
  2. ابزار جایگزین برای بررسی درخواست های خواندن و تأخیر خواندن دستور nodetool cfstats است. برای دریافت جزئیات بیشتر برای استفاده از این دستور به مستندات Cassandra مراجعه کنید.

قطعنامه

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

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

API Proxy Bundle بزرگتر از 15 مگابایت

اندازه بسته‌های پراکسی API در Cassandra به 15 مگابایت محدود شده است. اگر اندازه بسته پروکسی API بیشتر از 15 مگابایت باشد، هنگام تلاش برای استقرار پراکسی API، "خطا هنگام دسترسی به datastore" را مشاهده خواهید کرد.

تشخیص

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

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

قطعنامه

اگر فایل‌های منبع بیش از حد وجود داشته باشد، بسته پروکسی API بزرگ خواهد بود. برای رفع این مشکل از راه حل های زیر استفاده کنید:

راه حل شماره 1: فایل های منبع را به سطح محیط یا سازمان منتقل کنید

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

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

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

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

این مراحل را برای افزایش اندازه اندازه حمل و نقل قاب صرفه‌جویی ویژگی Cassandra دنبال کنید، که حداکثر اندازه بسته پروکسی API مجاز در Edge را کنترل می‌کند:

  1. در صورت نبود فایل زیر را ایجاد کنید:
    /opt/apigee/customer/application/cassandra.properties
  2. خط زیر را به فایل اضافه کنید و <size> را با تنظیم اندازه مورد نیاز برای بسته بزرگ جایگزین کنید:
    conf_cassandra_thrift_framed_transport_size_in_mb=<size>
  3. کاساندرا را دوباره راه اندازی کنید:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  4. مراحل #1 تا #3 را در تمام گره های Cassandra در خوشه تکرار کنید.

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