Redis主从+哨兵模式下数据安全
1,redis主从+哨兵
redis主从复制并不能实现高可用,因为万一主节点宕机,整个redis系统就会瘫痪。
利用sentinel监控主从节点的时候,假如主节点出现问题,sentinel可以进行故障转移,以及转移之后通知客户端程序。
但是sentinel故障转移有一定时间的延迟,并且主从复制是异步进行的。
所以sentinel只能保证主从切换,保证redis主从的高可用。并不能保证数据的零丢失。
嗯,说了这么多,就是想说sentinel可以保证redis主从的高可用,但是不能保证数据的零丢失。
2,redis主从+哨兵数据丢失原理
1,主从复制异步的导致数据丢失
因为redis主从复制是异步的,假如主节点两个进程同时一个接受写命令,另一个进行复制。
复制过程中突然宕机。那么有一些写命令还没有来得及复制就宕机了。那么这部分没来得及复制的
数据就会永久丢失。
2,集群脑裂导致数据丢失
脑裂,就是集群中master节点突然跟其他从节点以及sentinel的网络出现了卡顿,断网等网
络问题。这种情况下sentinel会认为master节点宕机了,重新选出一个master节点。这时候集群
中就有两个master节点。这就是脑裂。脑裂情况下,sentinel还没有返回新节点地址的时候,
client会继续给旧的master写入数据。当网络恢复后,旧的主节点会被当作从节点复制新的
主节点。那么脑裂期间写入旧master的数据就会永久丢失。
3,如何规避redis主从+哨兵导致的数据丢失
1这种数据丢失是无法避免的,只能通过不同的业务场景,不同的网络带宽设置不同的参数,把损失降到最低。
2配置项:
min-slaves-to-write 3 --要求至少有3个slave的情况
min-slaves-max-lag 10 --主从复制的延迟不能超过10s。超过的话,master节点不会接受任何写请求。
3上面配置项的意思就是:
要求最少有三个从服务器连接,并且主从复制的延迟不能超过10s,则稳定运行。
假如从服务器从节点数量小于三个,或者主从复制延迟超过10s,则主节点从此不接受任何写请求,直到故障恢复。
4避免数据丢失:
根据上面配置结合业务拿到最优配置,在故障期间client可暂时将数据存在其他地方,等待故障恢复再将数据
转移到redis即可