Redis 主从复制、哨兵机制关键参数与命令

建立主从连接

【命令】replicaof <服务器 A 的 IP 地址> <服务器 A 的 Redis 端口号>

形成主服务器节点和从服务器节点的关系,也可以让从节点成为二级主节点分摊压力。

【命令】psync

进行数据同步命令,会携带 runID 和 offset。

从节点建立主从关系或断开重连后自动发出,主节点会做出回应。

【命令】folk()

创建子进程。

【命令】bgsave

主节点节点异步持久化,生成RDB文件。

主节点通过folk()创建子进程来生成RGB文件发送给从节点,从节点利用RDB文件内的全量数据日志完成首次数据同步。

【参数】runID

主服务器的 runID。每个 Redis 服务器在启动时都会自动生产一个随机的 ID 来唯一标识自己。

【参数】offset

表示复制的进度,第一次同步时,其值为 -1。从节点断线重连增量同步时值不为-1。

在从节点向主节点发送的psync命令中带有runID和offset两个参数。


主从数据复制

Buffer 缓冲区

【结构】replication buffer

第一次同步期间的新数据,命令传播即连接中的新数据,重连后增量数据都会存在 buffer 中,每个节点都分配一个,从节点收到 buffer 中的数据后就执行来实现主从一致。

当 replication buffer 满了,会导致连接断开,删除缓存,从节点重新连接,重新开始全量复制

【结构】repl backlog buffer

增量同步,环形缓冲区,主节点记录近期的数据,(从节点重连后差距会放入replication buffer增量同步),一个主节点一个

当 repl backlog buffer 满了,因为是环形结构,会直接覆盖起始位置数据

【参数】repl-backlog-size

repl backlog buffer大小。

【参数】master_repl_offset

主节点接收写命令的进度信息。

【参数】slave_repl_offset

从节点复制写命令的进度信息。

replication offset = master_repl_offset - slave_repl_offset,能得到从节点和主节点间的复制进度差值。


主从数据安全

防止主节点失联的数据丢失

主节点失联被哨兵发现后,会推举新的主节点,但这过程中如果客户端还在给原主节点写入数据,原主节点会被降级为从节点并删除数据。

【参数】min-slaves-to-write x

主节点必须要有至少 x 个从节点连接,如果小于这个数,主节点会禁止写数据。


防止异步复制数据丢失

【参数】min-slaves-max-lag x

主从数据复制和同步的延迟不能超过 x 秒,如果主从同步的延迟超过 x 秒,主节点会禁止写数据。


哨兵机制

建立哨兵集群

【命令】redis-sentinel <.conf>

启动Sentinel哨兵

【配置】sentinel monitor <master-name> <ip> <redis-port> <quorum>

conf配置文件中设置哨兵所在集群的主节点、主节点IP、主节点端口、阈值quorum。哨兵通过主节点接入集群后通过主节点自带的__sentinel__:hello发布订阅频道发现其他哨兵并相互通信。

【命令】INFO

哨兵接入集群后向主节点发送INFO命令,主节点将从节点信息发送给哨兵,这样哨兵可以获取集群中所有主从节点的信息。

正常情况哨兵每隔10s发送一次INFO命令来检测集群的情况,当选举新的主节点后关键时期会每隔1s秒监控集群的情况。


节点下线

【命令】PING

哨兵会每隔1s给节点发送PING命令,主节点收到后会发生PONG,若主从节点超过规定时限未返回消息,哨兵判定节点主观下线

所谓主观,是指节点下线可能只是单个哨兵节点观测到的偶然现象,并不能确定节点是否故障。

【参数】down-after-milliseconds

规定时限,conf中设置

【参数】quorum

判定节点客观下线的阈值。 

所谓客观,当哨兵集群中多个哨兵(达到quorum阈值)认为节点确实下线,称为客观下线。


哨兵leader

如果是主节点下线,就必须进行主从切换,选出新的主节点。负责主持主从切换的哨兵,称为leader,相当于国家元首与政府首脑的关系。

