Terjadi Error Saat Mengakses Datastore

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

ini.

Gejala

Deployment revisi proxy API melalui UI Edge atau panggilan API pengelolaan Edge gagal dengan kesalahan "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 jaringan masalah konektivitas atau aturan {i>firewall<i}. Pengguna Edge Private Cloud
    Error deployment karena Cassandra memulai ulang Node Cassandra tidak tersedia karena dimulai ulang sebagai bagian dari rutinitas dan pemeliharaan mesin. Pengguna Edge Private Cloud
    Lonjakan latensi permintaan baca di Cassandra Jika node Cassandra melakukan sejumlah besar pembacaan serentak, dapat merespons lebih lambat karena lonjakan latensi permintaan baca. Pengguna Edge Private Cloud
    Paket Proxy API yang lebih besar dari 15 MB Cassandra telah dikonfigurasi untuk tidak mengizinkan paket proxy API yang berukuran lebih dari 15 MB di ukuran. Pengguna Edge Private Cloud

    Masalah Konektivitas Jaringan antara Pesan Prosesor 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 {i>Message Processor<i} dan Cassandra, maka {i>error<i} tersebut akan hilang.

      PERINGATAN: Jangan membatalkan deployment jika terlihat error dalam Produksi lingkungan fleksibel App Engine.

    2. Jika masalah berlanjut, jalankan panggilan AP pengelolaan di bawah untuk memeriksa status deployment, dan periksa apakah ada error pada komponen:
      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 satu platform 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 Pemroses Pesan yang menampilkan error deployment. Jika ada masalah jaringan sementara, error 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 sudah dimulai ulang. Jika tidak ditemukan error, berarti masalah telah diselesaikan.
    5. Memeriksa 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 menerima respons "Koneksi Ditolak" atau "Waktu koneksi habis", lalu lakukan interaksi tim operasi jaringan Anda.
    6. Jika masalah berlanjut, periksa apakah setiap {i>node<i} Cassandra mendengarkan di port 9042 dan port 9160:
      netstat -an | grep LISTEN | grep 9042
      netstat -an | grep LISTEN | grep 9160
    7. Jika node Cassandra tidak menerima port 9042 atau 9160, mulai ulang {i>node<i} Cassandra spesifik:
      /opt/apigee/apigee-service/bin/apigee-service apigee-cassandra restart
    8. Jika masalah masih berlanjut, libatkan tim operasi jaringan Anda.

Resolusi

Bekerjasamalah dengan tim operasi jaringan Anda dan atasi 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 API di-deploy selama proses pemeliharaan Cassandra, aksesibilitas ke {i>datastore<i} Cassandra.

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

Diagnosis

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

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

Resolusi

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

Lonjakan latensi permintaan baca di Cassandra

Jumlah operasi baca yang tinggi di Cassandra bergantung pada kasus penggunaan individual dan pola traffic 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, maka ini dapat menghasilkan 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 berada di Edge Public Cloud, hubungi Dukungan Apigee Edge.

  1. Jika Anda telah menginstal dasbor Beta Monitoring, lihat dasbor Cassandra, dan meninjau "Permintaan Baca" diagram periode permasalahan. Tinjau juga diagram untuk "Baca Latensi Permintaan".
  2. Alat alternatif untuk memeriksa permintaan baca dan latensi baca adalah perintah nodetool cfstats. Lihat Cassandra untuk mendapatkan detail selengkapnya tentang cara menggunakan perintah ini.

Resolusi

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

  1. Coba deployment lagi setelah performa Cassandra kembali normal. Pastikan seluruh Cincin Cassandra normal.
  2. (Opsional) Lakukan mulai ulang berkelanjutan pada Pemroses Pesan untuk memastikan konektivitas tersedia mapan.
  3. Untuk solusi jangka panjang, tinjau pola traffic API yang mungkin akan berkontribusi ke 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, meningkatkan kapasitas perangkat keras atau jumlah {i>node<i} {i>datastore Cassandra<i} dengan tepat.

API Paket Proxy lebih besar dari 15 MB

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

Diagnosis

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

  1. Memeriksa log Pemroses Pesan (/opt/apigee/var/log/edge-message-processor/logs/system.log) dan lihat apakah ada yang terjadi selama deployment Proxy API tertentu.
  2. Jika Anda melihat error yang mirip dengan yang ditampilkan dalam gambar di bawah ini, berarti error deployment karena ukuran paket proxy API adalah > 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 untuk mengatasi masalah ini:

Solusi #1: Pindahkan file resource ke tingkat Lingkungan atau Organisasi

  1. Pindahkan file resource mana pun, seperti file dan modul NodeJS Script, file JavaScript, File JAR ke tingkat lingkungan atau organisasi. Untuk informasi selengkapnya tentang file resource, lihat dokumentasi Edge.
  2. Deploy proxy API dan lihat apakah error sudah hilang.

Jika masalah berlanjut atau Anda tidak dapat memindahkan file resource ke lingkungan atau organisasi tingkat karena alasan tertentu, kemudian 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 berada di Edge Public Cloud, hubungi Dukungan Apigee Edge.

Ikuti langkah-langkah berikut untuk meningkatkan ukuran kerangka hemat properti Cassandra ukuran transpor, yang mengontrol ukuran maksimum paket proxy API yang diizinkan di Tepi:

  1. Buat file berikut, jika tidak ada:
    /opt/apigee/customer/application/cassandra.properties
  2. Tambahkan baris berikut ke file, dengan mengganti <size> dengan pengaturan 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 sampai #3 pada semua node Cassandra di cluster.

Jika masalah berlanjut, hubungi Dukungan Apigee Edge.