Redis Sentinel

news2024/11/16 21:21:50

高可用架构-Redis Sentinel

Replication 缺点

接着之前的Redis Replication 主从复制架构,看似解决了主节点并发过大时,master节点处理繁忙的问题。将一部分读数据的请求交给从节点处理,从而将请求进行分散处理。但是该架构却存在很明显的缺陷:

  • 主节点写请求过大,从节点数据同步存在延迟。该架构适用于数据实时性要求不高的场景
  • 从节点宕机、数据延迟过大时,一些特殊的场景会存在问题,如使用Redis实现分布式锁,锁失效问题
  • 节点宕机 不能自动进行服务重启、故障转移 需要人工干预

关于Redis Replication 环境搭建请点击**这里**

主节点宕机

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=::1,port=6380,state=online,offset=21996,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=21996,lag=1
....

如上图,现在一主两从的复制架构,运行正常。现在人工模拟下主节点宕机,使用 kill 命令杀掉进程:

# 查找pid
AndydeMacBook-Pro:~ andy$ ps -ef | grep redis
  501 93666     1   0 五04上午 ??         0:51.18 redis-server 127.0.0.1:6380 
  501 93670     1   0 五04上午 ??         0:52.42 redis-server 127.0.0.1:6379 
  501 97406     1   0 11:14上午 ??         0:02.56 redis-server 127.0.0.1:6381 
# 杀死进程
AndydeMacBook-Pro:~ andy$ kill -9 93670

从节点状态

使用redis-cli客户端分别查看6380、6381的服务状态。

AndydeMacBook-Pro:~ andy$ redis-cli -p 6380
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:localhost
master_port:6379
master_link_status:down
AndydeMacBook-Pro:~ andy$ redis-cli -p 6381
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:down

人工干预

  • 直接重启主节点

  • 主节点服务器不可用 - 人工设置其他节点为主节点

    # 设置6381 为主节点
    AndydeMacBook-Pro:~ andy$ redis-cli -p 6381
    127.0.0.1:6381> slaveof no one
    OK
    
    # 查看服务状态 已经为master节点 但是没有从节点连接
    127.0.0.1:6381> info replication
    # Replication
    role:master
    connected_slaves:0
    master_failover_state:no-failover
    
    # 设置6380端口为从节点
    AndydeMacBook-Pro:redis-stable andy$ redis-cli -p 6380
    127.0.0.1:6380> slaveof localhost 6381
    OK
    
    # 重新查看主节点 连接状态 此时 6380 已经连接
    127.0.0.1:6381> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=::1,port=6380,state=online,offset=42,lag=1
    

注意: slaveof 命令的有效期只针对当前Redis实例,当Redis重启时,设置失效,更为保险的方法是将相关的设置放到redis.conf 配置文件中。

至此处理完毕,过程不免有些繁杂。当Redis集群非常庞大时,人工干预的过程会演变成巨大的工作量。其次,主节点宕机会造成主从架构所有写请求失败,从而导致整个应用系统不可用,因此需要更为合理的架构解决该问题。Redis Sentinel应运而生。

Sentinel 架构

Redis Sentinel是用于故障自动发现、自动切换的一套高可用的服务架构,其目的是为了解决生产环境中Redis的单点故障。通常情况下Sentinel需要监多个redis实例,并作为决策者,底层原理是利用ping-pong 确定Redis实例的存活状态,当检测到Redis实例不可用时,自动进行切换。

这个流程对Redis-Client 是透明的,无感的。简而言之,Sentinel是Redis的故障切换管理器。今天来学习下,如何使用Sentinel在单机部署一个简单的高可用性Redis架构,如下图所示:

在这里插入图片描述

新增配置

# 在sentinel.conf 配置文件中加入一下配置
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel down-after-milliseconds mymaster 10000

语法说明:

sentinel monitor <master-group-name> <ip> <port> <quorum>
# <master-group-name> - 集群名称
# <ip> - ip
# <port> - port
# <quorum> - Sentinels集群检测故障的数量 如配置为2 则表示至少需要2个sentinel节点认证节点不可达,才踢出集群
sentinel <option_name> <master_name> <option_value>
# <master-group-name> - 集群名称
# <option_name>
# 		down-after-milliseconds - 指定毫秒时间内 收不到ping心跳信息 则踢出集群,此时 <option_value> 为时间
#			parallel-syncs - 指定重新选取主节点时,从节点并行同步的数量 设置为1 则表示 每次只能复制一个

