Redis 哨兵架构
1、哨兵介绍
哨兵主要功能如下:
- 集群监控,复制监控redis master和slave进程是否正常工作
- 消息通知,如果某个redis实例有故障,那么哨兵复制发送消息作为报警通知管理员
- 故障转移,如果master node挂掉,会自动转移到slave node上
- 配置中心,如果故障转移发了,通知client客户端新的master地址
哨兵核心知识:
- 哨兵至少需要3个实例,来保证自己的健壮性
- 哨兵+redis主从部署结构,不会保证数据零丢失,只能保证redis集群高可用
- 哨兵+redis主从部署结构,尽量在测试环境和生产环境,进行充足的测试和容灾演练
2、哨兵数据丢失
2.1 异步复制导致的数据丢失
master -> slave的复制是异步的,所以部分数据还没有复制到slave,master就宕机了,这个时候哨兵将slave晋升为master,这个时候内存中还没复制的部分数据就会丢失
2.2 脑裂导致的数据丢失
master脱离正常网络,跟其他slave无法连通,但是master依然运行,此时哨兵可能认为master宕机,开始选举,将其他slave切换成master,这时候集群就会有两个master,这就是脑裂。
此时虽然slave被切换成master,但是cclient还没有切换到新master,还继续向master写入数据,这个时候旧master恢复,被作为一个slave挂到新master上,自己的数据全部清空,重新去新master复制数据,这就导致数据丢失
2.3 解决数据丢失
min-slaves-to-write 1
min-slaves-max-lag 10
至少有1个slave,数据复制和同步的延迟不能超过10秒
如果说所有的slave,数据复制和同步的延迟都超过10秒钟,那么这时候master就不会在接收任何请求
|
|