redis哨兵系列1

news2025/8/1 22:01:04

需要配合源码一起康~

9.1 哨兵基本概念

官网手册yyds:https://redis.io/docs/manual/sentinel/

redis主从模式,如果主挂了,需要人工将从节点提升为主节点,通知应用修改主节点的地址。不是很友好,so Redis 2.8之后开始提供哨兵架构来解决该问题,有一些哨兵节点监控redis节点,如果发生一些异常,可以做一些干预。

Redis sentinel是Redis主从版本的高可用实现方式

9.1.1 主从版本存在的问题

redis主从版本会将主节点的数据同步给从节点。从节点的作用:

  • 如果主节点挂了,从节点可以提升为主,继续提供服务
    • 但这个过程需要运维人员操作:主节点出现故障,需要手动将一个从节点提升为主;需要修改应用方的主节点地址;需要命令其他从节点去复制新的主节点
  • 从节点可以扩展主节点的读能力

9.1.2 主从版本的故障转移流程

  1. 主挂了,客户端连接不到,找到运维人员
  2. 运维人员查看从节点的复制情况,选择一个最新同步的从节点,执行 slaveof no one使其成为主节点
  3. 运维人员执行slaveof new-master-host port,使得别的从节点复制新的主节点
  4. 更改客户端的主节点信息,重新连接新的主

在这个过程中,需要运维人员来做操作,时效性和准确性都比较难保证。sentinel应运而生,能够自动完成故障发现和故障转移

9.1.3 sentinel的实现方式

redis sentinel是一个分布式架构,包含若干sentinel节点和redis数据节点。sentinel的大致步骤:

  1. 每个sentinel节点会对数据节点和其余sentinel节点进行监控(心跳包)。
  2. 如果发现节点不可达,会对节点做下线标识。
  3. 如果被标记的是主节点,会与其他sentinel节点进行协商(投票)。
  4. 多数sentinel节点认为主节点不可达(防止误判),会选择一个sentinel节点做故障转移。
  5. 同时客户端连接的sentinel节点,从中获取新的主节点信息
sentinel完成故障转移

9.2 sentinel的安装和部署

9.2.1 确定拓扑

sentinel节点分布

9.2.2 部署数据节点

第一步:启动主节点

  1. 使用redis-server启动,可以在配置文件中增加daemonize yes设置启动的redis开启守护进程模式(redis会在后台运行)
    1. 当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。
  2. 确定数据节点是否启动,可以redis-cli连接之后输入ping

第二步:启动从节点

  1. 使用redis-server启动,在配置文件中增加slaveof host port

第三步:确定主从关系

  1. 在主节点上执行info,可以看到从节点的信息
  2. 在从节点上执行info,可以看到主节点的信息

9.2.3 部署sentinel节点

第一步:确定sentinel节点配置(下方有参数详解)

# 监控主节点的地址和端口,判断主节点失败需要至少2个sentinel
# sentinel monitor <master-group-name> <ip> <port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2

# 监控主节点的配置项
# sentinel <option_name> <master_name> <option_value>
# 60s master不可达就认为它坏掉了
sentinel down-after-milliseconds mymaster 60000

# 故障转移超时时间
sentinel failover-timeout mymaster 180000

# 同时配置使用新master的replicas数目
sentinel parallel-syncs mymaster 1

第二步:启动sentinel节点

redis-sentinel /path/to/sentinel.conf

# 或者
redis-server /path/to/sentinel.conf --sentinel

第三步:确认sentinel节点

$ redis-cli -p 5000
127.0.0.1:5000> sentinel master mymaster
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "127.0.0.1"
 5) "port"
 6) "6379"
 7) "runid"
 8) "953ae6a589449c13ddefaee3538d356d287f509b"

# 或者
$ redis-cli -p 5000
127.0.0.1:5000> info Sentinel

第四步:测试sentinel

# 可以让主节点30s不可达
redis-cli -p 6379 DEBUG sleep 30