启动sentinel

# redis 安装完成后 相关脚本在 /usr/local/bin/ 目录下,包含 redis-sentinel
AndydeMacBook-Pro:redis-stable andy$ redis-sentinel sentinel.conf 

在这里插入图片描述

查看状态

redis-cli -p 26379 sentinel masters

在这里插入图片描述

验证测试

至此Redis Sentinel 架构已经在本地机器搭建完毕,现在手动关闭主节点,确认是否会自动进行转移

AndydeMacBook-Pro:replica andy$ ps -ef | grep redis
  501 98417     1   0 12:36下午 ??         0:01.44 redis-server 127.0.0.1:6379 
  501 98422     1   0 12:37下午 ??         0:01.34 redis-server 127.0.0.1:6380 
  501 98424     1   0 12:37下午 ??         0:01.36 redis-server 127.0.0.1:6381 
  501 98410 93729   0 12:36下午 ttys001    0:00.90 redis-sentinel *:26379 [sentinel] 
AndydeMacBook-Pro:replica andy$ kill -9 98417

在这里插入图片描述

如上图,从Sentinel的输出的信息中得知 主节点已经自动转移到6381端口。

重启6379节点,查看确认是否为6381的从节点

AndydeMacBook-Pro:replica andy$ redis-cli -p 6381 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=54013,lag=1
slave1:ip=127.0.0.1,port=6379,state=online,offset=54013,lag=1
master_failover_state:no-failover
....

常用命令

# 获取指定集群的主节点 ip 地址
AndydeMacBook-Pro:~ andy$ redis-cli -p 26379
127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6381"
# 设置集群 下线检测时间
127.0.0.1:26379> SENTINEL SET mymaster down-after-milliseconds 1000
OK
# 设置集群 下线判断数量 
127.0.0.1:26379> SENTINEL SET mymaster quorum 5
OK
# 设置集群 连接账号、密码
sentinel auth-user mymaster username
sentinel auth-pass mymaster password

总结

