Senario
Dalam seni bina mikroservis moden, Redis, RabbitMQ, dan Kafka membentuk tulang belakang middleware teras. Pada suatu hari, pasukan perniagaan melaporkan gangguan berselang: permintaan pengguna menjadi perlahan, beberapa pemprosesan pesanan tertunda, dan kadang-kadang mesej hilang. Pemeriksaan awal mendedahkan bahawa nisbah hit cache Redis telah menurun, giliran RabbitMQ mengalami pembekakan yang ketara, dan kumpulan pengguna Kafka menunjukkan ketinggalan yang jelas.
Gejala
- Redis:
INFO statsmenunjukkanevicted_keysterus meningkat, nisbahkeyspace_hitsvskeyspace_missestidak seimbang, danSLOWLOGmenunjukkan banyak pertanyaan perlahan. - RabbitMQ: Bilangan
messagesdanmessages_unacknowledgeddalam giliran meningkat, bilangan sambungan pengguna menurun, dan amaran memori/disk dicetuskan. - Kafka:
LAGdalam kumpulan pengguna terus berkembang,ISR(In-Sync Replicas) partition mengecut, atau anda melihat ralatOutOfRangeException.
Perintah Diagnosis
Diagnosis Redis
# Lihat statistik utama
redis-cli INFO stats
redis-cli INFO keyspace
# Lihat pertanyaan perlahan terkini (10 terakhir)
redis-cli SLOWLOG GET 10
# Semak keadaan persistensi untuk mengelakkan sekatan semasa penulisan semula RDB/AOF
redis-cli INFO persistence
Nota: Perintah ini hanya boleh dibaca dan tidak menjejaskan produksi. Walau bagaimanapun,
SLOWLOG RESETakan memadam log; elakkan jika perlu menyimpannya.
Diagnosis RabbitMQ
# Senaraikan butiran giliran (bilangan mesej, tidak diakui, pengguna)
rabbitmqctl list_queues name messages messages_unacknowledged consumers
# Semak keadaan sambungan dan saluran
rabbitmqctl list_connections name state
# Semak amaran memori atau disk
rabbitmqctl list_nodes name mem_used disk_free_alarm
Perintah ini tidak mengubah sebarang keadaan tetapi memerlukan keistimewaan admin. Jalankan dalam tetingkap penyelenggaraan.
Diagnosis Kafka
# Lihat kemajuan penggunaan semua kumpulan pengguna dan ketinggalan
kafka-consumer-groups.sh --bootstrap-server <broker>:9092 --describe --all-groups
# Periksa replika partition topik dan status ISR
kafka-topics.sh --bootstrap-server <broker>:9092 --describe --topic <topic>
# Semak log broker dan penggunaan disk (melalui JMX atau log)
# Contoh: Dapatkan bilangan partition yang kurang direplikasi
kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions
kafka-run-class.shmelancarkan JVM, yang mungkin meningkatkan penggunaan memori secara sementara; nilai terlebih dahulu sebelum menjalankan. Semua perintah adalah hanya baca.
Kawalan Risiko
Sebelum melaksanakan pembaikan, risiko perlu dikawal:
- Sandarkan Konfigurasi: Sandarkan
redis.conf,rabbitmq.conf,server.propertiesKafka, dan tetapan kumpulan pengguna. - Aktifkan Mod Penyelenggaraan: Untuk Kafka, berhentikan penghasilan sementara jika boleh; untuk RabbitMQ, berhentikan sebahagian pengguna (tetapi berhati-hati untuk mengelakkan timbunan mesej bertambah).
- Kadar Had dan Pemutus Litar: Tambah had kadar di pintu masuk dan buka pemutus litar untuk mengelakkan kegagalan bertingkat.
- Tetapkan Tetingkap Perubahan: Semua operasi mesti dilakukan pada waktu luar puncak, dan pasukan berkaitan perlu dimaklumkan.
- Pemantauan Dipertingkat: Aktifkan log terperinci dan pengumpulan metrik untuk mengesan anomali dengan serta-merta.
Pelan Rollback
Rollback Redis
- Jika perubahan konfigurasi (contohnya,
maxmemory-policy) menyebabkan masalah, pulihkan sandaran dan mulakan semula Redis. - Langkah rollback selamat:
bash # Salin konfigurasi asal cp /etc/redis/redis.conf.bak /etc/redis/redis.conf # Mulakan semula Redis (peringatan: ini mengganggu perkhidmatan) sudo systemctl restart redis - Jangan gunakan
FLUSHALLatauFLUSHDBsebagai rollback; ia akan kehilangan data.
Rollback RabbitMQ
- Jika perubahan dasar atau parameter menyebabkan masalah, padam atau pulihkan dasar:
bash rabbitmqctl clear_policy <vhost> <policy_name> # Atau gunakan semula definisi dasar sandaran - Melumpuhkan penyegerakan automatik untuk giliran berketersediaan tinggi mungkin menyebabkan ketidaklengkapan giliran cermin; pastikan anda mempunyai pelan yang jelas.
Rollback Kafka
- Jika offset kumpulan pengguna diubah, tetapkan semula:
bash kafka-consumer-groups.sh --bootstrap-server <broker>:9092 --group <group> --topic <topic> --reset-offsets --to-earliest --executeIni akan menggunakan semula mesej sejarah, berpotensi menyebabkan pemprosesan berulang; jalankan dengan berhati-hati.
- Jika isu disebabkan oleh peningkatan versi, kembali kepada binari sebelumnya dan pulihkan fail konfigurasi asal.
Langkah Pengesahan
Selepas pembaikan, sahkan:
- Redis: Semak sama ada
evicted_keystelah menurun, nisbah hit pulih,SLOWLOGdipendekkan, dan kependamanINFO pingkembali normal. - RabbitMQ: Bilangan
messagesdanunacknowledgedterus menurun, sambungan pengguna stabil, amaran memori/disk hilang. - Kafka:
LAGkumpulan pengguna secara beransur-ansur mencecah sifar,ISRdipulihkan sepenuhnya, dan semua replika partition disegerakkan.
Juga lakukan pengesahan peringkat perniagaan: simulasikan aliran pembayaran, pesanan, dan kritikal lain untuk memastikan tiada kehilangan atau pengulangan mesej. Pantau metrik SLO (contohnya, kependaman p99) untuk memastikan ia kembali ke garis dasar.
Bila Perlu Menghantar Tiket OpsGlobal
Hantar tiket dengan segera jika:
- Anda tidak dapat mengenal pasti punca selepas 30+ minit menyelesaikan masalah.
- Terdapat kehilangan atau kerosakan data yang memerlukan perkhidmatan pembaikan data profesional.
- Isu perkakasan atau kernel asas disyaki, seperti I/O disk yang tidak normal atau getaran rangkaian.
- Pertukaran gagal yang kompleks merentasi zon ketersediaan atau kluster diperlukan.
- Pasukan anda kekurangan pengalaman operasi mendalam dengan komponen middleware ini dan memerlukan panduan pakar.
Pasukan SRE OpsGlobal boleh memberikan diagnosis pantas, peningkatan prestasi, dan sokongan pemulihan bencana tanpa menceroboh kod perniagaan, membantu anda meminimumkan masa henti.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu NoSQL dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Terokai mod kegagalan biasa untuk Redis, RabbitMQ, dan Kafka, serta langkah diagnosis, kawalan risiko, rollback, dan pengesahan yang boleh dilaksanakan untuk memastikan tindanan middleware anda berdaya tahan.
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.