Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Tidak ada dokumentasi
Apigee Edge yang setara untuk topik ini.
Gejala
Selama pemulihan Cassandra di Apigee Hybrid, Anda mungkin mengalami error di log pemulihan.
Pesan error
Anda melihat salah satu hal berikut di log:
java.net.ConnectException: Connection timed out (Connection timed out)
/tmp/tmp/schema.cql:662:OperationTimedOut: errors={'10.0.0.1': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=10.0.0.1
/tmp/tmp/schema.cql:6409:AlreadyExists: Table 'kvm_myorg.kvm_map_keys_descriptor' already exists
Kemungkinan penyebab
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Waktu koneksi habis |
Error ini adalah error konektivitas antara
pod apigee-cassandra-restore dan
pod apigee-cassandra-default-*.
|
Apigee hybrid |
| Waktu operasi habis | Error ini terjadi jika pemulihan kehabisan waktu setelah lebih dari 15 menit. | Apigee hybrid |
| Sudah ada | Pesan error ini tidak terkait dengan penyebab masalah dan merupakan hasil operasi coba lagi dari tugas pemulihan. | Apigee hybrid |
Penyebab: Waktu tunggu koneksi habis
Error berikut adalah error konektivitas antara
pod apigee-cassandra-restore dan
pod apigee-cassandra-default-*:
java.net.ConnectException: Connection timed out (Connection timed out)
Diagnosis
-
Jika jaringan host Anda tidak dapat dijangkau dari jaringan pod, pastikan
hostNetworkdisetel kefalsedi bagiancassandradalamoverrides.yamlseperti yang ditunjukkan di Memulihkan region dari cadangan. -
Untuk menguji konektivitas, login ke pod
apigee-martatauapigee-runtime, yang berada di jaringan yang sama dengan tugasapigee-cassandra-restore. Anda juga dapat menggunakan pod lain di jaringan pod.-
Mendapatkan nama pod
apigee-mart:kubectl -n apigee get po --selector=app=apigee-mart --no-headers -o custom-columns=":metadata.name"
-
Jalankan sesi bash di dalam pod mart:
kubectl exec -it MART_POD_NAME -n apigee -- bash
Ganti MART_POD_NAME dengan nama pod MART. Contoh,
apigee-mart-myorg--9a8228a-191-t0xh1-qz5fl. -
Jalankan uji konektivitas terhadap
port Cassandra:
curl -v -m 5 telnet://apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local:9042
curl -v -m 5 telnet://apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local:7001
Jika Anda mendapatkan error
Connection timed outdi output, artinya Anda mengalami masalah konektivitas. Namun, jika Anda melihat pesanConnected to, hal itu menunjukkan bahwa koneksi berhasil, dan Anda perlu menekan Ctrl + C untuk menutup koneksi dan melanjutkan. -
Mendapatkan nama pod
Resolusi
Pastikan setelan HostNetwork disetel ke
false dalam file overrides.yaml yang digunakan untuk pemulihan,
dan
ulangi proses pemulihan. Jika setelan sudah ditetapkan ke
false, tetapi Anda melihat error konektivitas, pastikan pod
Cassandra sudah aktif dan berjalan dengan perintah berikut:
kubectl get pods -n apigee -l app=apigee-cassandra
Output Anda akan terlihat seperti contoh berikut:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 14m apigee-cassandra-default-1 1/1 Running 0 13m apigee-cassandra-default-2 1/1 Running 0 11m exampleuser@example hybrid-files %
Penyebab: Waktu operasi habis
Error berikut terjadi jika pemulihan kehabisan waktu setelah lebih dari 15 menit. Error ini menunjukkan masalah I/O seperti penyimpanan dan jaringan yang tidak dapat mengirimkan konten cadangan yang tidak dikompresi tepat waktu.
/tmp/tmp/schema.cql:662:OperationTimedOut: errors={'10.0.0.1': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=10.0.0.1
Diagnosis
-
Periksa log
apigee-cassandra-default-0untuk mencatat stempel waktu awal pemulihan:kubectl logs apigee-cassandra-default-0 -n apigee | grep 'MigrationManager.java' | head -n 1
-
Bandingkan stempel waktu dengan log pembuatan tabel terbaru:
kubectl logs apigee-cassandra-default-0 -n apigee | grep 'Create new table' | tail -n 1
Hasil dari perbandingan ini akan menunjukkan bahwa pod Cassandra masih dalam proses membuat tabel setelah waktu tunggu habis.
-
Uji bandwidth penyimpanan dengan perintah berikut:
kubectl -n apigee exec -it apigee-cassandra-default-0 -- bash -c 'dd if=/dev/zero of=/opt/apigee/data/test.img bs=200M count=1 ; rm /opt/apigee/data/test.img'
kubectl -n apigee exec -it apigee-cassandra-default-1 -- bash -c 'dd if=/dev/zero of=/opt/apigee/data/test.img bs=200M count=1 ; rm /opt/apigee/data/test.img'
kubectl -n apigee exec -it apigee-cassandra-default-2 -- bash -c 'dd if=/dev/zero of=/opt/apigee/data/test.img bs=200M count=1 ; rm /opt/apigee/data/test.img'
Jika kecepatan penulisan kurang dari 100 M/s, hal ini dapat menunjukkan kurangnya StorageClass (SSD) yang sesuai yang digunakan.
-
Uji bandwidth jaringan:
-
Jalankan
netcatdi pod Cassandra untuk memproses port:kubectl -n apigee exec -it apigee-cassandra-default-0 -- bash -c 'nc -l -p 3456 > /dev/null'
-
Dalam sesi shell terpisah, dapatkan nama pod
apigee-mart:kubectl -n apigee get po --selector=app=apigee-mart --no-headers -o custom-columns=":metadata.name"
-
Jalankan sesi bash di dalam pod
apigee-mart. Anda juga dapat menggunakan pod lain dalam jaringan pod:kubectl exec -it MART_POD_NAME -n apigee -- bash
Ganti MART_POD_NAME dengan nama pod MART. Contoh,
apigee-mart-myorg--9a8228a-191-t0xh1-qz5fl. -
Jalankan uji bandwidth jaringan terhadap pod Cassandra yang masih menjalankan
netcat:dd if=/dev/zero bs=50M count=1 | nc apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local 3456
Anda dapat mengulangi proses untuk pod Cassandra lainnya. Jika kecepatan yang dihasilkan kurang dari 10 MB/dtk, kemungkinan besar bandwidth jaringan menjadi penyebab masalah ini.
-
Resolusi
Setelah kecepatan I/O yang lambat dikonfirmasi dengan langkah-langkah di atas, pastikan cluster Anda mematuhi persyaratan jaringan dan penyimpanan minimum. Uji bandwidth lagi setelahnya.
Penyebab: Sudah ada
Diagnosis
Anda akan melihat error yang mirip dengan berikut ini:
/tmp/tmp/schema.cql:6409:AlreadyExists: Table 'kvm_myorg.kvm_map_keys_descriptor' already exists
Resolusi
Pesan error ini tidak terkait dengan penyebab masalah dan merupakan hasil dari operasi coba lagi tugas pemulihan. Pesan error sebenarnya akan ditampilkan di log pod pertama yang gagal.
Dapatkan log dari kegagalan awal untuk mendiagnosis masalah.
Jika masalah masih berlanjut, buka Informasi diagnostik yang harus dikumpulkan.
Solusi untuk Masalah Umum 391861216
Diagnosis
Pod Cassandra dengan nomor tertinggi berada dalam status CrashLoopBackoff setelah pemulihan.
Hal ini dapat terjadi karena masalah umum 391861216.
Anda akan melihat error di log pod Cassandra yang mirip dengan berikut ini:
Cannot change the number of tokens from 512 to 256
Resolusi
Lakukan langkah-langkah berikut untuk mengatasi masalah yang mendasarinya. Hal ini akan memungkinkan Cassandra dimulai secara normal sambil mempertahankan data.
-
Mulai penghapusan PVC untuk pod Cassandra yang macet dalam status
CrashLoopBackoff. Tetapkan POD_NAME ke nama pod dalam statusCrashLoopBackoff. Tetapkan APIGEE_NAMESPACE ke namespace cluster tempat Apigee diinstal.kubectl delete pvc cassandra-data-POD_NAME -n APIGEE_NAMESPACE --wait=false
-
Hapus pod dalam status
CrashLoopBackoff.kubectl delete pod POD_NAME -n APIGEE_NAMESPACE
-
Ubah host awal untuk Cassandra secara manual ke pod bernomor tertinggi. Misalnya, jika Anda memiliki tiga replika, SEED_POD_NAME harus
apigee-cassandra-default-2. Tindakan ini hanya diperlukan satu kali dan dapat dilewati untuk pod berikutnya.kubectl patch apigeeds/default -n APIGEE_NAMESPACE --type='merge' -p '{"spec": {"components": {"cassandra": {"properties": {"externalSeedHost":"SEED_POD_NAME.apigee-cassandra-default.APIGEE_NAMESPACE.svc.cluster.local"}}}}}' -
Hapus node dengan 512 token dari ring Cassandra.
kubectl exec -n APIGEE_NAMESPACE -t sts/apigee-cassandra-default -c apigee-cassandra -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status' | awk '/^DN .*\?.* 512 / {print $6; exit}; /^DN .* [KMG]iB.* 512 / {print $7; exit}' | xargs -I {} kubectl exec -n APIGEE_NAMESPACE -t sts/apigee-cassandra-default -c apigee-cassandra -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode {}' -
Tunggu hingga pod Cassandra pulih, mulai ulang mungkin lebih dari sekali, dan mencapai status
Ready2/2. Pod tertinggi berikutnya kemudian akan masuk ke statusCrashLoopBackoff.kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-cassandra -w
-
Perbarui POD_NAME dan ulangi langkah-langkah sebelumnya di atas untuk pod yang tersisa, satu per satu, saat pod tersebut memasuki status
CrashLoopBackoffhingga semua pod berada dalam statusReady2/2dan memiliki statusRunning. -
Pastikan semua pod telah berhasil bergabung dengan ring Cassandra.
kubectl exec -n APIGEE_NAMESPACE -t sts/apigee-cassandra-default -c apigee-cassandra -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status'
Semua node Cassandra harus memiliki status
UNdan 256 token. -
Kembalikan perubahan ke host awal untuk Cassandra.
kubectl patch apigeeds/default -n APIGEE_NAMESPACE --type='merge' -p '{"spec": {"components": {"cassandra": {"properties": {"externalSeedHost":""}}}}}'Pengontrol Apigee Datastore akan memulai ulang pod Cassandra lagi saat mengembalikan perubahan host awal.
Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Layanan Pelanggan Google Cloud:
-
Selain data biasa yang mungkin diminta untuk Anda berikan, kumpulkan data diagnostik dari semua pod Cassandra dengan perintah berikut:
for p in $(kubectl -n apigee get pods -l app=apigee-cassandra --no-headers -o custom-columns=":metadata.name") ; do \ for com in info describecluster failuredetector version status ring info gossipinfo compactionstats tpstats netstats cfstats proxyhistograms gcstats ; do kubectl \ -n apigee exec ${p} -- bash -c 'nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD '"$com"' 2>&1 '\ | tee /tmp/k_cassandra_nodetool_${com}_${p}_$(date +%Y.%m.%d_%H.%M.%S).txt | head -n 40 ; echo '...' ; done; done -
Kompres, lalu berikan dalam kasus dukungan:
tar -cvzf /tmp/cassandra_data_$(date +%Y.%m.%d_%H.%M.%S).tar.gz /tmp/k_cassandra_nodetool*
- Kumpulkan dan berikan log dari pod pemulihan. Perhatikan bahwa log bersifat sementara, jadi log harus dikumpulkan tepat setelah kegagalan.
- Jika Anda telah mengikuti langkah-langkah diagnosis di atas, kumpulkan semua output konsol, salin ke dalam file, dan lampirkan file tersebut ke kasus dukungan.