9.2.4 配置优化

# 监控主节点的地址和端口,判断主节点失败需要至少2个sentinel
# sentinel 节点会从主节点获取从节点和其他sentinel的信息
# 完成故障转移,还需要有半数以上投票选出执行故障转移的领导,所以投票者为max(quorum, num(sentinel)/2+1)
sentinel monitor <master-group-name> <ip> <port> <quorum>


# 60s master不可达就认为它坏掉了
# 这个参数对判断sentinel节点、主节点、从节点同时有效
sentinel down-after-milliseconds mymaster 60000

# 同时配置使用新master同步的replicas数目
# 因为从节点同时向主节点发起复制,会对主节点的机器造成一定的网络和磁盘开销。如果这个值为1,有3个replicas,则会轮询展开复制
sentinel parallel-syncs mymaster 1

# sentinel对一个节点故障转移失败,下一次再对该节点的故障转移时间将是failver-timeout时间的2倍
# 对要提升为主的从节点执行slaveof no one一直失败,如果这个时间超过failver-timeout,则故障转移失败
# 如果slaveof no one执行成功,但在新主上执行info确认身份命令超过failver-timeout未响应,则故障转移失败
# 如果在其他从节点上执行slaveof host port让其更新主节点,命令超过failver-timeout未响应,则故障转移失败(sentinel最终还是会配置从节点去同步最新主节点)
sentinel failover-timeout mymaster 180000

# acl需要配置账户、密码;如果不支持acl直接配置密码
sentinel auth-user <master-group-name> <username>
sentinel auth-pass <master-group-name> <password>
127.0.0.1:6379> ACL SETUSER sentinel-user ON >somepassword allchannels +multi +slaveof +ping +exec +subscribe +config|rewrite +role +publish +info +client|setname +client|kill +script|kill

# 当一些警告级别的事件发生(节点的主观下线、客观下限等),会触发对应路径的脚本,并向脚本发送一些信息
# 参数这样: +sdown/odown <master-name> <ip> <port>  sdown客观下线 odown主观下线
# 当配置之后,脚本会收到每个sentinel节点传过来的事件参数(如主观下线:+sdown master mymaster host port)
sentinel notification-script <master-name> <script-path>


# sentinel完成故障转移之后,会把故障转移的结果发给对应的脚本
# 参数这样:<master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
# role: sentinel的角色,leader/observer
# from:原主节点 to:新主节点
sentinel client-reconfig-script <master-name> <script-path>

脚本相关

  1. 脚本需要有可执行权限
  2. 脚本开头必须是shell开头#!/bin/sh
  3. 脚本的最大执行时间是60s
  4. 脚本exit 1结束,重试执行;exit 2结束不会重试;正常exit 0
# notification-script
#!/bin/sh
python notify_redis.py $*


# notify_redis.py
import sys

def main(args):
    for arg in args:
        if arg == "+odown":
            print "HEY SOMETHING IS UP WITH REDIS"
            email_text_or_whatever_thing_you_wanna_do()

main(sys.argv)

监控多个主节点

指定多个masterName来区分不同的主节点

在这里插入图片描述

调整配置

# 只对当前的sentinel节点有效,如果执行成功会立即刷新配置文件
sentinel set xx

9.2.5 部署注意事项

sentinel节点的高可用:至少三个且奇数个数的sentinel

一套sentinel监控一个主节点:隔离性好,但会造成资源浪费;

一套sentinel监控多个主节点:同一业务的多个主节点可接受

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

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

相关文章

同花顺_代码解析_技术指标_EJK

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 EMV ENV EXPMA JF_ZNZX KD KDJ KDJFS EMV 简易波动指标 1.EMV 由下往上穿越0 轴时&#xff0c;视为中期买进参考信号&#xff1b; 2.EMV 由上往下穿越0 轴时&#xff0c;视为中…

根据以下电路图,补全STM32F103RCT6的IO口初始化程序

