redis sentinel 主从切换(failover)解决方案,详细配置

本文介绍了如何使用Redis Sentinel实现主从切换的集群管理,包括配置步骤、正常运行状态的验证以及故障模拟。通过Sentinel监控,当主Redis服务器宕机时,Sentinel会自动将从Redis切换为主,确保服务的连续性。
摘要由CSDN通过智能技术生成
《Redis源码学习笔记》文章列表 

由于图片较大,缩放较为模糊,请双击打开查看原图 ^_^ 

主从复制简单来说就是把一台redis数据库中的数据同步到另一台redis数据库,并且按照数据流向,数据的发送者我们称作master,数据的接受者 我们称作slave(master/slave的划分并不是那么一定的,譬如B可以作为A的slave,但同时也可以作为C的master),下面就从 slave和master的角度分别说明主从复制流程。 

首先是slave端,对于slave端来说,主从复制主要经历四个阶段: 

第一阶段:与master建立连接 
第二阶段:向master发起同步请求(SYNC) 
第三阶段:接受master发来的RDB数据 
第四阶段:载入RDB文件 

下面我们就通过一个图来概述在每一个阶段中,slave究竟做了些什么: 



关于上图,有一点说明下:redis接收到slaveof master_host master_port命令后并没有马上与master建立连接,而是当执行服务器例行任务serverCron,发现自己正处于 REDIS_REPL_CONNECT状态,这时才真正的向maser发起连接,伪代码: 
Python代码   收藏代码
  1. def serverCron():  
  2.     # 服务器处于REDIS_REPL_CONNECT状态  
  3.     if redisServer.repl_state == REDIS_REPL_CONNECT:  
  4.         # 向master发起连接  
  5.         connectWithMaster()  
  6.     # 其他例行任务(省略)...  


接着我们来看下主从复制过程中,master这边的流程是如何,在具体看细节之前,我们先综合来看master这边主要做的几件事情: 

 

看完这个图,你也许会有以下几个疑问: 

1. 为什么在master发送完RDB文件后,还要定期的向slave发送PING命令? 
2. 在发送完RDB文件之后,master发送的“变更”命令又是什么,有什么用? 

在回答问题之前1,我们先回答问题2: 
master保存RDB文件是通过一个子进程进行的,所以master依然可以处理客户端请求而不被阻塞,但这也导致了在保存RDB文件期间,“键空间” 可能发生变化(譬如接收到一个客户端请求,执行"set name diaocow"命令),因此为了保证数据同步的一致性,master会在保存RDB文件期间,把接受到的这些可能变更数据库“键空间”的命令保存下来, 然后放到每个slave的回复列表中,当RDB文件发送完master会发送这些回复列表中的内容,并且在这之后,如果数据库发生变更,master依然 会把变更的命令追加到回复列表发送给slave,这样就可以保证master和slave数据的一致性!相关伪代码: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值