Redis Cluster menangani kegagalan simpul melalui kombinasi deteksi kegagalan, promosi replika, dan manajemen negara klaster untuk memastikan operasi yang berkelanjutan dan ketersediaan data. Ini dirancang untuk bertahan dari kegagalan beberapa node dengan secara otomatis mempromosikan replika untuk menggantikan tuan yang tidak terjangkau, mempertahankan integritas ruang kunci sambil meminimalkan risiko kehilangan data.
Deteksi Komunikasi dan Kegagalan Cluster
Redis cluster node berkomunikasi melalui protokol biner berbasis TCP khusus yang disebut Redis Cluster Bus. Setiap node mempertahankan koneksi dengan setiap node lain di cluster menggunakan bus ini, memungkinkan pemeriksaan kesehatan berkelanjutan dan perambatan negara. Node secara berkala mengirim paket ping untuk mengkonfirmasi status operasional rekan -rekan mereka dan berbagi informasi tentang keadaan cluster. Komunikasi ini menggunakan protokol gosip untuk secara efisien menyebarkan informasi cluster, membantu dalam mendeteksi kegagalan simpul.
Node memantau rekan menggunakan mekanisme ping aktif. Jika sebuah node tidak menanggapi ping dalam periode batas waktu yang dikonfigurasi (Node_Timeout), itu ditandai karena mungkin gagal dengan status PFAIL. Ini adalah indikasi kegagalan sementara, yang berarti bahwa simpul mungkin tidak terjangkau atau turun tetapi belum dikonfirmasi. Jika kondisi PFAIL berlanjut dan dikonfirmasi oleh mayoritas node utama, node ditandai sebagai gagal, menunjukkan itu dianggap tidak terjangkau atau turun oleh cluster. Mekanisme deteksi kegagalan berbasis konsensus ini membantu mencegah positif palsu dalam mengidentifikasi node yang gagal.
menangani kegagalan simpul master
Ketika sebuah master node ditandai sebagai gagal, Redis Cluster memulai proses failover untuk mempromosikan salah satu replika untuk menjadi master baru. Proses ini dipicu secara otomatis oleh detektor kegagalan cluster tanpa intervensi administratif. Replika yang dipromosikan mengambil alih tanggung jawab melayani slot hash yang sebelumnya dikelola oleh master yang gagal, memastikan bahwa cluster dapat terus melayani permintaan tanpa konfigurasi ulang manual.
Failover terjadi hanya jika ada setidaknya satu replika yang tersedia dan dapat dijangkau untuk dipromosikan. Jika tidak ada replika yang sesuai, cluster memasuki keadaan kesalahan di mana ia akan berhenti menerima pertanyaan untuk mencegah melayani data yang tidak konsisten. Ini menyoroti pentingnya memiliki replika yang dikonfigurasi untuk setiap master untuk mempertahankan ketersediaan tinggi.
mekanika dan keamanan failover
Selama failover, replika menunggu untuk menyinkronkan sepenuhnya dengan master yang diganti, memastikan telah memproses semua pembaruan yang tertunda untuk menghindari kehilangan data. Ini mencapai ini dengan mencocokkan replikasi offset dengan master sehingga memiliki dataset terkini sebelum mengasumsikan peran utama.
Setelah disinkronkan, replika meminta zaman konfigurasi baru dari mayoritas master. Epoch adalah cap waktu logis yang digunakan untuk melacak perubahan konfigurasi di cluster. Setelah mendapatkan konsensus, replika menyiarkan konfigurasi yang diperbarui ke semua node, mengumumkan promosi untuk menguasai dan penurunan pangkat master lama untuk replika atau penghapusan.
Master lama, saat pulih, menerima pembaruan konfigurasi ini dan berhenti melayani kueri sebagai master. Ini mengarahkan permintaan klien ke master baru, memastikan bahwa klien secara transparan terus berinteraksi dengan cluster tanpa intervensi manual.
Menangani Partisi Jaringan dan Skenario Terpisah-Otak
Redis Cluster menggunakan konsensus berbasis mayoritas untuk menghindari masalah otak terpisah selama partisi jaringan. Seorang master hanya akan gagal jika tidak dapat dijangkau oleh lebih dari setengah master di cluster. Master yang tidak dapat berkomunikasi dengan mayoritas akan berhenti menerima tulisan, mencegah keadaan data yang berbeda di antara partisi.
Namun, jika partisi minoritas berisi klien yang terus menulis kepada master sebelum failover, ada potensi untuk kehilangan penulisan. Redis mengurangi risiko ini dengan menolak menulis di sisi minoritas setelah batas waktu dan di sisi mayoritas dengan dengan cepat gagal atas tuan yang tidak terjangkau.
Terlepas dari tindakan pencegahan ini, penulisan dapat hilang selama windows failover karena Redis menggunakan replikasi asinkron antara tuan dan replika. Karena balasan untuk menulis perintah dan pembaruan replikasi dikirim hampir secara bersamaan, jendela untuk kehilangan tulisan sangat sempit tetapi bukan tidak mungkin.
Opsi konfigurasi yang mempengaruhi penanganan kegagalan
Redis cluster mencakup opsi konfigurasi yang mempengaruhi ketersediaan dan perilaku selama kegagalan simpul:
-`cluster-require-full-coverage` (default ya): Cluster berhenti menerima menulis jika ada bagian ruang kunci yang terungkap karena kegagalan simpul, memastikan konsistensi data yang kuat.
-`cluster-wallow-reads-when-down` (Default no): mengontrol apakah bacaan diizinkan ketika cluster berada dalam keadaan gagal. Mengaktifkan ini memungkinkan pembacaan dari node bahkan selama kegagalan parsial tetapi dapat berisiko data basi yang dilayani.
Pengaturan ini memungkinkan administrator untuk menyeimbangkan ketersediaan dan konsistensi berdasarkan persyaratan aplikasi.
Dukungan failover manual
Selain failover otomatis, Redis Cluster menyediakan perintah failover manual yang dapat dikeluarkan pada node replika. Ini berguna untuk skenario pemeliharaan atau pengujian di mana administrator ingin menukar peran utama tanpa menunggu peristiwa kegagalan yang sebenarnya.
Manual Failover bekerja dengan memblokir klien pada master saat ini, menunggu replika untuk mengejar sepenuhnya, dan kemudian mempromosikan replika dengan transisi atom yang halus. Ini memastikan tidak ada kehilangan data selama perubahan peran dan gangguan minimal terhadap klien.
Ringkasan
Redis cluster menangani kegagalan simpul terutama melalui deteksi kesalahan dan sistem failover berdasarkan pemantauan berkelanjutan melalui bus redis cluster dan protokol gosip. Node mendeteksi tuan yang tidak terjangkau dan mempromosikan replika secara otomatis setelah proses konsensus yang membutuhkan mayoritas tuan untuk menyetujui kegagalan tersebut. Failover dirancang untuk meminimalkan kehilangan data dengan memastikan replika sepenuhnya disinkronkan sebelum promosi. Partisi jaringan dikelola melalui keputusan berbasis mayoritas untuk mencegah kondisi otak terpisah, meskipun jendela yang sempit dari kehilangan penulisan dapat terjadi karena replikasi asinkron. Opsi konfigurasi memungkinkan penyetelan ketersediaan versus konsistensi selama kegagalan, dan perintah failover manual memberikan kontrol operator untuk pemeliharaan.
Arsitektur ini memungkinkan redis cluster untuk memberikan ketersediaan tinggi dan toleransi partisi dengan pemulihan otomatis dari kegagalan master node, memastikan cluster tetap operasional dan konsisten di bawah skenario kegagalan.