【命令】is-master-down-by-addr

发现主节点主观下线的哨兵会发送该命令通知其他哨兵,让他们判断主节点是否的确下线,如果其他节点赞成下线的票数超过quorum阈值,该哨兵成为leader,负责主持主从切换相关事宜。

可能同时有多个哨兵发现主节点下线,此时就看谁手速快,其他节点只会投一次票,收到一次投票请求后就会拒绝再次投票。

每个leader候选哨兵都会先给自己一票,在哨兵实例也可能故障时,设置哨兵数量和quorum阈值就比较关键了。


主从故障转移

【参数】slave-priority

配置项,设置从节点的优先级。主节点下线,哨兵leader会在剩下的活从节点中选出新的主节点。依次考虑从节点的优先级slave-priority(越高)、复制进度slave_repl_offset(越接近master_repl_offset)、runID(越小)。

【命令】SLAVEOF no one

哨兵leader向选中的从节点发生该命令,提请他成为新的主节点,并每隔1s发送一次INFO命令检测集群的情况,确保该节点已顺利成为新的主节点。

【命令】SLAVEOF

哨兵leader勒令原属已下线的主节点的从节点重新成为新主节点的从节点。

哨兵会继续监视原主节点,待其重新上线后发送该命令使其成为新主节点的从节点。

主从切换过程中的重要事件信息会以发布订阅的模型同步给客户端,客户端可以时刻关注这些动态并及时变更读写节点的IP和端口

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

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

相关文章

基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF.仿真输出误差收敛曲线和误差协方差收敛曲线。 2.测试软件版本以及运行结果展示 MATLAB2022…

laravel框架基础通识-新手

常用目录及其解析 routes 该目录为路由目录 一般根据api uri可以反向查找对应路由及其controller&#xff0c;目录下的文件名一般和url的第一级对应为了规范&#xff0c;然后根据根据里面具体分组和别名对应拼接对应路由url&#xff0c;后面对应的则是controller&#xff0c…

springboot 配置 spring data redis

1、在pom.xml引入父依赖spring-boot-starter-parent&#xff0c;其中2.7.18是最后一版支持java8的spring <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</…

HTML5+ push消息推送

HTML5 push消息推送 push消息推送关键 API 介绍plus.pushaddEventListenerclearcreateMessagegetAllMessagegetClientInfosetAutoNotificationremove 实践消息推送开启权限 push消息推送 HTML5 的 Push 消息推送功能是一个强大的特性&#xff0c;它允许开发者在 Web 应用中实现…

助燃新质生产力,魔珐科技亮相IMC2024制造业数字科技大会展示有言AIGC视频工具价值

2024年7月19日&#xff0c;IMC2024第八届制造业数字科技大会在上海盛大开幕&#xff0c;本次大会以《向“智”而行》为主题&#xff0c;250智能制造行业数字化转型企业、行业领军者及实践者共聚一堂&#xff0c;共同助力企业增强技术“硬核力”&#xff0c;为新质生产力蓄势赋能…

Matlab仿真教程

什么是仿真&#xff1f; 仿真是一种使用数学模型和算法来模拟和分析实际系统或过程的技术。仿真可以帮助我们更好地理解系统的行为、优化系统的性能和预测系统的结果。 Matlab仿真 Matlab是一种广泛使用的仿真和分析工具。它提供了丰富的函数库和工具&#xff0c;可以用来解…

buuctf web 第五到八题

[ACTF2020 新生赛]Exec 这里属实有点没想到了&#xff0c;以为要弹shell&#xff0c;结果不用 127.0.0.1;ls /PING 127.0.0.1 (127.0.0.1): 56 data bytes bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var127.0.0.1;tac /f*[GXYCTF2019]Pin…

最新全新UI异次元荔枝V4.4自动发卡系统源码

简介&#xff1a; 最新全新UI异次元荔枝V4.4自动发卡系统源码 更新日志&#xff1a; 1增加主站货源系统 2支持分站自定义支付接口 3目前插件大部分免费 4UI页面全面更新 5分站可支持对接其他分站产品 6分站客服可自定义 7支持限定优惠 图片&#xff1a; 会员中心截图&…

