Senario Kluster mikroservis anda bergantung pada Redis untuk caching, RabbitMQ untuk antrian mesej, dan Kafka untuk aliran peristiwa. Suatu hari, masa respons perkhidmatan meningkat dan kelewatan pemprosesan pesanan bertambah.
Gejala
- Redis: redis-cli --latency menunjukkan >10ms; output INFO menunjukkan lonjakan total_connections_received; beberapa key terlepas tamat tempoh TTL.
- RabbitMQ: UI Pengurusan menunjukkan antrian dalam; pengesahan pengguna tamat masa; rabbitmqctl list_queues menunjukkan >1000 mesej belum disahkan.
- Kafka: Ketinggalan pengguna (consumer lag) meningkat; kafka-consumer-groups --describe menunjukkan LAG bertambah; penggunaan cakera broker mencapai 85%.
Diagnosis
1. Redis – Periksa log perlahan: SLOWLOG GET 100. Banyak operasi SET/GET >100µs menunjukkan fragmentasi atau tetapan kegigihan tidak sesuai. Jalankan MEMORY DOCTOR. Pastikan maxmemory-policy bukan noeviction yang boleh menyebabkan ribut pengusiran.
2. RabbitMQ – Periksa kependaman antara nod: rabbitmq-diagnostics check_port_connectivity. Periksa sambungan: rabbitmqctl list_connections. Terlalu banyak sambungan jangka pendek? Laraskan kolam klien. Sahkan antrian cermin: rabbitmqctl list_policies. Untuk penyalinan mesej, naikkan vm_memory_high_watermark atau dayakan antrian malas.
3. Kafka – Periksa ISR: kafka-topics --describe --topic topik-anda. Replika hilang? Periksa rangkaian/ I/O cakera. Buang segmen log: kafka-run-class kafka.tools.DumpLogSegments --files. Pantau nisbah idle pengendali permintaan: kafka-run-class kafka.tools.JmxTool.
Arahan
- Had sambungan Redis dinamik: CLIENT SETNAME monitor; CONFIG SET maxclients 5000 (berhati-hati: nilai sumber).
- RabbitMQ hantar semula mesej belum disahkan: rabbitmqctl eval 'rabbit_amqqueue:requeue(rabbit_misc:r(<<"nama-antrian">>, queue)).' atau kosongkan (risiko tinggi).
- Kafka tambah partition: kafka-topics --alter --topic topik-anda --partitions 6 (pastikan pengedaran kunci).
Kawalan Risiko
- Sentiasa uji perubahan parameter dalam persekitaran bukan pengeluaran.
- Sebelum menukar dasar pengusiran Redis, anggarkan penggunaan memori maksimum.
- Untuk RabbitMQ, gunakan perubahan pencerminan secara beransur-ansur untuk elak belahan otak.
- Penugasan semula partition Kafka: gunakan kafka-reassign-partitions.sh dengan --throttle untuk had impak rangkaian.
Rollback
- Redis: Pulihkan konfigurasi: sandarkan /etc/redis/redis.conf kemudian CONFIG SET nilai asal.
- RabbitMQ: Buang dasar: rabbitmqctl clear_policy; kembalikan sifat antrian dengan mulakan semula nod.
- Kafka: Alih balik partition: hasilkan tugasan lama dengan kafka-reassign-partitions --generate dan laksanakan.
Pengesahan
- Redis: Jalankan redis-benchmark -q -n 1000 bandingkan garis dasar kependaman.
- RabbitMQ: Terbitkan mesej ujian dan sahkan pengguna mengesah dalam masa jangkaan.
- Kafka: Gunakan kafka-producer-perf-test dan kafka-consumer-perf-test untuk mengesahkan daya pemprosesan.
Bila Hantar Tiket OpsGlobal
- Isu berterusan selepas mengikuti langkah di atas.
- Perlukan penalaan seluruh kluster (contohnya, Kafka num.io.threads atau pengubahan saiz kluster Redis).
- Kehilangan data atau anomali kegigihan dikesan.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu NoSQL dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Penerokaan mendalam isu kebolehpercayaan biasa Redis, RabbitMQ, dan Kafka dalam persekitaran Kubernetes pengeluaran, dengan langkah diagnosis, arahan, kawalan risiko, rollback, dan pengesahan.
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.