Senario
Sebuah platform e-dagang menggunakan Redis, RabbitMQ dan Kafka di Kubernetes. Semasa jualan kilat, Redis kerap timeout, RabbitMQ mesej bertimbun, dan Kafka offset kumpulan pengguna diset semula, menyebabkan kelewatan pemprosesan pesanan.
Simptom
- Redis: Log aplikasi menunjukkan 'Connection refused' atau 'Timeout'; kadar hit cache menurun mendadak.
- RabbitMQ: Kedalaman baris gilir meningkat pesat; daya pemprosesan pengguna merosot; beberapa mesej di-requeue atau hilang.
- Kafka: Kumpulan pengguna mengalami 'OffsetOutOfRange' atau 'Rebalance' kerap; lag pengguna meningkat.
Diagnosis
Redis
- Periksa kesihatan perkhidmatan Redis:
bash kubectl exec -it redis-pod -- redis-cli pingPatut balas PONG. Jika gagal, periksa log pod:bash kubectl logs redis-pod --tail=50 - Semak status Sentinel atau Cluster:
bash redis-cli -h redis-sentinel -p 26379 sentinel master mymaster - Semak memori dan pertanyaan lambat:
bash redis-cli info memory redis-cli slowlog get
RabbitMQ
- Lihat status nod:
bash kubectl exec rabbitmq-pod -- rabbitmqctl status - Senarai baris gilir dan pengguna:
bash rabbitmqctl list_queues name messages_ready messages_unacknowledged rabbitmqctl list_consumers - Lihat log:
bash kubectl logs rabbitmq-pod
Kafka
- Semak metadata broker dan topik:
bash kubectl exec kafka-pod -- kafka-broker-api-versions.sh --bootstrap-server localhost:9092 kafka-topics.sh --describe --topic orders --bootstrap-server localhost:9092 - Periksa status kumpulan pengguna:
bash kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group order-group --describe - Periksa segmen log:
bash kafka-run-class.sh kafka.tools.DumpLogSegments --files /data/kafka/orders-0/00000000000000000000.log --print-data-log
Kawalan Risiko
- Redis: Gunakan Sentinel atau Cluster untuk elak titik kegagalan tunggal; set maxmemory dan polisi pengusiran (cth. allkeys-lru); aktifkan persistensi RDB/AOF.
- RabbitMQ: Konfigurasi baris gilir terpantul (ha-mode: all); aktifkan pengesahan penerbit (publisher confirms) dan ack manual pengguna; set pertukaran surat mati (dead letter exchange) untuk mesej gagal.
- Kafka: Set faktor replikasi >= 3; konfigurasi min.insync.replicas=2; penghasil set acks=all; pengguna guna auto.offset.reset=none atau earliest.
Balik
- Redis: Pulihkan dari snapshot RDB terkini atau fail AOF; muat semula ke nod induk.
- RabbitMQ: Jika baris gilir terpantul digunakan, tukar ke nod sihat; jika tidak, pulihkan data baris gilir dari sandaran.
- Kafka: Guna alat kafka-reassign-partitions untuk agihkan semula replika; jika data rosak, pulihkan topik dari sandaran.
Pengesahan
- Redis:
redis-cli --latency -h <host>untuk uji kependaman;redis-cli info persistenceuntuk status persistensi; simulasi failover dan sahkan pemulihan automatik. - RabbitMQ: Terbitkan dan guna mesej ujian; periksa kedalaman baris gilir dan kadar ack.
- Kafka: Hasilkan/guna mesej ujian; pastikan offset berterusan; guna kafka-verifiable-producer dan kafka-verifiable-consumer untuk pengesahan hujung ke hujung.
Bila Serah Tiket OpsGlobal
- Apabila masalah melebihi kapasiti pasukan (cth. partition rangkaian merentas AZ, kerosakan data teruk);
- Apabila perlu semakan seni bina berwibawa (cth. pelan skala kluster);
- Apabila ketidakstabilan berterusan tanpa punca yang jelas;
- Apabila ingin membina sistem pemantauan dan amaran yang lebih mantap.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu NoSQL dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Dari perspektif SRE, artikel ini merangkumi senario dunia sebenar seperti isu sambungan, kehilangan mesej dan offset partition dalam Redis, RabbitMQ dan Kafka di Kubernetes, menyediakan arahan diagnosis, kawalan risiko, pelan balik, langkah pengesahan dan panduan bila perlu serah tiket OpsGlobal.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.