乐趣区

关于redis:redis-哨兵数据丢失的处理

redis – 哨兵(高可用)中提过,Sentinel 并不保证数据的零失落,然而他也提供了能让数据最小失落的办法。
第一个数据失落的场景,如下图,数据失落的时候,是因为 redis 的复制是异步的,也就是说他是 ap 模型的,ap 模仿绝对于 cp 模型来说,性能是更好的,然而数据的一致性就没方法保障了。所以客户端在 master 写入数据后就正确返回,master 再异步把数据同步给 slave。

第二个数据失落的场景,如下图,呈现了脑裂,尽管 master 是失常的,然而 Sentinel 集群却无奈和他通信,此时就会认为 master 宕机了而做故障转移,然而告诉客户端之前,客户端还是会始终写入数据到旧 master,而旧 master 在网络解决后,重启连贯到新 master,会删除旧的数据,导致这部分的数据失落。

redis 提供了以下两个配置来最大水平的缩小数据失落:

min-replicas-to-write 1
min-replicas-max-lag 10

这个意思是至多有 1 个 slave 曾经有 10 秒没有同步,则 master 暂停接管申请。所以不会说 master 始终写入数据,而 slave 没有同步,如果产生以上两个场景,最多失落 10 秒的数据。从另外一方面说,10 秒后升高了可用性,进步了数据的一致性,从 ap 模型临时的变成了 cp 模型。

退出移动版