redis--Sentinel
- 由一个或多个Sentinel实例组成的Sentinel系统,
- 可以监视任意多个主服务器,以及这些主库下面的从库
- 并在主库掉线之后,自动选择某个从库作为新的主库。
- 初始化服务器
- 将普通Redis服务器使用的代码替换成Sentinel 专用代码
- 初始化Sentinel状态
- 根据给定的配置文件,初始化Sentinel的监控主服务器列表
- 创建连向主服务器的网络连接
- 普通服务器初始化时会载入RDB文件或AOF文件来还原数据库状态
- sentinel 并不使用数据库,初始化Sentinel时不会载入RDB文件或AOF文件
- 端口号
- redis常用端口号 6379
- sentinel常用端口号 26379
- 命令表
- redis--redisCommandTable
- 如 set,get,script 等等键值对命令
- sentinel --sentinelcmds
- 仅包含7个命令
- ping,sentinel,info,
- subscribe,unsubscribe,psubscribe,punsubscribe
- 字典的键是被监视主服务器的名字
- 字典的值则是被监视主服务器对应的 结构
- 实例结构的属性有很多
- 命令连接
- 专门用于向主库发送命令,接收命令回复。
- 订阅连接
- 专门用于订阅主库的__sentinel__:hello频道
- 在Redis目前的发布与订阅功能中,被发送的信息都不会保存在redis服务器里面。
- 如果在发送信息时,想要接收信息的客户端不在线或者断线,那么这个客户端就会丢失这条信息。
- 因此,为了不丢失__sentinel__:hello 频道的任何信息,Sentinel必须专门用一个专门连接 接收频道信息
- 主库本身信息
- run_id,role域记录的服务器角色
- 主库下面所有从库信息
- slave的id,ip,port,state,offset,lag 等等信息。
- +PONG,-LOADING,-MASTERRDOWN
- 当sentinel 将一个主服务器判断为 主观下线之后,为了确认是否真的下线了。
- 它会向同样监视着以主服务器的其他sentinel 进行询问,
- 看它们是否也认为主服务器已经进入下线状态(可以是主观下线或客观下线)。当sentinel 从其他
- sentinel 接收到足够数量的已下线判断后,sentinel 就会将主服务器判定为客观下线,并执行故障转移操作
- <down_state>
- 1 主库已下线,0 主库未下线
- <leader_runid>
- *
- 仅用于检测主库下线的标志
- 局部领头sentinel 的运行ID
- 用于选举领头sentinel ID
- <leader_epoch>
- 局部领头sentinel 的配置纪元
- 用于选举领头sentinel
- 仅在<leader_runid>不为* 时有效,为* 时,其值始终为0
- 当主库被判断为客观下线时,监视这个主库的各个sentinel 会进行协商,
- 选出一个领头sentinel,并由其来执行对下线主库的故障转移
- 所有在线Sentinel 都有被选为领头Sentinel的资格
- 每次进行领头Sentinel选举后,无论是否成功,所有sentinel 的配置纪元(configuration epoch) 自增一次
- 配置纪元实际就是一个计数器,没有特殊作用
- 所有sentinel 只能选择一个 sentinel 作为领头,并且局部领头 sentinel 一旦设置,在这个配置纪元就不能修改
- 每个发现主库进行客观下线的sentinel都会要求设置它自己为领头
- 当发送命令中runid 不是* 而是源sentinel 本身的 id,
- 则要求其他sentinel将其本身设置为领头
- 目标sentinel设置领头 规则是先到先得
- sentinel一旦设置某为领头,则其余的要求都会被拒绝
- 设置的方法,就是命令的回复
- leader_runid 和 leader_epoch
- 源sentinel接收到回复之后
- 检查回复中的leader_epoch,leader_runid 是否 符合本身的current_epoch ,runid
- 如相同则表示 其已被设置为领头
- 如某个Sentinel 被半数以上的Sentinel 设置为局部领头,那么此Sentinel 成为领头Sentinel。
- 因领头Sentinel 需要得到半数以上的支持,且每个Sentinel在每个配置纪元中,只有一次投票权
- 所以 在每个配置纪元中,只会出现一个领头Sentinel。
- 如果在规定时间内,没有选出领头,则各个Sentinel将在一段时间后再次选举,直到选出领头Sentinel为止。
- 在所有从库中,选出一个从库作为新的主库
- 将所有剩下的从库改为复制新的主库
- 将源主库设置为新的主库的从库
- 这个源主库重新上线时,它会成为新主库的从库
- 删除所有处于下线或断线的从库,保证剩余从库都是正常在线
- 删除最近5秒没有回复过领头sentinel的INFO命令的从库
- 保证剩余从库都是最近成功通信过的
- 删除所有与源主库连接断开超过 down-after-milliseconds*10 的从库
- 保证剩余从库保存的数据都是较新的
- 领头sentinel根据从库的优先级,进行排序,选择优先级最高的从库
- sentinel 是一个特殊模式下的redis服务器。
- 使用了不同的命令表;
- sentinel 读取配置文件
- 为每个主库创建实例结构,并创建连接
- sentinel 默认每十秒 发送INFO命令 检测服务器是否在线
- 对于监视同一服务器的多个sentinel,它们会每两秒一次,通过被监视的服务器的频道
- __sentinel__:hello 频道发送消息,向其他sentinel宣告自己的存在
- 多个sentinel 之间也会创建连接,用于传送命令
- sentinel只会与主服务器和从服务器来创建命令连接和订阅连接
- sentinel 与 sentinel 之间只创建命令连接
- sentinel 默认每秒向实例(包括主库,从库,其他sentinel)发送ping 命令,
- 根据实例对返回,判断实例是否在线
- 当实例在指定时间内连续回复无效信息,则主库将判断为主观下线
- 当sentinel 判断一个主库为主观下线,他会向其他sentinel 询问,看它们是否同意这个主库进入主观下线状态
- 当sentinel收到足够多的主观下线投票之后,它会将主服务器判断为客观下线。
转载于:https://www.cnblogs.com/Aiapple/p/7272834.html
redis--Sentinel相关推荐
- redis sentinel集群配置及haproxy配置
ip分布情况: sentinel-1/redis 主 10.11.11.5 sentinel-2/redis 从 10.11.11.7 sentinel-3/redis 从 10.11.11.8 ha ...
- Redis、Redis+sentinel安装(Ubuntu 14.04下Redis安装及简单测试)
Ubuntu下Redis安装两种安装方式: 1.apt-get方式 步骤: 以root权限登录,切换到/usr目录下. 接下来输入命令,apt-get install redis-server,如图: ...
- Redis Sentinel 服务端实现原理
2019独角兽企业重金招聘Python工程师标准>>> Redis主从复制-master 高可用解决方案 三个定时任务 1.每10秒每个sentinel对master和slave执行 ...
- Redis Sentinel机制与用法
概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都 ...
- windows redis sentinel install
windows redis sentinel install 1.下载 Redis-x64-2.8.2400 https://github.com/ServiceStack/redis-windows ...
- redis sentinel 主从切换(failover)解决方案,详细配置
主从复制简单来说就是把一台redis数据库中的数据同步到另一台redis数据库,并且按照数据流向,数据的发送者我们称作master,数据的接受者我们称作slave(master/slave的划分并不是 ...
- Redis Sentinel集群部署
目录 实验环境 机器规划 原理说明 主从复制存在的问题 Redis Sentinel方案 安装部署 1.配置并启动Master节点 2.配置并启动两个Slave节点 3.验证主从关系 部署Sentin ...
- Redis|Sentinel 高可用架构
一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...
- 【Redis】使用Redis Sentinel实现Redis HA
阅读目录 简单介绍 章节1:配置Sentinel.conf 章节2:启动Redis Sentinel 章节3:关闭master redis,测试failover 章节4:重新切换为最初的master ...
- Redis Sentinel 配置文件
基础参考:https://www.cnblogs.com/wang-li/p/9955303.html 配置文件讲解 1.sentinel monitor # sentinel monitor < ...
最新文章
- 软件工程--总作业(已经完成)
- 大新闻!HTC旗舰手机已原生支持BCH
- java 初始化二维数组_java二维数组的常见初始化
- 【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题---WebApi环境搭建运行发布部署篇...
- 还在用Tensorboard?机器学习实验管理平台大盘点
- android 微信支付测试,求大神指导一下!!!android开发,测试demo按步骤配置,无法调用到微信支付...
- oracle/PL/SQL编程(4)
- Java自动化测试框架-02 - TestNG之理论到实践 - (详细教程)
- CentOS SVN 服务器搭建
- git冲突解决方案 Intellij IDEA
- strspn和strcspn妙用
- 网络数据抓包分析工具Debookee 8 for Mac
- 数据分析师出品丨采购周报模板
- 阿里对高管的要求,不得不服
- 中文版智能ABC如何移植到英文OS
- 世界一流水平的中国 10 大顶尖科学家
- JAVA用数据留给出师表排序,如果诸葛亮会编程,用Java写出师表...
- C++对象模型——Member的各种调用方式(第四章)
- 深圳农家乐凤凰山田中园团建拓展野炊做饭基地
- 光伏系统MPPT、恒功率控制切换MATLAB仿真
热门文章
- PHP安装编译错误及解决办法
- web服务器 字体.svg/.woff/.woff2 404错误 解决方案
- how to check unsolved conflicts file list in git merge?
- Android OpenGL ES 开发教程(20):颜色Color
- C# 设置Menustrip提示框的显示
- 在企业环境中部署 Microsoft Windows 恶意软件删除工具
- 使用brew安装Logstash(Mac)
- linux每一个账号都须具备,Linux 用户管理
- 我的机器学习入门之路(下)——知识图谱、推荐、广告
- Leetcode 375. 猜数字大小 II 解题思路及C++实现