Redis主从复制机制详解

目录

  • 一、主从复制介绍
  • 二、搭建主从复制
  • 三、主从复制流程
  • 四、关于Replication ID
  • 五、主从复制核心知识
  • 六、主从复制应用场景
  • 七、主从复制的注意事项
  • 八、读写分离实战

一、主从复制介绍

1、什么是主从复制?
主从复制示例

2、为什么要使用主从复制?

  • redis-server单点故障。
  • 单节点QPS有限。

3、主从复制应用场景分析?
读写分离场景,规避redis单机瓶颈
故障切换,master出问题后还有slave节点可以使用


二、搭建主从复制

主节点以普通模式启动即可,从节点可以在命令行或者在配置文件中开启复制。

1、第一种方式:命令行

# 连接主redis服务器
replicaof[ip] [port]

2、第二种方式:修改从节点配置文件redis.conf

# 配置文件增加
replicaof[ip] [port]
# 从服务器是否只读,默认yes
replicaof-read-only yes

3、退出主从集群的方式

replicaof no one

4、副本进行master密码验证

当主节点有密码设置时,我们需要在从节点配置主节点的密码,进行连接认证。

  • 命令行方式
config set masterauth <password>
  • 修改redis.conf配置文件
masterauth <password>

5、限制master主节点写请求
Redis2.8开始,支持配置只有当至少N个副本连接上master时,master才接收写请求。因为Redis使用的是异步复制,所有不能确保副本实际能接收到给定的命令写入,会有一定的数据丢失窗口。

异步复制流程如下:

  1. Redis副本每秒ping一次master,确认处理的偏移量。
  2. Redis master会记住每个副本ping的最后时间。
  3. 用户可以配置ping延迟不超过指定秒数的最小副本数。

如果有至少N个副本连上master,且ping的延迟小于M秒,那么写请求会被接收,否则会回复错误,该特性的配置参数如下:

min-replicas-to-write <number of replicas>
min-replicas-max-lag <number of seconds>

备注:这里的副本就是从节点,master就是主节点。

6、查看主从复制信息

info replication

三、主从复制流程

主动复制流程图

  1. 从服务器通过psync命令发送旧的主服务器Replication ID和处理的偏移量。
  2. master收到请求后,如果发送的Replication ID为当前master的,则根据当前偏移量增量同步。
  3. 如果副本发送的Replication ID为非当前master的,则进入全量同步:master通过bgsave生成rdb,通过网络传输到副本,副本再加载到内存中(此过程会阻塞)。

四、关于Replication ID

1、Replication ID是什么

Replication ID代表数据集的历史记录,每次master重启或者副本晋升为master,会生成新的Replication ID。副本在与master握手后会继承master的Replication ID

2、为什么Redis实例会有两个Replication ID

因为副本会晋升为master,故障转移后,晋升的副本仍需记住过去的Replication ID(即前master的ID),新的master会生成一个新的Replication ID作为主ID,旧master的ID作为次ID。

当其它副本与新master进行同步时,副本会用旧master的Replication ID带上偏移量进行部分复制,而不是全量复制。

3、为什么晋升的副本需要修改Replication ID

旧master由于网络分区(无法与其它Redis实例通信),可能仍在充当master的角色,如果晋升的新master继续使用旧master的Replication ID,会违反任意两个具有相同ID和offset的Redis实例有相同数据集的事实。

简而言之,新master和旧master的Repilcation ID和offset虽然都相同,但由于网络分区,晋升为新master的副本与旧master偏移量不一致。

当新master偏移量增长到与旧master相同时,此时数据并不一定一致,而Replication ID和offset是标识唯一数据集的。


五、主从复制核心知识

  • Redis默认使用异步复制,从节点master之间异步确认处理的数据量。
  • 一个master可以拥有多个从节点。
  • 从节点可以接受其它从节点的连接,从节点可以有下级子从节点。
  • 主从同步过程在master侧是非阻塞的,当一个或多个从节点进行初始全量同步或者部分同步,master仍然能处理查询请求。
  • 从节点端大部分情况下也是非阻塞的,当从节点进行初始全量同步时,仍然能用旧的数据集处理查询请求(可在配置文件中配置)。
  • 从节点初次同步需要删除旧数据,加载新数据,加载新数据集的过程中会阻塞到来的连接请求。
    主从复制结构

六、主从复制应用场景

  • 主从复制可以用来支持读写分离。
  • 从节点服务器设定为只读,可以用在数据安全的场景下。
  • 可以使用主从复制来避免master持久化造成的开销。master关闭持久化,从节点配置为不定期保存或是启用AOF。(注意:重新启动的master将从一个空数据集开始,作为从节点重新同步主节点数据,此时该节点数据也会被清空)

七、主从复制的注意事项

1、读写分离场景

  • 数据复制延时导致读到获取数据或者读不到数据(网络原因、从节点阻塞)。
  • 从节点故障。

