Terjadi Error Saat Mengakses Datastore

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Gejala

Deployment revisi proxy API melalui UI Edge atau panggilan API pengelolaan Edge gagal dengan error "Error while accessing datastore".

Pesan Error

Error in deployment for environment qa.

The revision is deployed, but traffic cannot flow. Error while accessing datastore;Please retry later

Kemungkinan Penyebab

Penyebab umum untuk masalah ini adalah:

  1. Cause Detail Untuk
    Masalah Konektivitas Jaringan antara Pemroses Pesan dan Cassandra Kegagalan komunikasi antara Pemroses Pesan dan Cassandra karena masalah konektivitas jaringan atau aturan firewall. Pengguna Edge Private Cloud
    Error deployment karena Cassandra dimulai ulang Node Cassandra tidak tersedia karena dimulai ulang sebagai bagian dari pemeliharaan rutin. Pengguna Edge Private Cloud
    Lonjakan dalam latensi permintaan baca di Cassandra Jika node Cassandra melakukan pembacaan serentak dalam jumlah besar, node Cassandra mungkin merespons dengan lambat karena lonjakan latensi permintaan baca. Pengguna Edge Private Cloud
    Paket Proxy API dengan ukuran lebih besar dari 15 MB Cassandra telah dikonfigurasi untuk tidak mengizinkan paket proxy API yang berukuran lebih dari 15 MB. Pengguna Edge Private Cloud

    Masalah Konektivitas Jaringan antara Pemroses Pesan dan Cassandra

    Diagnosis

    Catatan: Hanya pengguna Edge Private Cloud yang dapat melakukan langkah-langkah berikut. Jika Anda menggunakan Edge Public Cloud, hubungi Dukungan Apigee Edge.

    1. Batalkan deployment dan deploy ulang proxy API. Jika ada masalah konektivitas sementara antara Pemroses Pesan dan Cassandra, error tersebut mungkin akan hilang.

      PERINGATAN: Jangan membatalkan deployment jika error terlihat di lingkungan Produksi.

    2. Jika masalah berlanjut, jalankan panggilan AP pengelolaan di bawah ini untuk memeriksa status deployment dan memeriksa apakah ada error pada komponen apa pun:
      curl -u sysadmin@email.com https://management:8080/v1/o/<org>/apis/<api>/deployments
      

      Contoh output status deployment yang menunjukkan Error saat mengakses datastore di salah satu Pemroses Pesan

      {
      "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. Mulai ulang Prosesor Pesan yang menampilkan error deployment. Jika ada masalah jaringan sementara, error tersebut akan hilang:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
      
    4. Ulangi langkah #2 untuk melihat apakah deployment berhasil pada Pemroses Pesan yang dimulai ulang. Jika tidak ditemukan error, berarti masalah telah diselesaikan.
    5. Periksa apakah pemroses pesan dapat terhubung ke setiap node Cassandra pada port 9042 dan 9160:
      1. Jika telnet tersedia, gunakan telnet:
        telnet <Cassandra_IP> 9042
        telnet <Cassandra_IP> 9160
        
      2. Jika telnet tidak tersedia, gunakan netcat untuk memeriksa konektivitas sebagai berikut:
        nc -vz <Cassandra_IP> 9042
        nc -vz <Cassandra_IP> 9160
        
      3. Jika Anda mendapatkan respons "Koneksi Ditolak" atau "Waktu koneksi habis", libatkan tim operasi jaringan Anda.
    6. Jika masalah berlanjut, periksa apakah setiap node Cassandra memproses port 9042 dan port 9160:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
      
    7. Jika node Cassandra tidak memproses port 9042 atau 9160, mulai ulang node Cassandra tertentu:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
      
    8. Jika masalah masih berlanjut, hubungi tim operasi jaringan Anda.

Resolusi

Hubungi tim operasi jaringan Anda dan selesaikan masalah konektivitas jaringan antara Message Processor dan Cassandra.

Error deployment karena Cassandra dimulai ulang

Node Cassandra biasanya dimulai ulang secara berkala sebagai bagian dari pemeliharaan rutin. Jika proxy API di-deploy selama pekerjaan pemeliharaan Cassandra, deployment akan gagal karena tidak dapat diaksesnya datastore Cassandra.

Catatan: Hanya pengguna Edge Private Cloud yang dapat melakukan langkah-langkah berikut. Jika Anda menggunakan Edge Public Cloud, hubungi Dukungan Apigee Edge.

Diagnosis

  1. Periksa apakah node Cassandra dimulai ulang selama waktu deployment.Hal ini dapat dilakukan dengan memeriksa log Cassandra atau log waktu startup terbaru node Cassandra:

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

Resolusi

  1. Pastikan Cassandra aktif dan berjalan.
  2. Periksa apakah Prosesor Pesan dapat terhubung ke datastore Cassandra pada port 9042 dan 9160.

Lonjakan pada latensi permintaan baca di Cassandra

Jumlah pembacaan yang tinggi di Cassandra bergantung pada kasus penggunaan dan pola traffic masing-masing pada proxy yang berisi kebijakan yang memerlukan akses baca dari Cassandra.

Misalnya, jika panggilan GET ke jenis pemberian refresh_token dipanggil untuk kebijakan OAuth, dan token refresh dikaitkan dengan banyak token akses, hal ini dapat mengakibatkan jumlah pembacaan yang tinggi dari Cassandra. Hal ini dapat menyebabkan peningkatan latensi permintaan baca di Cassandra.

Diagnosis

Catatan: Hanya pengguna Edge Private Cloud yang dapat melakukan langkah-langkah berikut. Jika Anda menggunakan Edge Public Cloud, hubungi Dukungan Apigee Edge.

  1. Jika Anda telah menginstal dasbor Monitoring Beta, lihat dasbor Cassandra, dan tinjau diagram "Baca Permintaan" untuk periode masalah. Tinjau juga diagram untuk "Membaca Permintaan Latensi".
  2. Alat alternatif untuk memeriksa permintaan baca dan latensi baca adalah perintah nodetool cfstats. Lihat dokumentasi Casssandra untuk mendapatkan detail selengkapnya tentang penggunaan perintah ini.

Resolusi

Catatan: Hanya pengguna Edge Private Cloud yang dapat melakukan langkah-langkah berikut. Jika Anda menggunakan Edge Public Cloud, hubungi Dukungan Apigee Edge.

  1. Coba deployment lagi setelah performa Cassandra kembali normal. Pastikan seluruh cincin Cassandra normal.
  2. (Opsional) Mulai ulang secara bergantian pada Pemroses Pesan untuk memastikan konektivitas tersambung.
  3. Untuk solusi jangka panjang, tinjau pola traffic API yang mungkin akan berkontribusi pada pembacaan yang lebih tinggi di datastore Cassandra. Hubungi Dukungan Apigee Edge untuk mendapatkan bantuan dalam memecahkan masalah ini.
  4. Jika node Cassandra yang ada tidak memadai untuk menangani traffic masuk, tingkatkan kapasitas hardware atau jumlah node datastore Cassandra dengan tepat.

Paket Proxy API yang lebih besar dari 15 MB

Ukuran paket proxy API dibatasi hingga 15 MB di Cassandra. Jika ukuran paket proxy API lebih besar dari 15 MB, Anda akan melihat "Error saat mengakses datastore" saat mencoba men-deploy proxy API.

Diagnosis

Catatan: Hanya pengguna Edge Private Cloud yang dapat melakukan langkah-langkah berikut. Jika Anda menggunakan Edge Public Cloud, hubungi Dukungan Apigee Edge.

  1. Periksa log Pemroses Pesan (/opt/apigee/var/log/edge-message-processor/logs/system.log) dan lihat apakah terjadi error selama deployment Proxy API tertentu.
  2. Jika Anda melihat error yang mirip dengan yang ditampilkan pada gambar di bawah, berarti error deployment tersebut karena ukuran paket proxy API lebih besar dari 15 MB.
    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>
    

Resolusi

Paket proxy API akan berukuran besar jika ada terlalu banyak file resource. Gunakan solusi berikut untuk mengatasi masalah ini:

Solusi #1: Memindahkan file resource ke level Lingkungan atau Organisasi

  1. Pindahkan salah satu file resource, seperti file dan modul NodeJS Script, file JavaScript, serta file JAR ke level lingkungan atau organisasi. Untuk mengetahui informasi selengkapnya tentang file resource, lihat dokumentasi Edge.
  2. Deploy proxy API dan lihat apakah error tersebut hilang.

Jika masalah terus berlanjut atau Anda tidak dapat memindahkan file resource ke tingkat lingkungan atau organisasi karena alasan tertentu, terapkan solusi #2.

Solusi #2: Tingkatkan ukuran paket proxy API di Cassandra

Catatan: Hanya pengguna Edge Private Cloud yang dapat melakukan langkah-langkah berikut. Jika Anda menggunakan Edge Public Cloud, hubungi Dukungan Apigee Edge.

Ikuti langkah-langkah berikut untuk meningkatkan ukuran ukuran transportasi frame hemat properti Cassandra, yang mengontrol ukuran maksimum paket proxy API yang diizinkan di Edge:

  1. Buat file berikut, jika belum ada:
    /opt/apigee/customer/application/cassandra.properties
    
  2. Tambahkan baris berikut ke file, dengan mengganti <size> dengan setelan ukuran yang diperlukan untuk paket besar:
    conf_cassandra_thrift_framed_transport_size_in_mb=<size>
    
  3. Mulai ulang Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    
  4. Ulangi langkah #1 hingga #3 pada semua node Cassandra di cluster.

Jika masalah berlanjut, hubungi Dukungan Apigee Edge.