void KEY_Init(void)//接按键的端口初始化程序 { RCC->APB2ENR|______________; //使能PORTA时钟 JTAG_Set(SWD_ENABLE); GPIOA->CRL&__________________; // PA3设置成下拉输入 GPIOA->CRL|__________________; } void LED_Init(void)//接LED的端…

【Qt】控件探幽——QLineEdit

注1&#xff1a;本系列文章使用的Qt版本为Qt 6.3.1 注2&#xff1a;本系列文章常规情况下不会直接贴出源码供复制&#xff0c;都以图片形式展示。所有代码&#xff0c;自己动手写一写&#xff0c;记忆更深刻。 本文目录QLineEdit探幽1、设置数据/获取数据2、只读&#xff08;re…

【15-项目中服务的远程调用之OpenFeign订单模块与商品模块集成使用OpenFeign的案例】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

【面试题】圣杯布局和双飞翼布局

圣杯布局和双飞翼布局的特点&#xff1a; 三栏布局&#xff0c;中间一栏最先加载和渲染&#xff08;内容最重要&#xff09;两侧内容固定&#xff0c;中间内容随着宽度自适应一般用于PC页面 圣杯布局和双飞翼布局的实现方式&#xff1a; 使用float布局两侧使用margin负值&am…

git 、gitLub 提交后查看显示全部删除又全部新增

问题&#xff1a; git提交后删除的行数与增加的行数一样&#xff0c;没有修改git也会去全部删除又全部新增 大概是下面你这个样子&#xff1a; 原因&#xff1a; 换行符的原因&#xff0c;win、mac、linux/Unix 换行符是不一样的&#xff0c;提交的文件换行符和git服务器的不…

【Unity300个技巧】牛顿的学问!如何优雅地使用力?

Unity 提供了一个完备且强大物理引擎。但在刚接触的时候&#xff0c;你可能会对它与现实物理规律对应有一些疑惑。 比如&#xff1a; 现实中 1N 的力在 Unity 中怎么表现&#xff1f;Unity 中物体的质量是计算的&#xff1f;Unity 中给物体添加力的方法是 rb.AddForce()&#x…

ICME 论文Latex模版要求

2023年模版获取链接&#xff1a; 链接: https://pan.baidu.com/s/1Hjk4nnybQN6LE23SGfbxKQ 提取码: 27dj --来自百度网盘超级会员v4的分享 论文写作要求&#xff1a; 所有手稿必须是英文的&#xff1b; 论文长度不应超过6页&#xff0c;包括所有文本、图形和参考文献&#…

Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)

Qt 设置CPU亲缘性&#xff0c;把进程和线程绑定到CPU核心上(Linux) 文章目录Qt 设置CPU亲缘性&#xff0c;把进程和线程绑定到CPU核心上(Linux)摘要1 什么是CPU亲缘性2 目的3 API 介绍3.1 进程绑定到CPU3.2 线程绑定到CPU4 实际操作4.1 实操代码主进程串口线程USB线程程序运行资…

iOS开发M1芯片遇到的问题

pod失败执行&#xff1a; sudo arch -x86_64 gem install ffi Then arch -x86_64 pod install M1芯片的Mac无法在模拟器上运行项目building for iOS Simulator或could not find module for target.. 真机上可运行&#xff0c;模拟器上不行&#xff0c;并出现以下错误&#xf…

高级UI之贝塞尔曲线

前言 相信很多同学都知道“贝塞尔曲线”这个词&#xff0c;我们在很多地方都能经常看到。但是&#xff0c;可能并不是每位同学都清楚地知道&#xff0c;到底什么是“贝塞尔曲线”&#xff0c;又是什么特点让它有这么高的知名度。 贝塞尔曲线的数学基础是早在 1912 年就广为人…

八款流行无线黑客工具,非常实用

