Redis Cluster tidak menjamin konsistensi yang kukuh Dalam sesetengah senario khas, pelanggan mungkin masih kehilangan data walaupun ia menerima pengesahan tulis.
Senario 1: Replikasi tak segerak
- klien menulis kepada master B
- balasan master B OK
- Master B menyegerakkan kepada hamba B1 B2 B3
B membalas kepada klien tanpa menunggu pengesahan daripada B1 B2 B3 Jika tuan turun sebelum penyegerakan hamba selesai, salah satu hamba akan dipilih sebagai master , maka data yang ditulis oleh klien hilang. Perintah
wait
boleh meningkatkan keselamatan data dalam senario ini.
wait
akan menyekat klien semasa sehingga operasi tulis sebelumnya berjaya disegerakkan dengan bilangan hamba yang ditentukan.
wait
boleh meningkatkan keselamatan data, tetapi tidak menjamin konsistensi yang kukuh.
Oleh kerana walaupun kaedah replikasi segerak ini digunakan, terdapat situasi istimewa: hamba yang belum menyelesaikan penyegerakan dipilih sebagai tuan.
Senario 2: Pembahagian rangkaian
6 nod A, B, C, A1, B1, C1
, 3 induk, 3 hamba dan satu pelanggan, Z1
.
Selepas partition rangkaian berlaku, 2 zon terbentuk, A, C, A1, B1, C1
dan B Z1
.
Pada masa ini Z1 masih boleh menulis kepada B. Jika partition dipulihkan dalam masa yang singkat, maka tiada masalah. Kelompok terus berfungsi seperti biasa, tetapi jika masa berlalu, B1 akan menjadi tuan partition di mana ia berada, dan data yang ditulis oleh Z1 hingga B akan hilang.
maximum window(最大时间窗口)
Ia boleh mengurangkan kehilangan data dan mengawal jumlah penulisan dari Z1 hingga B:
Selepas tempoh masa tertentu, majoriti partition akan dipilih, dan hamba akan menjadi tuan. Tuan di bahagian minoriti partition akan menolak untuk menerima permintaan tulis.
Jumlah masa ini sangat penting dan dipanggil Masa Tamat Nod.
Selepas tuan mencapai masa tamat tempoh, ia dianggap rosak, memasuki keadaan ralat, berhenti menerima permintaan tulis dan boleh digantikan oleh hamba.
Ringkasan
Redis Cluster tidak menjamin konsistensi yang kukuh, dan terdapat senario kehilangan data:
- Replikasi tak segerak
Tulis dalam master Berjaya, tetapi sebelum penyegerakan hamba selesai, tuan ranap, hamba menjadi tuan, dan data hilang. Perintah
wait
boleh digunakan untuk replikasi segerak, tetapi ia tidak dapat menjamin sepenuhnya bahawa data tidak akan hilang dan akan menjejaskan prestasi.
- Pembahagian rangkaian
Selepas pembahagian, induk terus menerima permintaan tulis Selepas pemulihan partition, induk mungkin menjadi hamba, dan data yang ditulis sebelum ini akan hilang .
Anda boleh menetapkan masa tamat nod untuk mengurangkan bilangan penulisan yang diterima oleh induk semasa pembahagian dan mengurangkan kos kehilangan data.
Pembelajaran yang disyorkan: "tutorial redis"