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

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

علامت

پیاده‌سازی نسخه‌های پروکسی API از طریق رابط کاربری Edge یا فراخوانی API مدیریت 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. علت جزئیات برای
    مشکل اتصال شبکه بین پردازشگر پیام و کاساندرا قطع ارتباط بین پردازشگر پیام و کاساندرا به دلیل مشکلات اتصال شبکه یا قوانین فایروال. کاربران فضای ابری خصوصی اج
    خطاهای استقرار ناشی از راه‌اندازی مجدد کاساندرا گره(های) کاساندرا به دلیل راه‌اندازی مجدد به عنوان بخشی از عملیات نگهداری روتین، از دسترس خارج شدند. کاربران فضای ابری خصوصی اج
    افزایش ناگهانی تأخیر درخواست خواندن در کاساندرا اگر گره (گره‌های) کاساندرا تعداد زیادی خواندن همزمان انجام دهند، ممکن است به دلیل افزایش ناگهانی تأخیر در درخواست خواندن، به کندی پاسخ دهند. کاربران فضای ابری خصوصی اج
    بسته پروکسی API بزرگتر از ۱۵ مگابایت کاساندرا طوری پیکربندی شده است که اجازه نمی‌دهد بسته‌های پروکسی API بزرگتر از ۱۵ مگابایت باشند. کاربران فضای ابری خصوصی اج

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

    تشخیص

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

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

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

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

وضوح تصویر

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

خطاهای استقرار ناشی از راه‌اندازی مجدد کاساندرا

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

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

تشخیص

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

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

وضوح تصویر

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

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

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

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

تشخیص

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

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

وضوح تصویر

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

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

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

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

تشخیص

توجه: فقط کاربران 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 proxy زیاد خواهد شد. برای حل این مشکل از راه‌حل‌های زیر استفاده کنید:

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

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

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

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

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

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

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