手动主从切换

slaveof no one
slaveof 127.0.0.1:8888
image.png

Sentinel架构

image.png

Sentinel故障转移

image.png
sentinel可以监控多套master-slave
image.png

Sentinel配置

配置Sentinel.conf
image.png
启动Sentinel

  • redis-sentinel /etc/redis/sentinel_master_26379.conf
  • redis-server /xxx/xxx.conf —sentinel

sentinel运行后自动重写sentinel.conf
image.png

Sentinel如何感知其他Sentinel节点的?

配置中没有配置其他Sentinel节点。
【他们是通过Master上的一个pub/sub 机制来交换信息的】
image.png
redis-cli -p 26379 连接到sentinel上使用info命令查看:
image.png

Sentinel如何感知从库的

通过给主库发送info命令
image.png

客户端

客户端从sentinel获取master信息

  1. 客户端遍历Sentinel集合获取一个可用的Sentinel

image.png

  1. 从Sentinel获取Master节点信息

image.png

  1. 节点信息验证

image.png

  1. sentinel客户端订阅sentinel变化

image.png

Jedis使用Sentinel访问

image.png
image.png
JedisSentinelPool#initSentinels初始化方法中去连接每个Sentinel(创建n个线程)。

jedis如何获知master更变

每个线程(client)订阅了”+switch-master”channel
image.png

客户端订阅的三个消息

image.png

读写分离客户端

redis读写分离之lettuce_lipengxs的博客-CSDN博客_lettuce 读写分离

Sentinel三个定时任务【Sentinel运行原理】

Redis Sentinel - 图18
这里只交换元信息,之后的信息可以互相发送吧
Redis Sentinel - 图19Redis Sentinel - 图20

主观下线(sdown):单个sentinel认为下线(ping超过down-after-milliseconds,默认30秒

  • sentinel向其他sentinel发送消息:SENTINEL is-master-down-by-addr

客观下线(odown):多个sentinel认为下线
image.png

Sentinel领导者选举

选一个Sentinel进行故障恢复(raft算法)
sentinel is-master-down-by-addr这个命令有两个作用,一是确认下线判定,二是进行领导者选举。

  1. 当一个sentinel(源sentinel)向另一个sentinel(目sentinel)发送is-master-down-by-addr ip port current_epoch runid命令的时候,runid参数不是,而是sentinel运行id,就表示*源sentinel要求目标sentinel选举其为领头。
  2. 收到命令的sentinel没有同意其他的,就同意这个请求。
  3. 某个sentinel被半数以上的sentinel设置成领头,那么该sentinel既为领头。
  4. 如果有多个sentinel成为领导,等一段时间重新选举。

image.png
Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换) - 散尽浮华 - 博客园

Sentinel如何选择新Master

image.png
image.png

  1. 优先级
  2. 复制偏移量
  3. runId

    Sentinel防止脑裂【有限丢失数据】

    这两个参数只是限制了丢失数据的可控范围。
  • min-slaves-to-write:这个配置项设置了主库能进行数据同步的最少从库数量;(只是当前连接master的slave个数)
  • min-slaves-max-lag:这个配置项设置了主从库间进行数据复制时,从库给主库发送ACK 消息的最大延迟(以秒为单位)。【最多丢失n秒数据】

    举个例子,如果我们向主服务器提供以下设置: min-slaves-to-write 3 min-slaves-max-lag 10 那么在从服务器的数量少于3个,或者三个从服务器的延迟(lag)值都大于或等于10秒时,主服务器将拒绝执行写命令,这里的延迟值就是上面提到的INFO replication命令的lag值。

新版配置

min-replicas-to-write 3 min-replicas-max-lag 10

sentinel命令

手动使用Sentinel转移Master

sentinel failover mastername

查看sentinel 信息

SENTINEL MASTER mastername

删除sentinel

sentinel reset * 向所有其他sentinel实例发送命令

sentinel优缺点

  • sentinel着眼于高可用,Cluster提高并发量。