redis哨兵主从切换下数据丢失

文章探讨了在Redis集群中遇到的两种数据丢失情况:一是由于网络问题导致的异步复制延迟,当master宕机时数据丢失;二是网络分区引发的脑裂,恢复后可能导致数据丢失。为防止这种情况,Redis配置中的min-slaves-to-write和min-slaves-max-lag参数要求至少3个slave节点在10秒内与master保持同步,否则master拒绝新请求,以此保障数据一致性,但牺牲了可用性。

(1)异步数据丢失问题:
当集群节点间网络或其他问题导致异步复制延时很高,如果此时master宕机了,
毫无疑问会丢失延时的这段时间的数据当集群节点间网络或其他问题导致异步复制延时很高,
如果此时master宕机了,毫无疑问会丢失延时的这段时间的数据
(2)脑裂问题:
当网络分区变化导致master和slave节点之间无法正常通信时,sentinel哨兵集群会选举
slave为master,此时与之前master连接的client一直发送数据,当我们进行恢复将原master
当做新master的slave节点的时候,那么后来一直发送到原master内存的数据会丢失

解决上述两种数据丢失的问题,redis配置文件中有以下两行:
min-slaves-to-write 3
min-slaves-max-lag 10
意味着至少要有3个slave节点与master保持10秒钟以内的数据同步,否则master就不会
接受新的请求,我们需要采取其他措施来应对

总的来看:遵从CAP理论的 CP,牺牲了A(可用性)

### Redis 主从切换中的数据丢失解决方案 为了防止Redis主从切换过程中发生的数据丢失,可以采取多种措施来增强系统的可靠性和一致性。以下是几种有效的策略: #### 使用持久化机制减少数据损失风险 启用AOF(Append Only File)日志记录功能能够显著降低因意外断电或其他异常情况造成的数据丢失概率[^1]。当配置为主备架构时,建议同时开启RDB快照和AOF增量日志双重保护。 ```bash appendonly yes ``` 通过这种方式,在遇到故障恢复期间可以通过加载最新的RDB文件加上后续产生的AOF操作指令完成完整的数据库重建工作。 #### 配置合理的哨兵参数提高选举准确性 调整`quorum`以及`down-after-milliseconds`等关键参数值有助于提升Sentinel集群对于节点状态判断的精确度,从而使得自动故障转移过程更加稳定高效[^2]。适当增加这些阈值可有效避免由于网络抖动等原因引起的误判现象。 - `quorum`: 表示多少个sentinels同意认为master down之后才执行failover流程; - `down-after-milliseconds`: 定义了多长时间内无响应则视为不可达; 例如设置如下: ```ini sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 ``` 这表示至少需要两个sentinel确认master失效,并且等待时间为30秒才会触发切换动作。 #### 实施全量同步优化方案 为了避免频繁的部分重传带来的性能开销及潜在的风险,可以在每次新的slave加入或者现有成员重新连接后强制进行一次完整拷贝[^4]。这样做的好处是可以确保所有副本间的一致性水平更高,同时也减少了因为个别命令未被正确传播而导致的信息差异。 在实际应用环境中还可以考虑采用一些第三方工具如RedisShake来进行跨数据中心之间的异步复制任务管理,进一步加强整体架构的安全防护能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值