Redis replication哨兵
slave node主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量。除了 在复制完成的时候,需要删除旧的数据,加载新数据集,需要暂停对外服务,其他都可以保证服务不间断。
哨兵解决redis replication高可用问题
哨兵的主要功能:
1.集群监控,负责监控redis master和slave进程是否正常工作。
2.消息通知,如果某个redis实例有故障,那么哨兵负责发消息给系统管理员。
3.故障转移,master node挂掉,进行主从切换。
4.配置中心,主从切换后,通知其他client新的master地址。
哨兵在进行主备转移的时候,是用的majority quorum选举,需要过半数的哨兵节点同意切换才行,所以redis的集群部署是需要三个节点的,才能保证高可用,如果部署两个节点,一个哨兵宕机了,就不能进行主备切换了。
- 哨兵模式的丢失数据问题:
1.异步复制时master宕机,
2.网络分区的脑裂问题
解决方案:配置min-slaves-to-write 1
min-slaves-max-lag 10
有一台从节点落后超过10分钟,master就会拒绝写请求。给时间进行主从复制,client应该要做降级处理,比如双缓冲写入磁盘。同理,网络分区时,如果master发现有slave一直没发送延迟过来(因为分区了,必当有一些slave发不了),超过了配置的lag,则会拒绝client请求,所以这个配置是能够有效减少数据丢失的。
- 哨兵的四个底层原理
sdown和odown的概念;哨兵之间的发现,是通过redis的pub/sub系统实现的;slave配置的自动纠正;slave的选举算法:跟master断开连接的时长,如果slave与master断开连接时间已经超过了down-after-milliseconds的10倍,外加master宕机的时长,那么slave就被认为不适合选举为master,接下来会对slave排序,按照slave优先级进行排序,slave priority越低,优先级越高,如果slave priority相同,那么看offset,offset越后,复制的信息越多,优先级就越高,最后如果都相同,选择run id最小的。
- quorum和majority
quorum数量认为master已经odown,然后选举出一个哨兵进行切换,这个哨兵需要majority哨兵的授权,才能执行切换,如果quorum < majority,比如五个哨兵,majority就是3,quorum设置为2,那么3个哨兵授权就可以切换。但是如果quorum > majority,即如果quorum设置为4,那么需要4个哨兵授权才可以进行切换。