Redis进阶底层原理 - 高可用哨兵模式

Redis哨兵模式是redis实现高可用的一种分布式架构。哨兵节点是一种特殊的Redis实例,它不用于存储业务数据,它主要工作内容如下:(高可用不是指不出问题,而是出了问题后能及时的自动化解决,从而在客户端无感)

1、集群监控(monitor):哨兵可以通过定时任务不断的监控集群中的主从节点信息状态,检查主从节点是否正常运行。

2、提醒:当哨兵监控到集群中某个服务出现问题后,可以通过API进行消息通知给管理员。

3、故障转移:故障转移是Redis哨兵模式中最核心的功能。哨兵在发现某个主节点服务故障时(主观下线),哨兵之间会通过流言协议通讯,确定主节点是否客观下线,当主节点客观下线时,会通过故障转移流程将当前主节点的某个从节点选举作为主节点。同时完成其他节点信息更新等过程,来实现redis的高可用。同时哨兵也会向主从节点发送config rewrite命令来持久化更新配置信息。

4、配置中心:当发生故障转移后,会返回给客户端新的master信息。

集群监控(monitor)

哨兵核心通过三个定时任务来实现信息同步和监控,从而完成对集群服务的监控。每个哨兵都会维护一个信息表(集群的拓扑图数据),主要内容包括主从信息、哨兵信息、状态等等(可以通过info sentienl查看)。

 

 

主观下线、客观下线 

主观下线(sdown):

个哨兵会每秒一次(心跳定时任务)的向集群中的主从服务器发送ping命令,如果在规定的时间范围内(master-down-after-miliseconds)没有得到有效的回复结果,则该哨兵会将当前服务器状态设置为主观下线。
因为当前状态只是当前哨兵的判定结果,不能作为一个最终结果(因为可能是哨兵本身出问题了),所以叫做主观下线。

客观下线(odown):

当某一个哨兵发现主服务器处于主观下线状态,然后会以流言协议的方式来判断是否将其升级为客观下线。流言协议的方式:当哨兵发现主服务器处理主观下线状态时,会向其他哨兵发送SENTINEL is-master-down-by-addr,来判断其他哨兵是否也是观察到其下线了,如果在给定时间范围内(比如10秒内,大部分的哨兵都认为它下线了)确认主观下线的哨兵数 >= (quorum设定的权重数),则认定为当前主服务器为客观下线,此时就会开始后续的故障转移操作。

故障转移

哨兵模式的自动故障转移是redis实现高可用的方式。它是实现了当主服务器出现故障后,能自动的将其从节点替换成主节点的过程。(高可用不是代表不出问题,而是出问题后怎么自动化处理,让客户端无感)

 

 

 原图地址:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28359.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4/5AI制作基础AI(适合新手入门,运用黑板,行为树,ai控制器,角色类,任务)

目录 制作流程 第一步:创建资产 然后创建一个AIController 之后创建一个黑板和行为树: 第二步:制作 黑板 行为树 任务 运行行为树 结果 制作流程 第一步:创建资产 第一步直接复制你的人物蓝图,做一个npc&…

MobPush:Android SDK 集成指南

开发工具:Android Studio 集成方式:Gradle在线集成 安卓版本支持:minSdkVersion 19 集成准备 注册账号 使用PushSDK之前,需要先在MobTech官网注册开发者账号,并获取MobTech提供的AppKey和AppSecret,详情可…

STM32 ws2812b多屏驱动程序

文章目录 前言一、ws2812b的数据传输以及屏幕的组合二、代码ws2812screen.c文件ws2812screen.h文件主函数 前言 在上篇文章中使用了stm32的dmatim的方式点亮了ws2812b的灯 但是我的需求不仅仅是点亮他,我需要他像屏幕一样显示某一些东西,ws2812显示有一…

吴恩达ML2022-用于手写数字识别的神经网络

1 用到的包 导入在这个分配过程中需要的所有包。 Numpy 是使用 Python 进行科学计算的基本软件包。Matplotlib 是在 Python 中绘制图形的流行库。tensorflow是一种流行的机器学习平台。 import numpy as np import tensorflow as tf from tensorflow.keras.models import Se…

【运维】第04课:入口网关服务注册发现-Openrety 动态 uptream

本课时,我将带你一起了解入口网关服务的注册发现,并使用 OpenResty 实现一套动态 Upstream。 课前学习提示 基于本课时我们将要学习的内容,我建议你课前先了解一下 Nginx 的基础,同时熟悉基础的 Lua 语言语法,另外再回顾一下 HTTP 的请求过程,对于 Nginx 的负载均衡基本…

idea新建xml模板设置,例如:mybatis-config

在idea怎么新建mapper.xml文件&#xff0c;具体操作步骤和结果如下&#xff0c;其他文件也是可以自定义模板的流程和步骤一致&#xff01; 效果如下&#xff1a; 步骤如图&#xff1a; step1&#xff1a; step2&#xff1a; 文件内容&#xff1a; <?xml version"…

vue复习

1.mustache动态插值 <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initial-scale…

常见的前端安全以及常规安全策略

1、CSRF&#xff1a;跨站请求伪造&#xff08;Cross-site request forgery&#xff09;&#xff1b; 原理&#xff1a; &#xff08;1&#xff09; 用户C打开浏览器&#xff0c;访问受信任网站A&#xff0c;输入用户名和密码请求登录网站A&#xff1b; &#xff08;2&#xff…

python VTK vtkImplicitBoolean 布尔切割

VTK中包含可以执行布尔操作的接口有vtkImplicitBoolean&#xff0c;vtkBooleanOperationPolyDataFilter&#xff0c;vtkLoopBooleanPolyDataFilter。 布尔操作包括&#xff1a;布尔加&#xff0c;布尔减和布尔交。 code: #!/usr/bin/env python""" This examp…

阿里云 OSS 静态网站托管

本文节选自我的博客&#xff1a;阿里云 OSS 静态网站托管 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是MilesChen&#xff0c;偏前端的全栈开发者。&#x1f4dd; CSDN主页&#xff1a;爱吃糖的猫&#x1f525;&#x1f4e3; 我的博客&#xff1a;爱吃糖的猫&…

基于虚拟同步发电机控制的双机并联MATLAB仿真模型

使用MATLAB2021b打开 主要内容&#xff1a; 功率计算模块、虚拟同步发电机控制模块、电压合成模块、电压电流双环控制模块&#xff01; 1.两台VSG并联&#xff0c;开始各自带负载10KW&#xff0c;在0.3秒的时候加入公共负载10KW&#xff0c;稳定后两台VSG可以均分公共负载的…

数据结构--时间复杂度与空间复杂度

数据结构–时间复杂度与空间复杂度 文章目录 数据结构--时间复杂度与空间复杂度时间复杂度一、什么是时间复杂度二、具体实例1.大O的渐进表示法2.二分查找的时间复杂度 空间复杂度一、什么是空间复杂度二、具体实例总结 时间复杂度 一、什么是时间复杂度 在计算机科学中&…