当前位置: 首页 > news >正文

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和端口

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring Boot + Spring Cloud 入门
  • java模拟多ip请求【搬代码】
  • 基于STM32的农业大棚温湿度采集控制系统的设计
  • git实现多人协作开发同一个项目
  • 100个python的基本语法知识【下】
  • 【洛谷】P2241 统计方形(数据加强版)——C++
  • dockerfile部署wordpress
  • 【CTFWP】ctfshow-萌新-web1-7
  • html+css前端作业 王者荣耀官网6个页面无js
  • iOS应用冷启动优化,可以做哪些事情
  • ArcGIS Pro SDK (九)几何 12 多面体
  • 决策树的概念
  • 挖掘IPython的深度:%%dhist命令的历史探索之旅
  • Chapter17 表面着色器——Shader入门精要学习
  • keystone学习小结2
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Android单元测试 - 几个重要问题
  • eclipse的离线汉化
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Javascript弹出层-初探
  • Laravel Telescope:优雅的应用调试工具
  • Laravel 实践之路: 数据库迁移与数据填充
  • laravel5.5 视图共享数据
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • pdf文件如何在线转换为jpg图片
  • Python 反序列化安全问题(二)
  • React-Native - 收藏集 - 掘金
  • select2 取值 遍历 设置默认值
  • webpack+react项目初体验——记录我的webpack环境配置
  • win10下安装mysql5.7
  • 搭建gitbook 和 访问权限认证
  • 第2章 网络文档
  • 复杂数据处理
  • 技术:超级实用的电脑小技巧
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 微信小程序实战练习(仿五洲到家微信版)
  • 终端用户监控:真实用户监控还是模拟监控?
  • Java性能优化之JVM GC(垃圾回收机制)
  • #1014 : Trie树
  • #VERDI# 关于如何查看FSM状态机的方法
  • (09)Hive——CTE 公共表达式
  • (6)添加vue-cookie
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (k8s中)docker netty OOM问题记录
  • (Matlab)使用竞争神经网络实现数据聚类
  • (二)windows配置JDK环境
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)http协议
  • (转)Scala的“=”符号简介
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 直连SAP HANA数据库
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)