Maison  >  Article  >  base de données  >  Le cluster Redis perdra-t-il des données ?

Le cluster Redis perdra-t-il des données ?

藏色散人
藏色散人avant
2021-09-21 17:09:172103parcourir

Redis Cluster ne garantit pas une forte cohérence. Dans certains scénarios particuliers, le client peut toujours perdre des données même s'il reçoit une confirmation d'écriture.

Scénario 1 : Réplication asynchrone

Le cluster Redis perdra-t-il des données ?

  • le client écrit sur le maître B
  • le maître B répond OK
  • le maître B se synchronise avec l'esclave B1 B2 B3

B répond au client sans attendre la confirmation de B1 B2 B3, Si le maître tombe en panne avant que la synchronisation des esclaves ne soit terminée, l'un des esclaves sera sélectionné comme maître et les données précédemment écrites par le client seront perdues. La commande

wait peut améliorer la sécurité des données dans ce scénario. wait 命令可以增强这种场景的数据安全性。

wait 会阻塞当前 client 直到之前的写操作被指定数量的 slave 同步成功。

wait 可以提高数据的安全性,但并不保证强一致性。

因为即使使用了这种同步复制方式,也存在特殊情况:一个没有完成同步的 slave 被选举为了 master。

场景2:网络分区

6个节点 A, B, C, A1, B1, C1,3个master,3个slave,还有一个client,Z1

Le cluster Redis perdra-t-il des données ?

发生网络分区之后,形成了2个区,A, C, A1, B1, C1B Z1

Le cluster Redis perdra-t-il des données ?

这时 Z1 还是可以向 B 写入的,如果短时间内分区就恢复了,那就没问题,整个集群继续正常工作,但如果时间一长,B1 就会成为所在分区的 master,Z1 写入 B 的数据就丢了。

maximum window(最大时间窗口) 可以减少数据损失,可以控制 Z1 向 B 写入的总数:

过去一定时间后,分区的多数边就会进行选举,slave 成为 master,这时分区少数边的 master 就会拒绝接收写请求。

这个时间量是非常重要的,称为节点过期时间

一个 master 在达到过期时间后,就被认为是故障的,进入 error 状态,停止接收写请求,可以被 slave 取代。

小结

Redis Cluster 不保证强一致性,存在丢失数据的场景:

  • 异步复制

在 master 写成功,但 slave 同步完成之前,master 宕机了,slave 变为 master,数据丢失。

wait

wait bloquera le client actuel jusqu'à ce que l'opération d'écriture précédente soit synchronisée avec succès par le nombre spécifié d'esclaves.
  • wait peut améliorer la sécurité des données, mais cela ne garantit pas une forte cohérence.
Car même si cette méthode de réplication synchrone est utilisée, il existe une situation particulière : un esclave qui n'a pas terminé la synchronisation est élu maître.

Scénario 2 : Partition réseau

6 nœuds A, B, C, A1, B1, C1, 3 maîtres, 3 esclaves et un client, code Z1> .

Le cluster Redis perdra-t-il des données ?Après la partition réseau, 2 zones ont été formées <. code>A , C, A1, B1, C1 et B Z1.

🎜Le cluster Redis perdra-t-il des données ?🎜🎜🎜À ce moment, Z1 peut toujours demander à B W écrit, si dans un court laps de temps période de temps Si la partition est restaurée, alors il n'y a pas de problème. L'ensemble du cluster continuera à fonctionner normalement. Cependant, si le temps passe, B1 deviendra le maître de la partition où il se trouve et les données écrites par Z1 sur celle-ci. B sera perdu. 🎜🎜fenêtre maximale (fenêtre de temps maximale) peut réduire la perte de données et contrôler le nombre total d'écritures de Z1 vers B : 🎜
Après une certaine période de temps, la majorité de la partition sera élu, esclave Devenez maître. A ce moment, le maître du côté minoritaire de la partition refusera de recevoir des demandes d'écriture.
🎜Cette 🎜durée🎜 est très importante et s'appelle le 🎜délai d'expiration du nœud🎜. 🎜🎜Une fois qu'un maître atteint le délai d'expiration, il est considéré comme défectueux, entre dans l'état d'erreur, cesse de recevoir des demandes d'écriture et peut être remplacé par un esclave. 🎜🎜Résumé🎜🎜Redis Cluster ne garantit pas une forte cohérence, et il existe des scénarios dans lesquels des données sont perdues : 🎜🎜🎜Réplication asynchrone🎜🎜🎜Lorsque le maître est écrit avec succès, mais avant que la synchronisation de l'esclave ne soit terminée, le maître tombe en panne, l'esclave devient le maître et les données sont perdues. La commande 🎜🎜wait peut être utilisée pour la réplication synchrone, mais elle ne peut pas garantir complètement que les données ne seront pas perdues et cela affectera les performances. 🎜🎜🎜Partition réseau🎜🎜🎜Après le partitionnement, un maître continue de recevoir des demandes d'écriture. Après la récupération de la partition, le maître peut devenir un esclave et les données précédemment écrites seront perdues. 🎜🎜Vous pouvez définir le délai d'expiration du nœud pour réduire le nombre d'écritures reçues par le maître lors du partitionnement et réduire le coût de la perte de données. 🎜🎜🎜🎜Apprentissage recommandé : "🎜Tutoriel Redis🎜"🎜🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer