手动主从切换
slaveof no one
slaveof 127.0.0.1:8888
Sentinel架构
Sentinel故障转移
Sentinel配置
配置Sentinel.conf
启动Sentinel
- redis-sentinel /etc/redis/sentinel_master_26379.conf
- redis-server /xxx/xxx.conf —sentinel
Sentinel如何感知其他Sentinel节点的?
配置中没有配置其他Sentinel节点。
【他们是通过Master上的一个pub/sub 机制来交换信息的】
redis-cli -p 26379 连接到sentinel上使用info命令查看:
Sentinel如何感知从库的
客户端
客户端从sentinel获取master信息
- 客户端遍历Sentinel集合获取一个可用的Sentinel
- 从Sentinel获取Master节点信息
- 节点信息验证
- sentinel客户端订阅sentinel变化
Jedis使用Sentinel访问
JedisSentinelPool#initSentinels初始化方法中去连接每个Sentinel(创建n个线程)。
jedis如何获知master更变
每个线程(client)订阅了”+switch-master”channel
客户端订阅的三个消息
读写分离客户端
redis读写分离之lettuce_lipengxs的博客-CSDN博客_lettuce 读写分离
Sentinel三个定时任务【Sentinel运行原理】
这里只交换元信息,之后的信息可以互相发送吧
主观下线(sdown):单个sentinel认为下线(ping超过down-after-milliseconds,默认30秒)
- sentinel向其他sentinel发送消息:SENTINEL is-master-down-by-addr
Sentinel领导者选举
选一个Sentinel进行故障恢复(raft算法)
sentinel is-master-down-by-addr这个命令有两个作用,一是确认下线判定,二是进行领导者选举。
- 当一个sentinel(源sentinel)向另一个sentinel(目sentinel)发送is-master-down-by-addr ip port current_epoch runid命令的时候,runid参数不是,而是sentinel运行id,就表示*源sentinel要求目标sentinel选举其为领头。
- 收到命令的sentinel没有同意其他的,就同意这个请求。
- 某个sentinel被半数以上的sentinel设置成领头,那么该sentinel既为领头。
- 如果有多个sentinel成为领导,等一段时间重新选举。
Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换) - 散尽浮华 - 博客园
Sentinel如何选择新Master
- 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 信息
删除sentinel
sentinel reset * 向所有其他sentinel实例发送命令
sentinel优缺点
- sentinel着眼于高可用,Cluster提高并发量。