1、redis脑裂问题
redis脑裂其实是master脱离集群的一种情况,比如我们有如下集群: 下面说一种场景来模拟一下,我们有两个端的数据需要向redis 集群写入数据,比如这个数据经过哈希计算需要写入到 master1 中,但是此时瞬间 master1 与集群断开,造成数据写入到了 master1 中,但并没有同步到从服务,这时又有其他端写需要写数据到master1 ,因为此时的master1 与集群断开,造成进群内重新选举一个新的master1 ,此时选举完成,slave1 成了 master1 ,但是这时master1 重新上线,所以master1 成了 slave1 , 此时 新的 slave 1 会干一件事,就是清掉自己的数据去主动同步 master1 的数据,这时候大家就发现问题所在了,那个断开后写入的数据没有同步给其他从机啊,怎么能清掉 数据重新同步呢???其实这就是脑裂问题。
脑裂问题的解决: (主要是需要两个参数配合来完成) 解决方案 redis的配置文件中,存在两个参数
min-slaves-to-write 3
min-slaves-max-lag 10
第一个参数表示连接到master的最少slave数量 第二个参数表示slave连接到master的最大延迟时间 按照上面的配置,要求至少3个slave节点,且数据复制和同步的延迟不能超过10秒,否则的话master就会拒绝写请求,配置了这两个参数之后,如果发生集群脑裂,原先的master节点接收到客户端的写入请求会拒绝,就可以减少数据同步之后的数据丢失。
注意: 较新版本的redis.conf文件中的参数变成了
min-replicas-to-write 3
min-replicas-max-lag 10
redis中的异步复制情况下的数据丢失问题也能使用这两个参数
2、Redis内存回收机制(Redis 过期策略、淘汰策略)
https://blog.csdn.net/a745233700/article/details/85413179
这是redis 4.0 以前的策略,4.0 以后又增加了两种内存回收策略 LFU 算法:
|