Redis系列--主从复制

2023-11-18

一、redis主从复制介绍

在 Redis 复制的基础上,使用和配置主从复制非常简单,能使得从 Redis 服务器(下文称 slave)能精确得复制主 Redis 服务器(下文称 master)的内容。每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本。

一句话就是主从复制,master以写为主,slave以读为主。当master数据变化时,自动将新数据异步同步到其他slave数据库当中去。数据的复制是单向的,只能由主节点到从节点

二、作用 

1、读写分离

2、容灾恢复

3、数据备份

4、水平扩容支撑高并发

三、 配置以及命令

四、主从复制三种常见配置

一、一主两从

一、一主两从两种配置

1、直接配置文件配置,重启还会生效(具体配置请看官网)

2、使用命令配置,只是临时配置,重启失效

二、一主两从常见问题

1、从机是否可以执行写命令?

从机不可以执行写命令

 2、从机切入点问题 ,也就是slave是从头开始复制还是从切入点开始复制?

假设:

  master启动,写到k3

  slave1跟着master同时启动,跟着写到k3

  slave2写到k3后才启动,那之前的也是会复制过来的

3、主机shutdown后情况如何?从机是变为master还是原地待命    

从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来 

4、 主机shutdown后,重启后主从关系还在吗?从机能够顺利复制

主从关系依旧在,也能顺利复制

 二、slaveof 新主库ip 新主库端口

其实就是上一个slave可以作为下一个slave的master,slave同样可以接收其他slave的连接和同步请求,那么该slave作为下一个的master,可以有效减轻主master的写压力。

 这种其实就是改变了一下数据同步的方向,其实6380还是不能进行写操作

使用命令:slaveof 新主库ip 新主库端口

 三、slaveof no one

使当前数据库停止与其他数据库的同步,转成主数据库

五、主从复制原理以及工作流程

slave启动,连接master:

1、slave启动成功连接到master后会发送一个同步命令

2、slave首次全新连接到master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除。

首次连接,全量复制:

3、master节点收到同步命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据命令缓存起来,master节点执行RDB持久化完成后,master将rdb快照文件和所有缓存的命令发送到所有slave,已完成一次完全同步

4、而slave服务器在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。

保持通信:

5、master会发出PING包给slave,以此来确认slave是否存活。默认时间是10s

6、当第一次全量复制后,master如果有新增的数据,将会收集新的数据自动一次传给slave,完成同步

从机下线,重连续传:

7、当slave宕机或者下线后,master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId。master只会把已经复制的offset后面的数据复制给slave,类似于断点续传。

六、主从复制的缺点

 1、复制延时,信号衰减

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

