Gejala
Pod Cassandra dapat memasuki status CrashLoopBackOff
saat menginstal atau mengupgrade Apigee Hybrid.
Pesan error
Output kubectl get pods
saat dijalankan di namespace apigee
menampilkan satu atau beberapa pod Cassandra dalam status CrashLoopBackOff
:
kubectl get pods -n apigee
NAME READY STATUS RESTARTS AGE
apigee-cassandra-default-0 0/1 CrashLoopBackoff 0 9m
Kemungkinan penyebab
Pod Cassandra dapat memasuki status CrashLoopBackOff
karena berbagai alasan.
Penyebab | Deskripsi |
---|---|
Resolusi nama host gagal | UnknownHostException yang ditampilkan untuk resolusi DNS |
Gambar Salah | URL gambar salah yang digunakan di overrides.yaml |
Masalah ekspansi | Masalah konektivitas ke host seed Cassandra |
Konflik port | Port 7000 atau 7001 sudah digunakan |
Alamat IP yang Sama | Node dengan alamat /10.10.x.x sudah ada |
Penyebab 1: Resolusi nama host gagal
Resolusi nama host untuk node Cassandra gagal karena masalah konfigurasi DNS di cluster. Log pod Cassandra mungkin menampilkan entri log yang serupa:
ERROR [main] 2025-01-12 13:23:34,569 CassandraDaemon.java:803 - Local host name unknown: java.net.UnknownHostException: ip-xx-xx-xx-xx.example.com: ip-xx-xx-xx-xx.example.com: Name or service not known
Resolusi
Node pekerja tempat pod Cassandra dijadwalkan untuk muncul harus dapat me-resolve nama host ke alamat IP yang valid melalui layanan DNS cluster. Sebagai solusi sementara, Anda dapat menjalankan perintah berikut di semua node pekerja:
echo -e "\\n127.0.1.1 ${HOSTNAME}" >> "/etc/hosts"
Penyebab 2: Gambar Salah
Gambar Cassandra yang salah digunakan.
Diagnosis
Periksa file overrides.yaml
untuk memastikan gambar yang benar dikonfigurasi untuk Cassandra. Berikut adalah contoh stanza di overrides.yaml
dengan image Cassandra yang benar.
cassandra: image: url: "gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra" tag: "1.15.0" pullPolicy: IfNotPresent
Resolusi
Pastikan versi dan nama image Cassandra akurat dalam file overrides.yaml
, lalu coba lagi perintah penginstalan atau upgrade. Anda dapat menggunakan opsi List di skrip apigee-pull-push
untuk mencantumkan semua gambar di repo Anda. Kemudian, Anda dapat meninjau gambar tersebut untuk memastikan bahwa semuanya adalah gambar dari versi Hybrid yang dimaksud.
Penyebab 3: Masalah ekspansi
Pod Cassandra mungkin tidak dapat terhubung ke node Seed saat diperluas ke wilayah baru.
Diagnosis
- Log pod Cassandra mungkin menampilkan entri log yang serupa seperti dalam contoh berikut:
INFO [main] 2024-07-28 05:25:15,662 GossipingPropertyFileSnitch.java:68 - Unable to load cassandra-topology.properties; compatibility mode disabled The seed provider lists no seeds. WARN [main] 2024-07-28 05:25:15,703 SimpleSeedProvider.java:60 - Seed provider couldn't lookup host apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local Exception (org.apache.cassandra.exceptions.ConfigurationException) encountered during startup: The seed provider lists no seeds. ERROR [main] 2024-07-28 05:25:15,703 CassandraDaemon.java:803 - Exception encountered during startup: The seed provider lists no seeds. INFO [ScheduledTasks:1] 2024-07-28 05:25:15,833 StorageService.java:136 - Overriding RING_DELAY to 30000ms
- Periksa konektivitas antara node yang saat ini gagal dan node awal.
- Identifikasi node awal yang dikonfigurasi di
overrides.yaml
untuk region baru. Node awal dikonfigurasi dioverrides.yaml
pada saat perluasan region dengan nama kolom:multiRegionSeedHost
.Contoh stanza Cassandra dari
overrides.yaml
Anda yang menampilkanmultiRegionSeedHost
.cassandra: multiRegionSeedHost: "1.2.X.X" datacenter: "dc-1" rack: "rc-1" hostNetwork: false clusterName: QA
- Buat container klien untuk memeriksa konektivitas antara pod Cassandra yang gagal dan node awal dengan mengikuti petunjuk di Membuat container klien untuk proses debug
- Setelah Anda
ssh
ke dalam container klien dan memiliki shell bash, gunakan telnet untuk memeriksa konektivitas dari node saat ini ke node seed melalui port 7001 dan 7199Contoh perintah telnet dan output yang menunjukkan kegagalan koneksi
telnet 10.0.0.0 7001
Trying 10.0.0.0... telnet: Unable to connect to remote host: Connection timed outtelnet 10.0.0.0 7199
Trying 10.0.0.0... telnet: Unable to connect to remote host: Connection timed out
Resolusi
- Bekerja samalah dengan tim admin cluster Anda untuk memastikan ada konektivitas jaringan antara node Cassandra di semua cluster yang merupakan bagian dari organisasi yang sama.
- Pastikan tidak ada aturan firewall yang memblokir traffic dari node yang gagal ke node awal.
Penyebab 4: Konflik port
Konflik port
Cassandra mencoba untuk memproses port 7000 dan 7001, tetapi layanan lain seperti ssh sudah memproses port tersebut.
Diagnosis
Log pod Cassandra mungkin menampilkan entri yang serupa seperti dalam contoh berikut:
Unable to create ssl socket Fatal configuration error; unable to start server. See log for stacktrace. ERROR [main] 2023-02-27 13:01:54,239 CassandraDaemon.java:803 - Fatal configuration error org.apache.cassandra.exceptions.ConfigurationException: Unable to create ssl socket at org.apache.cassandra.net.MessagingService.getServerSockets(MessagingService.java:701) ~[apache-cassandra-3.11.9.jar:3.11.9] at org.apache.cassandra.net.MessagingService.listen(MessagingService.java:681) ~[apache-cassandra-3.11.9.jar:3.11.9] at org.apache.cassandra.net.MessagingService.listen(MessagingService.java:665) ~[apache-cassandra-3.11.9.jar:3.11.9] at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:831) ~[apache-cassandra-3.11.9.jar:3.11.9] at org.apache.cassandra.service.StorageService.initServer(StorageService.java:717) ~[apache-cassandra-3.11.9.jar:3.11.9] at org.apache.cassandra.service.StorageService.initServer(StorageService.java:666) ~[apache-cassandra-3.11.9.jar:3.11.9] at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:395) [apache-cassandra-3.11.9.jar:3.11.9] at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:633) [apache-cassandra-3.11.9.jar:3.11.9] at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:786) [apache-cassandra-3.11.9.jar:3.11.9] Caused by: java.net.BindException: Address already in use (Bind failed) Caused by: java.net.BindException: Address already in use (Bind failed)
Hal ini menunjukkan bahwa port sudah digunakan.
Resolusi
Hentikan dan hapus layanan selain Cassandra yang memproses Port 7000 dan 7001. Tindakan ini akan memungkinkan aplikasi Cassandra muncul.
Penyebab 5: Alamat IP yang sama
Pod Cassandra lama dengan IP yang sama ada di cluster. Situasi ini dapat terjadi setelah meng-uninstal Hybrid atau menginstal ulang Hybrid.
Diagnosis
- Tinjau file
system.log
Cassandra untuk memeriksa apakah ada error berikut:INFO [HANDSHAKE-/10.106.32.131] 2020-11-30 04:28:51,432 OutboundTcpConnection.java:561 - Handshaking version with /10.10.1.1 Exception (java.lang.RuntimeException) encountered during startup: A node with address /10.10.1.1 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node. java.lang.RuntimeException: A node with address /10.10.1.1 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node. at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:558) at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:804) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:664) at org.apache.cassandra.service.StorageService.initServer(StorageService.java:613) at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:379) at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:602) at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:691) ERROR [main] 2020-11-30 04:28:52,287 CassandraDaemon.java:708 - Exception encountered during startup java.lang.RuntimeException: A node with address /10.10.1.1 already exists, cancelling join. Use cassandra.replace_address if you want to replace this node.
- Tinjau output perintah
nodetool status
dari salah satu DC yang masih aktif untuk melihat apakah ada node Cassandra yang ditampilkan dengan IP yang sama seperti dalam pesan error - 10.10.1.1.Contoh output perintah nodetool status
kubectl exec apigee-cassandra-default-0 -n -- nodetool status Datacenter dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.10.1.1 649.6 KiB 256 100.0% 4d96eaf5-7e75-4aeb-bc47-9e45fdb4b533 ra-1 UN 10.10.1.2 885.2 KiB 256 100.0% 261a15dd-1b51-4918-a63b-551a64e74a5e ra-1 UN 10.10.1.3 693.74 KiB 256 100.0% 91e22ba4-fa53-4340-adaf-db32430bdda9 ra-1
Resolusi
- Hapus node Cassandra lama menggunakan perintah
nodetool remove
:nodetool removenode HOST_ID
ID host dapat ditemukan di output status nodetool. Misalnya:
4d96eaf5-7e75-4aeb-bc47-9e45fdb4b533
dalam output status nodetool contoh sebelumnya. - Setelah node Cassandra yang lebih lama dihapus, coba lagi penginstalan Hybrid.
Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Google Cloud Layanan Pelanggan:
- Google Cloud Project ID.
- Organisasi Apigee Hybrid.
- File
overrides.yaml
dari wilayah sumber dan wilayah baru, yang menyamarkan informasi sensitif. - Output dari perintah di Pengumpulan data penting Apigee Hybrid.