1、Aircrack Aircrack是最受欢迎的无线密码破解工具之一&#xff0c;可用于802.11a / b / g WEP和WPA破解。Aircrack使用的算法是通过捕获数据包来恢复无线密码。收集到足够的数据包后&#xff0c;它会尝试恢复密码。为了使攻击更快&#xff0c;它通过一些优化实现标准的FMS攻…

腾格尔和黑鸭子,演唱《遥远的地方》不同版本,哪首歌更值得期待

说起中国华语乐坛的音乐人&#xff0c;腾格尔老师算比较出名的一位&#xff0c;听说最近他又推出了一首新歌。《遥远的地方》这首歌曲&#xff0c;就是腾格尔老师的新歌&#xff0c;可能很多人会对这个歌名感到有些熟悉。 早在九十年代的时候&#xff0c;中国华语乐坛非常流行组…

【雷神笔记本快捷键】雷神笔记本FN功能快捷键大全以及电脑CPU处于低功耗但电脑风扇高速转动噪音较大解决方案

雷神笔记本FN功能快捷键大全以及电脑CPU处于低功耗但电脑风扇高速转动噪音较大解决方案。 本计算机有16个功能键盘。这些键的功能因应用程序而异。 请参阅软件文档以了解各个键的使用方法。 【FN】键提供便携式电脑的扩展功能,始终与另一按键搭配使用。‘【FNEsc】:启用或禁用…

教你如何使用 Visual Studio IDE 正确的进行 C++ 桌面开发

目录 先决条件 入门 一、演练&#xff1a;使用项目和解决方案 (C) 准备工作 创建项目 在 Visual Studio 中创建项目 组织项目和文件 向项目添加类 向主函数添加测试代码 向项目添加测试代码 生成并运行应用项目 生成并运行此项目 二、演练&#xff1a;生成项目 (C…

改良海量数据存储的若干的手段-转变数据垃圾为黄金

教材篇 直到翻看了后面章节&#xff0c;才注意到封面上面的标语&#xff0c;中文意思是“禁止倾倒数据垃圾&#xff0c;违者务必读此书&#xff01;” 大致祖师爷对杂乱无序的数据垃圾深恶痛绝&#xff0c;在这点上大凡上了点年头的数据工作者都是深有体会~ 直到翻看了后面章…

三相和单相智能微型断路器功能有区别吗?

安科瑞 华楠 ASCB1系列智能微型断路器是安科瑞电气股份有限公司全新推出的智慧用电产品&#xff0c;产品由智能微型断路器与智能网关两部分组成&#xff0c;可用于对用电线路的关键电气因素&#xff0c;如电压、电流、功率、温度、漏电、能耗等进行实时监测&#xff0c;具有远程…

渗透测试与漏洞扫描的区别

企业通常将漏洞扫描视为渗透测试的替代方法。这种认识是错误的。具有网络安全意识的组织必须在其业务流程中包括这两项活动&#xff0c;并确保它们协同工作。错过其中之一会大大降低 Web 应用程序安全性和网络安全性的安全状况。渗透测试和漏洞扫描也被单独视为合规性要求&…

【TFS-CLUB社区 第6期赠书活动】〖uni-app跨平台开发与应用从入门到实践〗等你来拿,参与评论,即可有机获得

文章目录❤️‍&#x1f525; 赠书活动 - 《uni-app跨平台开发与应用从入门到实践》❤️‍&#x1f525; 编辑推荐❤️‍&#x1f525; 抽奖方式与截止时间❤️‍&#x1f525; 赠书活动 → 获奖名单❤️‍&#x1f525; 赠书活动 - 《uni-app跨平台开发与应用从入门到实践》 内…

Redis事务操作

Redis事务操作 每个公司每个项目可能有不同的引入方式&#xff0c;但是最基本的都大差不差&#xff0c;所以这里只展示最基本的。 redis事务定义 redis事务是一个单独的隔离操作&#xff0c;事务中的所有命令都会序列化、按顺序地执行&#xff0c;事务在执行的过程中&#x…