多类支持向量机损失(SVM损失)

(SVM) 损失。SVM 损失的设置是&#xff0c;SVM“希望”每个图像的正确类别的得分比错误类别高出一定幅度Δ。 即假设有一个分数集合s[13,−7,11] 如果y0为真实值&#xff0c;超参数为10&#xff0c;则该损失值为 超参数是指在机器学习算法的训练过程中需要设置的参数&#xf…

学习并测试SqlSugar的单库事务功能

SqlSugar支持单库事务、多租户事务、多库事务&#xff0c;本文学习并测试单库事务的基本用法。   使用SqlSugarClient类、ISqlSugarClient接口都可以创建SqlSugarClient数据库操作实例&#xff0c;其区别在于&#xff0c;针对单库而言&#xff0c;SqlSugarClient类支持调用Be…

【python】NumPy运行报错分析:IndexError——数组索引越界问题

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Android init.rc的启动流程

Android开机优化系列文档-CSDN博客 Android 14 开机时间优化措施汇总-CSDN博客Android 14 开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客A…

C++中的atomic:原子

在多线程编程中&#xff0c;原子操作是一种重要的技术&#xff0c;可以确保在并发环境中进行无锁操作。C11 引入了 std::atomic<>&#xff0c;提供了一种无锁的机制来操作变量&#xff0c;确保在并发环境中访问和修改变量时没有数据竞争。本文将介绍 std::atomic<>…

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号1

本来打算找到工作再整理高级的题库&#xff0c;但一直没什么面试机会。宅在家里也不知道干些什么。索性就把高级的题库整理出来了。也算有头有尾。高级的题库更新之后&#xff0c;专业性更强了&#xff0c;不是真正从事这一行的&#xff0c;很难做出来。本人就是个小菜鸡&#…

【.NET全栈】ASP.NET开发Web应用——用户控件和绘图

文章目录 前言一、用户控件1、创建用户控件2、使用用户控件3、在web.config中注册用户控件4、用户控件中公开属性5、用户控件事件6、动态加载用户控件 二、动态绘图1、基本绘图2、绘制一个自定义的图片3、在Web页面放置自定义图片4、图片格式和质量5、一个Web绘图示例程序 前言…

matlab simulink气隙局部放电仿真技术研究

1、内容简介 略 87-可以交流、咨询、答疑 2、内容说明 略 为了解决目前国内外局部放电仿真方法难以计算气隙局部放电暂态过程的问题 , 利用 MATLAB (SIMULINK ) 的公共模块库和电力系统专业模块库 , 根据单气隙局部放电仿真物理模型 , 构造了气隙局部放 电仿真计算的电…

Python运算

目录 1. 算术运算符 2. 赋值运算符 3. 比较运算符 4. 逻辑运算符 5. 位运算符 6. 成员运算符 7. 身份运算符 1. 算术运算符 运算符描述示例加法a b-减法a - b*乘法a * b/除法a / b//取整除a // b%取余数a % b**幂运算a ** b 示例&#xff1a; a 10 b 3 print(a b…

打造安全堡垒:Xcode应用权限管理全解析

打造安全堡垒&#xff1a;Xcode应用权限管理全解析 在移动应用开发中&#xff0c;权限管理是确保用户数据安全和应用正常运行的关键环节。Xcode&#xff0c;作为iOS和macOS应用开发的集成环境&#xff0c;提供了一套完善的权限管理系统。本文将深入探讨Xcode中应用权限管理的策…

树状数组优化dp

这个题目怎么去想呢&#xff0c;我们先构造前缀和&#xff0c;一般思路肯定是用两层循环&#xff0c;但是一定会超时&#xff0c;我们的数据范围是 1e5&#xff0c;那我们必须找到复杂度为 nlog n 的才行&#xff0c;所以我们可以考虑每次计算以 i 结尾的子数组的数量&#xff…