2、master挂了,slave不会自动重选一个master,且s剩余的slave不能执行写命令。每次master挂了都只能人工干预

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis系列--主从复制 的相关文章

  • ClientRequestFactory RestEasy 已弃用...还有其他 RestEasy 替代方案吗?

    我需要使用其他人创建的 RestService 的接口来创建轻松的客户端 这工作很好 除了一件事 当我从rest easy 2 3 5 Final更新到resteasy 3 0 x时 Client RequestFactory类看起来像 D
  • 使用可执行 JAR 时指定 Log4j2 配置文件

    使用可执行 JAR 文件时 我在指定 Log4j2 配置文件位置时遇到问题 如果我将所有 JAR 分开 效果很好 但是当我尝试将它们组合成一个可执行 JAR 文件时 由于某种原因log4j2 xml未从命令行获取文件 我尝试过这两种指定位置
  • cucumber.json 报告被重新运行场景报告覆盖

    我有一个具有相同技术堆栈 JAVA1 8 Cucumber JVM JUnit Maven 的 UI 测试项目和一个 API 测试项目 这两个项目都向我展示了这个问题 可能是因为两者都存在相同的依赖关系集 我使用了使用 maven sure
  • 为什么 Java 中需要 String[] args?

    我知道 String args 是作为参数传递到 main 的字符串数组 java Print Hello World class Print public static void main String args System out p
  • Eclipse JAVA工具jar不存在

    The archive C Java jdk1 6 0 26 32 lib tools jar which is referenced by the classpath does not exist 这是我运行Tomcat时遇到的错误 清理
  • 如何将 (A OR B) AND C 等表达式展开为 A AND C OR A AND B?

    我努力了Javaluator这帮助我评估了这样的表达式 A OR B AND C 但现在我只想扩展表达式 A OR B AND C to A AND C OR A AND B任何人都可以告诉我如何在 Java 任何 API 中执行此操作或任
  • ActiveMQ 桥连接器到 WebSphereMQ 而不使用 XML 配置

    我想在嵌入式代理中创建一个代理来代理 ActiveMQ 和 WebSphere MQ 之间的连接 我知道 activemq 中存在网络连接器来执行此操作 代理到代理 但我不知道如何配置它以连接到 WebSphere MQ 在网络上进行搜索时
  • 对 Java Servlet 进行单元测试

    我想知道对 servlet 进行单元测试的最佳方法是什么 只要内部方法不引用 servlet 上下文 测试内部方法就不是问题 但是测试 doGet doPost 方法以及引用上下文或使用会话参数的内部方法呢 有没有办法简单地使用经典工具 例
  • 原型组件的 Spring 事件处理

    假设我有两个组件 X 和 Y 其中 X 是单例 而 Y 不是 当我发布XUpdateEvent时 没有问题 我可以捕获该事件 但是 对于 YUpdateEvent 我无法捕获事件 Spring 为每个触发的事件创建新实例 而不是使用已经创建
  • 如何在Netbeans中自定义jTable标题列字体大小?

    我尝试改变jtable标题字体大小Netbeans 但还不能 无论如何 表行字体大小已成功更改 这是我使用的方法 更改后的输出 问题 标题字体大小未更改 但我也想改变这一点 所以请帮助我该怎么做 一种方法是使用UIManager并替换默认的
  • 在java中迭代日期

    我需要遍历一系列日期 不确定如何在 for 循环中获取第二天 我在用java util Date So plusDays 1 不能在 for 循环中用于获取下一个日期 Used date1 new Date date1 getTime 10
  • Eclipse 错误:“设置构建路径”遇到错误

    我正在使用一个名为 jtwitter 的 API 它有一个 jar 文件 jtwitter jar 我一直在使用它并使用 git 维护它 我把代码托管在github上 有些天 我没有碰过它的代码 今天 当我克隆我的 git repo 时 实
  • Redis 中存储整数和字符串的区别

    这两个命令有什么区别吗 LPUSH myset 123 LPUSH myset 123 我想存储大约 500 万个整数 并且我想以最有效的方式做到这一点 不 没有什么区别 两者都存储为字符串 从redis io http redis io
  • AWS Java SDK 中 DynamoDB v2 的迁移详细信息?

    有没有人对新的命名空间进行了更改 com amazonaws services dynamodbv2 以及 AWS Java SDK 1 4 2 及更高版本 中 DynamoDB 的接口 本地二级指数的发布显然需要根据1 4 2 发行说明
  • IntelliJ IDEA 中的项目语言级别是多少?

    我正在使用 Java 7 SDK 和 IntelliJ IDEA IDE java version 1 7 0 11 Java TM SE Runtime Environment build 1 7 0 11 b21 Java HotSpo
  • java.lang.Object#getClass() 的 Eclipse 外部空注释

    我正在使用 Eclipse Mars 中提供的外部空注释工具 我正在尝试添加外部注释java lang Object getClass 但似乎无法正确签名 我尝试过以下变体 NonNull Class getClass L1java lan
  • 为什么永久代空间不断增长?

    我读过几篇文章 我理解以下内容 如果我错了 请纠正我和 或编辑问题 java堆是这样分段的 年轻代 创建的对象放在这里 这部分被频繁且廉价地垃圾收集 老一代 在年轻代的垃圾收集中幸存下来的对象会移到此处 该区域的垃圾收集频率较低 并且使用对
  • Java中精确的时间测量

    Java 提供了两种获取当前时间的方法 System nanoTime and System currentTimeMillis 第一个给出的结果以纳秒为单位 但实际精度比这要差得多 许多微秒 JVM 是否已经为每台特定机器提供了最佳的价值
  • 如何使用属性文件在log4j2中创建多个日志文件?

    我正在使用 property 文件在特定路径中创建日志文件 但我正在使用它创建单个文件 以下是我的属性文件代码 status error dest err name PropertiesConfig property filepath ap
  • 如何将 Hibernate 5 安装到 Apache Karaf v4 中

    我已经安装了 Apache Karaf v4 03 并查询了 Hibernate 的可用功能列表 如下所示 不幸的是 我使用的是 Hibernate v5 hibernate 3 3 2 GA Uninstalled enterprise