Redis Sentinel架构使用故障自动转移的机制,解决主从复制架构中,主节点出现单点故障的问题,通过选举机制实则其他从节点升级为主节点。从而让整个架构故障自动转移、平滑过渡、无需运维人员手工干预。在分布式环境下,Redis Sentinel 被设计为多个Sentinel 进程协同工作,Sentinel 集群的优势包含:

  • 降低误报 - 多个Sentinel一致认为给定的主机不再可用时,执行故障检测。这降低了误报的概率。
  • 解决单点故障 - 即时小部分Sentinel节点出现故障,整个Sentinel集群也能正常运行,提高系统高可用性

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于LEACH的随机网络生成无线传感器网络路由协议的仿真比较(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【深度学习】超详细的 PyTorch 学习笔记(上)

文章目录一、PyTorch环境检查二、查看张量类型三、查看张量尺寸和所占内存大小四、创建张量4.1 创建值全为1的张量4.2 创建值全为0的张量4.3 创建值全为指定值的张量4.4 通过 list 创建张量4.5 通过 ndarray 创建张量4.6 创建指定范围和间距的有序张量4.7 创建单位矩阵&#xf…

【力扣算法简单五十题】23.环形链表

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索…

基于多种优化算法及神经网络的光伏系统控制(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;本科计算机专业&#xff0c;研究生电气学硕…

NNDL 实验八 网络优化与正则化(3)不同优化算法比较

文章目录7.3 不同优化算法的比较分析7.3.1 优化算法的实验设定7.3.1.1 2D可视化实验7.3.1.2 简单拟合实验7.3.1.3 与Torch API对比&#xff0c;验证正确性7.3.2 学习率调整7.3.2.1 AdaGrad算法7.3.2.2 RMSprop算法7.3.3 梯度估计修正7.3.3.1 动量法7.3.3.2 Adam算法7.3.4 不同优…

【并发】深度解析CAS原理与底层源码

【并发】深度解析CAS原理与底层源码 什么是 CAS&#xff1f; CAS全称是&#xff08;Compare And Swap&#xff0c;比较并交换&#xff09;&#xff0c;通常指的是这样一种原子操作&#xff08;针对一个变量&#xff0c;首先比较它的内存值与某个期望值是否相同&#xff0c;如…

不就是Redis吗?竟让我一个月拿了8个offer,其中两家都是一线大厂

在高并发的场景Redis是必须的&#xff0c;而 Redis非关系型内存存储不可谓不彪悍。 支持异步持久化达到容灾&#xff1a;速度快、并发高。官方号称支持并发11万读操作&#xff0c;并发8万写操作。惊了吗&#xff1f; 支持数据结构丰富&#xff1a;string&#xff08;字符串&a…

盘点5种最频繁使用的检测异常值的方法(附Python代码)

本文介绍了数据科学家必备的五种检测异常值的方法。 无论是通过识别错误还是主动预防&#xff0c;检测异常值对任何业务都是重要的。本文将讨论五种检测异常值的方法。 文章目录什么是异常值&#xff1f;为什么我们要关注异常值&#xff1f;技术提升方法1——标准差方法2——箱…

【OpenEnergyMonitor】开源的能源监控系统--项目介绍

OpenEnergyMonitor1. 系统框架2.项目组成2.1 emonPi模块:2.1.1 emonpi的安装&#xff1a;2.1.2 emonTx & emonBase 安装2.1.3 emonTx Wifi 安装&#xff1a;2.1.4 添加额外的 emonTx 节点&#xff1a;2.1.5 添加额外的emonTx-节点监控三项电源2.1.6 添加 emonTH 温度节点2.…

【Vue核心】8.计算属性

1. 定义: 要用的属性不存在,要通过已有属性计算得来。 2. 原理 底层借助了objcet.defineproperty方法提供的getter fllsetter. 3. get两数什么时候执行? (1),初次读取时会执行一次。 (2),当依赖的数据发生改变时会被再次调用。 4. 优势 与methods实现相比,内部有缓存机…

进厂手册:Git 学习笔记(详解命令)

文章目录git 对象通过git对象进行文件的保存git对象的缺点树对象构建树对象提交对象高层命令工作区的文件状态git reset hard 咋用以及用错了怎么恢复git checkout vs git resetGit存储后悔药工作区暂存区版本库reset三部曲checkout深入理解tag远程上的相关操作ssh登入一些个人…

[附源码]计算机毕业设计家庭整理服务管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

LeetCode刷题复盘笔记—一文搞懂动态规划之213. 打家劫舍 II问题(动态规划系列第十八篇)

今日主要总结一下动态规划完全背包的一道题目&#xff0c;213. 打家劫舍 II 题目&#xff1a;213. 打家劫舍 II Leetcode题目地址 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一…

快速排序详解

快速排序&#xff0c;简称快排。其实看快速排序的名字就知道它肯定是一个很牛的排序&#xff0c;C语言中的qsort和C中的sort底层都是快排。 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高&#xff0c;因此经常被采用&#xff0c;再加上快速排序思想----分治法…

Opencv 基本操作五 各种连通域处理方法

在深度学习中&#xff0c;尤其是语义分割模型部署的结果后处理中&#xff0c;离不开各类形态学处理方法&#xff0c;其中以连通域处理为主&#xff1b;同时在一些传统的图像处理算法中&#xff0c;也需要一些形态学、连通域处理方法。为此&#xff0c;整理了一些常用的连通域处…

leetcode每日一题寒假版:1691. 堆叠长方体的最大高度 (hard)( 换了皮的最长递增子序列)

2022-12-10 1691. 堆叠长方体的最大高度 (hard) &#x1f6a9; 学如逆水行舟&#xff0c;不进则退。 —— 《增广贤文》 题目描述&#xff1a; 给你 n 个长方体 cuboids &#xff0c;其中第 i 个长方体的长宽高表示为 cuboids[i] [width(i), length(i), height(i)]&#xf…

Docker补充知识点--自定义网络实现直连容器

前面介绍docker镜像的秘密这篇知识点的时候&#xff0c;https://blog.csdn.net/dudadudadd/article/details/128200522&#xff0c;提到了docker容器也有属于自己的IP的概念&#xff0c;默认的Docker容器是采用的是bridge网络模式。并且提到了一嘴自定义网卡配置&#xff0c;本…

java基于Springboot的健身房课程预约平台-计算机毕业设计

项目介绍 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven 本健身网站系统是针…

Unity纹理优化:缩小包体

Android打包apk大小约&#xff1a;475M 查看打包日志&#xff1a;Console→Open Editor Log; 或者依赖第三方插件&#xff1a;build reports tool&#xff08;在unity store里可以下载&#xff09;&#xff1b; 定位问题 经过排查后&#xff0c;发现项目中纹理占比很高&#…

分布式能源的不确定性——风速测试(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…