Redis——9. 哨兵机制
sentinel初始化
sentinel运作
- 监控:如何获取主服务器,从服务器,其他哨兵的状态信息
- 提醒:如何与主从服务器沟通
- 检测下线状态:当有主服务器下线时,如何检测
- 自动故障迁移
1.Sentinel启动与初始化
启动命令:
redis-sentinel /path/to/your/sentinel.conf
初始化步骤:
- 启动服务器,使用sentinel专用代码
- 初始化SentinelState,建立与主服务器的连接
(1)初始化服务器
具体步骤与服务器初始化差不多,但是少了点步骤,比如不会进行RDB/AOF恢复
(2)使用sentinel专用代码
比如:
1.使用 define REDIS_SENTINEL_PORT 26379 作为端口号
2.命令表不一样,只有一些简单的命令
(3)初始化SentinelState
sentinelState专门记录与哨兵有关的状态
sentinelRedisInstance用来记录每个被监视的服务器的消息,这些服务器可以是主服务器,从服务器,或者其他sentinel。其中比较重要的属性有addr(记录这个服务器的ip+端口号),slaves字典(记录它的从服务器),sentinels(监视它的其他sentinels)
struct sentinelState {// 当前纪元,用于实现故障转移uint64_t current_epoch;// 保存了所有被这个 sentinel 监视的主服务器// 字典的键是主服务器的名字// 字典的值则是一个指向 sentinelRedisInstance 结构的指针dict *masters;// 是否进入了 TILT 模式?int tilt;// 目前正在执行的脚本的数量int running_scripts;// 进入 TILT 模式的时间mstime_t tilt_start_time;// 最后一次执行时间处理器的时间mstime_t previous_time;// 一个 FIFO 队列,包含了所有需要执行的用户脚本list *scripts_queue;} sentinel;
struct sentinelRedisInstance {// 标识值,记录了实例的类型,以及该实例的当前状态int flags;// 实例的名字// 主服务器的名字由用户在配置文件中设置// 从服务器以及Sentinel的名字由Sentinel自动设置// 格式为ip:portchar *name;// 实例的运行IDchar *runid;// 配置纪元,用于实现故障转移unit64_t config_epoch;// 实例的地址sentinelAddr *addr;// 实例无响应多少毫秒之后才会被判断为主观下线mstime_t down_after_period;// 判断这个实例为客观下线所需的支持投票数量int quorum;// 在执行故障转移操作时,可以同事对行的主服务器进行同步的从服务器数量int parallel_syncs;// 刷新故障迁移状态的最大时限mstime_t failover_timeout;// 一个主服务器所有从服务器实例dict *slaves;// 监视这个主服务器的所有sentinels实例dict *sentinels;// ...
} sentinelRedisInstance;
(4)连接主服务器
最后一步是创建与主服务器的网络连接。sentinel会创建两个连接:命令连接+订阅连接(__sentinel__:hellp频道)
2.监控
这里监控指:sentinel维护其他主服务器,从服务器,sentinel的状态信息
(1)获取主服务器状态信息
默认每10秒给主服务器发送INFO命令,更新sentinelRedisInstance的信息。
INFO指令返回的信息如下图所示。
(2)获取从服务器状态信息
根据从主服务器那里获取的信息,再对从服务器们创建命令连接和订阅连接,并更新
默认每10秒给从服务器发送INFO命令,获取从服务器信息(如:run_id,角色role,主服务器的ip和端口,连接状态,优先级,偏移量)
(3)获取其他哨兵状态信息
由于Sentinel会用订阅模式给 __sentinel__:hello 频道发信息,每个sentinel收到该信息时:
- 如果判断出是自己发送的,则忽略
- 如果是其他sentinel发送的,则将那个sentinel更新到sentinelRedisInstance中
(4)每个主服务器的sentinelRedisInstance如下图所示
3.提醒
这里提醒是指:sentinel向其他发送消息
(1)向主服务器和从服务器发送信息
默认情况下,每2秒发送订阅信息(s_*:自己的信息,m_*:主服务器的信息)
- 如果发送给主服务器,那么m_*就是它的信息
- 如果发送给从服务器,那么m_*就是它的主服务器的信息
(2)接受主服务器和从服务器的信息
sentinel订阅了 __sentinel__:hello 频道的信息
4.检测下线状态
检查主观下线(发现某一master可能下线)——> 检查客观下线(询问其他哨兵,确定是否下线) ——> 选举领头
(1)主观下线:自己判断
Sentinel会以每秒1次的频率发送给(从服务器+主服务器+其他哨兵)PING命令。
有效回复为: PONG, LOADING, MASTERDOWN。其他都为无效回复
Sentinel配置文件中的 down-after-milliseconds指定了时间。
eg. sentinel down-after-milliseconds master 50000。
如果master在50秒内都没有进行有效回复,则sentinel认定它已经下线。并把对应的master的flags增加一个标志位 SRI_S_DOWN
(2)客观下线:询问其他
当sentinel主观判断一个主服务器下线后,为了再次确认,会向其他sentinel询问。
2.1 先向其他sentinel发送命令
SENTINEL is-master-down-by-addr <ip> <port> <current_epoch> <runid>
//ip,port为被判断下线的主服务器的ip和port
//current_epoch为配置纪元
//runid:1. * :向其他哨兵检测客观下线
// 2. sentinel的运行id:判断完客观下线后,用于选举领头sentinel
2.2 其他sentinel的回复
<down_state> //1代表判断主服务器已经下线;0代表未下线<leader_runid> //*:代表检测下线的回复//runid:用于选举领头哨兵
<leader_epoch> //当runid=*时:总是为0,无意义//选举时,有效eg.
1) 1
2) *
3) 0这个消息代表其他sentinel也同意服务器下线
2.3 收到其他sentinel的回复
当收到的回复大于一定数量(根据配置信息),该sentinel会认定该主服务器已经客观下线,再增加一个标志位 SRI_O_DOWN
配置: sentinel monitor master 127.0.0.1 6379 5
表示 >=5个时,就认定已经客观下线
(3)选举领头
当一个sentinel主观客观检测都判断主服务器下线后,会继续发送 is-master-down-by-addr 指令。
不过这次的 runid不再是*, 而是自己的id。
每个sentinel在同一个epoch中只能投一票,对最先收到的那个sentinel进行回复投票,内容如 2.2。
当某个sentinel收到的票数>n/2时(比如,n=10,则需要6票),它将成为领头哨兵
5.故障转移
流程:
(1)挑选新的主服务器
(2)让所有从服务器复制新的主服务器
(3)让原来的主服务器变成从服务器
1.选出新的主服务器
领头sentinel会选出新的主服务器,要求如下
(1)必须在线
(2)响应快的(最近与领头sentinel成功通信过的)
(3)最近与原来的主服务器保持联系的(换句话说,从服务器中保存的数据都是比较新的)
(4)如果有多个满足,则排序:优先级——offset——runid
选出新主服务器后,领头sentinel会给其发送 slaveof no one 命令
发送完后,领头sentinel会以每秒一次给它发送INFO命令,当返回的角色从slave变成master后,就确认成功了
2.修改从服务器的复制目标
给其他从服务器发送 slaveof 命令
3.将旧的主服务器变成从服务器
当旧服务器上线时,向其发送 slaveof 命令
Redis——9. 哨兵机制相关推荐
- Redis的哨兵机制 或者心跳机制 模式 原理详解
转载自 https://blog.csdn.net/yswKnight/article/details/78158540 一.什么是哨兵机制? 答:Redis的哨兵(sentinel) 系统用于管理多 ...
- Redis的哨兵机制你知道多少撒
有眼光啊,这么多文章你点开了我,缘分,如果我没猜错的话,你是个有梦想的人,是个热爱技术的人,我们一起 手牵手撒 ?(暗示关注~~) 捞一下前面的Redis文章,这是一个系列啊,后续还会出更多Redi ...
- (四)Redis——搭建哨兵机制
一位爱好技术的橘右京的哥哥橘左京 1. 哨兵机制(windows) 1.1 单台哨兵搭建 1.2 哨兵集群搭建 1.3 哨兵集群测试 1.4 哨兵解读 1. 哨兵机制(windows) 为了解决主从复 ...
- 缓存框架——Redis的哨兵机制
文章目录 1. 哨兵任务 2. 哨兵的定时监控任务 2.1 任务1 2.2 任务2 2.3 任务3 3. 主观下线和客观下线 3.1 主观下线 3.2 客观下线 3.3 领导者哨兵选举流程 4. 故障 ...
- redis的哨兵机制
redis哨兵 Redis Sentinel,即Redis哨兵.哨兵的核心功能是主节点的自动故障转移.对比主从复制 redis主从复制 来说,哨兵不需要手动修改主从关系以及配置文件端口等信息,一个节点 ...
- Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透
Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透 简单介绍一个redis? redis是内存中的数据结构存储系统,一个key-value类型的非关系型数据库,可持久化的数据库 ...
- redis 哨兵_Redis哨兵机制的原理介绍
php中文网最新课程 每日17点准时技术干货分享 本篇文章给大家带来的内容是介绍Redis的哨兵机制,让大家了解哨兵机制的原理和如何实现.有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. ...
- Redis高可用方案哨兵机制------ 配置文件sentinel.conf详解
Redis的哨兵机制是官方推荐的一种高可用(HA)方案,我们在使用Redis的主从结构时,如果主节点挂掉,这时是不能自动进行主备切换和通知客户端主节点下线的. Redis-Sentinel机制主要用三 ...
- redis主从复制和哨兵机制
一.Redis主从复制 主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性 1. 主从复制的相关操作 a,配置主从复制方式一.新增redis6380.conf, ...
最新文章
- msf反弹shell
- 支持向量机学习笔记1
- Please use HDF reader for matlab v7.3 files
- python进行图片的定位切割_python3 实现对图片进行局部切割的方法
- 1.10 梯度消失与梯度爆炸-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
- VTK:简单操作之ProjectPointPlane
- Linux包管理速查表
- 什么是HDMI视频光端机?
- Dell Latitude D630 无法wubi安装Kubuntu
- selenium和PhantomJS的使用
- CS231N课程笔记学习一——图像分类
- nginx limit_req限速设置
- 《HBase权威指南》读书笔记3
- 【论文解读】VDN( Variational Denoising Network )变分去噪网络
- 三角函数中和差角公式的编辑方法
- 浅析大数据与传统经济学
- FFplay文档解读-47-多媒体过滤器一
- 制图操作案例:ArcGIS Pro鹰眼图快速制图
- 初识C语言之详解char类型
- 为什么硬盘明明还有空间,linux却说硬盘空间不足?inode;mkdir: 无法创建目录shen1: 设备上没有空间
热门文章
- 页面禁止保存、复制、右键、查看源代码、下载、嵌套等【js禁用】【js屏蔽快捷键】
- 跨模态语义关联对齐检索-图像文本匹配(Image-Text Matching)CVPR2022
- 计算机应用期刊查重嘛,关于期刊投稿,你所碰到的几件事
- Tmux 学习摘要3--使用脚本定制 tmux 环境
- CoreOS 系统安装后的简单配置-允许root以ssh登录等(二)
- thinkphp5多级控制器及其使用
- 第七章 在Linux搭建简单的web服务器
- Ledger增加浏览器扩展,将硬件钱包与Web 3应用程序连接起来
- 从高德上同步省市区行政区划数据到本地数据库demo
- 隔离型串口服务器和西门子1500PLC和通讯案例