随机推荐

  • MXNet==1.9.x 源代码编译流程(windows + python)

    只为mxnet for win开发做做小贡献 mxnet深度玩家 写在开头 注意windows powershell 第三方依赖 python git 7zip cmake ninja opencv等 的安装和运行版本 x64和x84 须统
  • 【算法】稳定匹配(C++版)

    由于学习需要 然后花费将近两天时间研究这个问题 然后用C 描述出来 具体内容看下面 问题描述 见百度百科 https baike baidu com item E7 A8 B3 E5 AE 9A E5 A9 9A E5 A7 BB E9 9
  • Qt - 使用子目录项目来 配置多个子工程/子模块

    QT 使用子目录项目来 配置多个子工程 子模块 简述 项目配置概览 项目的多工程配置 使用多模块 特别鸣谢 Qt 之 pro 配置多个子工程 子模块 Qt Creator创建子目录项目并自定义目标文件输出目录 使用子目录项目来 配置多个子工
  • unity打包后无法读取Excel解决方法

    一 前言 最近几乎遇到了所有能遇到的unity读取Excel 的问题 因为使用的是unity5 4 而且还是32位 所以出现各种问题在所难免 废话不多说 现有的现象是 在unity的编辑器里可以完美运行 读取Excel不成问题 但是打包成e
  • 朋友们,想去一线大厂?卷起来...

    大家好 我是Tom哥 计算机研究生 校招进阿里 P7技术专家 出过专利 CSDN博客专家 负责过电商交易 社区团购 流量营销 金融等业务 多年一线团队管理经验 多年的大厂浸染 参加多次淘宝双11大促活动 在系统架构方面有丰富经验 为了帮助大
  • vue如何阻止事件冒泡

    vue阻止事件冒泡 div span bt1 span span bt2 span div click stop这样点击bt1就不会执行fatherFunc
  • sql注入_字符型、数字型判断

    如何判断sql注入是字符型还是数字型 在进行sql注入时 字段类型分为字符型或者数字型 意味着我们需要构造不同的sql语句 假设存在sql注入的url是 http 192 168 0 1 id 1 数字型判定 1 and或者or 假设数据库
  • 基于springboot+vue高校实验室教学管理系统【附源码】

    晚安独角兽 hello你好我是独角兽 很高兴你能来阅读 昵称是希望自己能不断精进 向着优秀程序员前行 博客来源于项目以及编程中遇到的问题总结 偶尔会有读书分享 我会陆续更新Java前端 后台 数据库 项目案例等相关知识点总结 感谢你的阅读和
  • 数据工程师、商业智能( BI )工程师和机器学习( ML )工程师都具体做什么?

    如果你在考虑从事数据科学的工作 可能会觉得这个领域有点令人困惑 什么是数据科学家 数据分析师和数据科学家之间有什么区别 机器学习工程师做什么 那么数据工程师 商业智能 BI 工程师和机器学习 ML 研究员呢 在这篇文章中 我们将描述数据科学
  • gitlab访问报错: Whoops, GitLab is taking too much time to respond

    目录 问题描述 解决方法 问题原因 问题描述 同学们玩gitlab的时候 通过网页访问报错 Whoops GitLab is taking too much time to respond 解决方法 等着就好了 问题原因 我们来分析一下原因
  • element-ui+vue-router:实现导航栏跳转路由

    在实际开发中我们常常遇到在单页面中点击导航栏菜单中的某一选项卡 页面中的某个部分出现相关的信息 也就是使用导航栏进行路由跳转 如下图所示 在线格式转换 示例
  • cuda11.3版本怎么安装pytorch1.5

    首先 确保你的电脑已经安装了CUDA 11 3和对应版本的驱动程序 然后 可以使用pip命令安装PyTorch 1 5 具体方法如下 pip install torch 1 5 0 cu113 torchvision 0 6 0 cu113
  • 《阿甘正传》英文原版剧本(场景+台词)(看电影学英语的最佳材料)

    当前在我朝可以下载到的 阿甘正传 的视频对应的所有版本的字幕 貌似都是字幕制作者听出来的结果 客气地说 这些版本的字幕都是不 完整 的 或者说 都是错误百出 当然 这对理解电影的剧情影响不大 但是 如果想通过看电影学英语的话 如此质量的字幕
  • linux 下各个4K区块文件大小测试速度对比 机械硬盘性能 64K性价比收益最高

    机械硬盘 每个区块取三次数最小值为准 带2G RAM缓存卡4K3 4 MB 秒8K7 3 MB 秒16K9 5 MB 秒32K16 7 MB 秒64K44 2 MB 秒128K67 1 MB 秒256K100 MB 秒512K139 MB
  • 爬虫的代理IP池写哪里了?

    亲爱的程序员小伙伴们 想要提高爬虫效率和稳定性 组建一个强大的代理IP池是非常重要的一步 今天我就来和你分享一下 代理IP池到底应该写在哪里 以及如何打造一个令人瞩目的代理IP池 准备好了吗 一起看看吧 一 代理IP池的代码位置选择 1 写
  • web基础与HTTP协议

    web基础与HTTP 一 web基础 1 DNS与域名 1 1域名 1 2 域名注册 1 3 DNS 解析 1 4 域名 二 网页的概念 1 网页 HTTP HTTPS 2 1网页基本概念 2 2 HTML 概述 2 2 1 HTML超文本
  • C++模板详解(函数模板、类模板)

    hello 这里是bangbang 今天来讲下模板 目录 1 泛型编程 2 函数模板 2 1 函数模板概念 2 2 函数模板格式 2 3 函数模板的实例化 2 4 模板参数的匹配原则 3 类模板 3 1 类模板定义格式 3 2 类模板实例化
  • cmake-3.19.2源码编译与安装

    1 介绍 和 编译环境 1 介绍 cmake是跨平台且开源的编译工具 支持如下7种平台 其他平台不认识没关系 认识linux就行 Microsoft Windows Apple macOS Linux FreeBSD OpenBSD Sol
  • 【转】局域网速度测试 三款软件轻松搞定

    局域网络可谓随处可见 我们也十分关注其实际运行速度如何 比如两台计算机间的文件传输 访问对方计算机的快慢等 而决定局域网络速度的因素很多 又不可能通过简单的操作检测出速度的大小 同时也希望能有一些软件能帮助我们治理局域网 以方便故障的排查
  • Redis系列--主从复制

    一 redis主从复制介绍 在 Redis 复制的基础上 使用和配置主从复制非常简单 能使得从 Redis 服务器 下文称 slave 能精确得复制主 Redis 服务器 下文称 master 的内容 每次当 slave 和 master