2、全量复制情况下

  • 第一次建立主从关系或者Replication ID不匹配会导致全量复制。
  • 故障转移的时候也会出现全量复制。

3、复制风暴

  • master故障重启,如果从节点比较多,所有从节点都要复制,对服务器的性能,网络的压力都有很大影响。
  • 如果一个机器部署了多个master。

4、写能力有限

  • 主从复制还是只有一台master,提供的写能力有限。

5、master故障情况下

  • 如果是master无持久化,从节点开启持久化来保留数据的场景,建议不要配置redis自动重启。
  • 启动redis自动重启,master启动后,无备份数据,可能导致集群数据丢失的情况(备注:可以通过哨兵高可用机制实现进行自动切主)

6、带有效期的key

  • 从节点不会让key过期,而是等待master让key过期,过期后master会向从节点发送DEL命令。
  • 在Lua脚本执行期间,不执行任何key过期操作。

八、读写分离实战

@Configuration
public class ReadWriteSeperationConfig {@Beanpublic LettuceConnectionFactory redisConnectionFactory() {LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder().readFrom(ReadFrom.REPLICA_PREFERRED).build();// 地址和端口可以是master实例和可以是replica实例的RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration("127.0.0.1", 6379);serverConfig.setPassword("lyl");return new LettuceConnectionFactory(serverConfig, clientConfig);}
}

备注:读写分离目前有LettuceRedisson客户端等支持,Jedis是不支持的。

客户端可通过info replication命令知道哪台机器是master,哪台是从节点,然后将写命令分发到master,读命令分发到从节点。
info replication命令返回内容如下:

# Replication
role:master
connected_slaves:1
slave0:ip=122.51.55.180,port=6379,state=online,offset=515783,lag=1
master_replid:2b30a3ace7a265ed5e9afcdc6925cd26cddb8ba5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:515783
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:515783

在这里插入图片描述

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

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

相关文章

TDC上YARN Web-UI 查看application日志方法

方法一 #通过浏览器访问tdc&#xff0c;访问的工作节点对于TDC都是外部节点。在提交给yarn任务后&#xff0c;YarnRM的Web UI 可以展示yarnnm上运行的application日志&#xff0c;但是由于跳转的svc地址&#xff0c;无法直接访问。 #在tdc界面上找到yarn实例&#xff0c;进入ya…

【MySQL】mysql导出数据WPS科学计数法解决方法

导出的长串数字 id 会导致科学计数法&#xff0c;修改 WPS 单元格格式可以解决 数字太长还是有问题&#xff0c;最后有个数字会变成 0 可以 直接用 python脚本转换一下 vim convert_txt_xlsx.py #!/usr/bin/env python3# 使用方法# 安装库 # pip3 install pandas openpyxl…

微信小程序后台搭建—node+mysql

想必大家都有一个困扰&#xff0c;想要用微信小程序作为前端&#xff0c;但是后端不知道如何用node连接微信小程序&#xff0c;我最近也一直困扰许久&#xff0c;所以我就想用node写后端接口在连接微信小程序&#xff0c;记录一下学习笔记 前言 前端:微信小程序 后端:nodeexpr…

MYSQL-windows安装配置两个或多个版本MYSQL

安装第一个mysql很简单&#xff0c;这里不再赘述。主要说说第二个怎么安装&#xff0c;服务怎么配置。 1. 从官网下载第二个MySQL并安装 一般都是免安装版了&#xff0c;下载解压到某个文件目录下(路径中尽量不要带空格或中文)&#xff0c;再新建一个my.ini文件&#xff08;或…

怎么看待数字化转型是大势所趋?

怎么看到数字化转型是大势所趋&#xff1f;下面我结合最新数据给大家讲明白这个事。 近日&#xff0c;我通过大量的数据相关性分析&#xff0c;有了一些关键发现。 【数字化转型】之所以势在必行&#xff0c;主要是因为数字化转型为各个国家数字经济发展提供了重要的参考依据。…

网络通信与并发编程(一)网络通信、osi五层模型、tcp协议的三次握手与四次挥手

网络通信、osi五层模型、tcp协议的三次握手与四次挥手 文章目录 网络通信、osi五层模型、tcp协议的三次握手与四次挥手一、网络通信二、osi五层模型1.物理层2.数据链路层3.网络层4.传输层5.应用层 三、tcp协议的三次握手与四次挥手 一、网络通信 网络通信是指在网络中的两个或…

cuda入门学习

最近接触cuda 编程&#xff0c;记录一下。 1 工作实现一个【0-100&#xff09;的加法 如果用python sum 0 for i in range(200):sumi print(sum)2 cuda 的一些简单的概念 一维情况下大概是这样的 (1个grid * 2个blocks * 4个thread) 3 代码直接上代码 我把100分为20个b…

metahuman如何导入UE5

1.启动 通过EPIC启动UE5(UE5内置有Bridge, 但是UE4是需要单独下在Bridge软件) 2.打开Quixel Bridge 在window(窗口)中打开Quixel Bridge 3.Bridge界面 在弹出的Bridge界面选择模型 需要先下载&#xff0c;然后再导入 4.下载模型 点击需要的模型右上方的绿色箭头下载 5.下…

【论文#码率控制】ADAPTIVE RATE CONTROL FOR H.264

目录 摘要1.前言2.基本知识2.1 蛋鸡悖论2.2 基本单元的定义2.3 线性MAD预测模型 3.GOP级码率控制3.1 总比特数3.2 初始化量化参数 4.帧级码率控制4.1 非存储图像的量化参数4.2 存储图像的目标比特 5.基本单元级码率控制6.实验结果7.结论 《ADAPTIVE RATE CONTROL FOR H.264》 A…

OKHTTP 如何处理请求超时和重连机制

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

【ELKB】Kibana使用

搭建好ELKB后访问地址&#xff1a;http://localhost:5601 输入账号密码登录以后 左侧导航有home、Analysis、Enterprise search 、Observability、Security、Management home&#xff1a;首页Analysis&#xff1a;工具来分析及可视化数据Enterprise search&#xff1a;企业级搜…

解读《ARM Cortex-M3 与Cortex-M4 权威指南》——第1章 ARM Cortex-M处理器简介

1. 三级流水线设计 解释:三级流水线设计意味着处理器在执行指令时可以同时处理多个步骤。这些步骤通常包括取指(Fetch)、译码(Decode)和执行(Execute)。好处:这种设计提高了指令的执行效率,使得处理器能够在每个时钟周期内完成更多的工作,从而提升整体性能。2. 哈佛总…

分享一些常用的数据库性能监测工具

以下是一些常用的数据库性能监测工具&#xff1a; 一、MySQL MySQL Enterprise Monitor&#xff1a; 由 MySQL 官方推出&#xff0c;提供全面的数据库性能监控、诊断和优化功能。可以监控数据库的各种指标&#xff0c;如查询性能、连接数、缓存命中率等&#xff0c;并提供警报…

yolo参数调节

1-weight 不同版本的神经网络 可以在这下载复制 2 source图片路径或者文件夹路径 3 img size 尺寸&#xff08;尽量与神经网络模型匹配&#xff09; 4 4 -conf-thres 简单理解就是模型识别成功概率超过这一标准才会显示 5 iou多区域重合 &#xff08;重合比例&#xff09;…

数学科普读物《从毕达哥拉斯到怀尔斯》

毕达哥拉斯是古希腊数学家&#xff0c;怀尔斯是英国数学家&#xff0c;曾任美国普林斯顿大学教授。这本书是哈工大出版社刘培杰先生主编的。这是一本500多页的书&#xff0c;我不禁慨叹高级数学爱好者刘培杰的博学广识&#xff0c;因为书中纵论古今旁征博引&#xff0c;仅书后的…

数据结构-5.6.二叉树的先,中,后序遍历

一.遍历&#xff1a; 二.二叉树的遍历&#xff1a;利用了递归操作 1.简介&#xff1a; 二叉树的先序遍历&#xff0c;中序遍历&#xff0c;后序遍历都是以根结点遍历顺序为准的&#xff0c;如先序遍历就先遍历根结点 2.实例&#xff1a; 例一&#xff1a; 例二&#xff1a; …

C++中string函数用法总结

一&#xff0c;string的构造函数 string() //无参构造&#xff0c;初始化为空串 string(const string& str) //用str拷贝构造 string(size_t n,char c) //用n个字符c初始化 string(const char* s,size_t n) //用字符串s的前n个字符初始化 string(const string& str…

【最优化方法】最速下降法

给出点 x [1,4,5,8,12] y [7,9,15,14,27] 要找出温度和冰淇淋销量之间的关系&#xff0c;通过线性回归来拟合求出属性和结果之间的线性关系。 如果直接把这些点连起来&#xff0c;是吃力不讨好的&#xff0c;因为如果有新数据进来大概率不在这条线上&#xff0c;这个行为也…

Prometheus + Grafana 监控 MySQL 数据库

文章目录 1、前置介绍2、搭建流程2.1、安装 Docker2.2、安装 MySQL2.3、安装 MySQL Exporter2.4、安装 Prometheus2.5、安装 Grafana 1、前置介绍 本次监控平台搭建&#xff0c;我使用2台阿里云服务器来完成本次的搭建部署操作&#xff0c;配置如下&#xff1a; 阿里云ECS1&am…

【Kubernets】配置类型资源 Etcd, Secret, ConfigMap

文章目录 所有资源概览Etcd详细说明一、基本概念二、主要功能三、架构与组件四、数据模型与操作五、安全与认证六、集群部署与管理 Secret详细说明一、Secret 的类型二、Secret 的创建三、Secret 的使用四、Secret 的更新与删除五、Secret 的安全性 ConfigMap详细说明一、Confi…