redis主从复制详解

redis主从复制(replica)

1、是什么?

目录

redis主从复制(replica)

1、是什么?

2、能干嘛?

3、怎么玩?

4、案例演示

前置操作

🍗一主二仆

🍕薪火相传

🌭反客为主

5、复制的原理和工作的核心流程

6、主从复制有哪些缺点


一句话总结:

就是主从复制,master以写为主,slave以读为主;当master数据变化的时候,自动将新的数据异步同步到slave数据库。

screenshot-1712646424871

2、能干嘛?

  • 读写分离

    • 写数据找主机

    • 读数据找从机

  • 容灾恢复

    • 若主机宕机,从机可以起到临时数据访问

  • 数据备份

  • 水平扩容支撑高并发

3、怎么玩?

  • 配从(库)不配主(库)

  • 权限细节,重要

    • 主机master如果配置了requirepass参数,需要密码登录,那么从机slave就要配置masterauth来设置校验密码,否则的话主机master会拒接总计salve的访问请求。

  • 基本操作命令

    • info replication

      • 可以查看复制节点的主从关系和配置信息

    • replicaof 主库IP 主库端口

      • 一般写入进redis.conf配置文件内

    • slaveof 主库IP 主库端口

      • 跟上面那个命令作用一样,不过只是临时作用。每次与主机master断开之后,都需要重新连接,除非你已经配置进redis.conf配置文件,在运行期间修改从机salve节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系转而和新的主数据库同步,重新拜码头。

    • slaveof no one

      • 使当前数据库停止和其他数据库的同步,转成主数据库,自立为王。

4、案例演示

本次案例演示为一主二从架构,来说明以上的理论理解。

前置操作

①、架构说明

  • 一个Master两个Slave

  • 拷贝多个redis.conf文件

screenshot-1712651098107

②、小口诀

  • 三台redis主机网络相互ping通且注意防火墙配置

  • 三大命令

    • 主从复制replicaof 主库IP 主库端口; 配从(库)不配主(库)

    • 改换门庭slaveof 新主库IP 新主库端口

    • 自立为王slaveof no noe

③、修改配置文件细节操作

❗注意:主机master的配置文件为redis6379.conf为例,从机的配置基本相同,个别需要修改的下面会说明。

配置细则:

  • 开启daemonize yes (redis后台运行配置)

  • 注释掉bind 127.0.0.1 (redis远程连接配置)

  • protected-mode no (关闭redis安全检测机制)

  • 指定端口:注意:redis默认端口是6379,主机master的端口就使用默认端口,从机的相应改成6380和6381两个端口。

  • 指定当前工作目录,dir

  • pid文件名字,pidfile(本次使用默认配置)

  • log文件名字,logfile (方便排查bug)

  • requirepass(设置密码为六个1)

  • dump.rdb名字

  • aof文件,appendfilename(本次使用默认配置)

  • 从机访问主机的通行密码masterauth,从机需要配置,主机不用。

❗说明:

  • 主机只需配置以上前十步即可。

  • 从机需配置全部,并且需要修改端口号,不能使用默认的端口号

  • 从机还需配置如下图片参数信息

screenshot-1712652613836

④、常用3招

经过以上的前置铺垫,终于正式进入主从复制核心重点

  • 一主二仆

  • 薪火相传

  • 反客为主

以这三招为例,一一为你娓娓道来~

🍗一主二仆

screenshot-1712651098107

方案1:配置文件固定写死

配置文件执行

  • replicaof 主库IP 主库端口号

配从库不配主库

  • 配置从机6380

  • 配置从机6381

先master后两台slave一次启动

主从关系查看

如何查看主从关系是否配置成功呢?

  • 日志

    • 查看主机日志

      screenshot-1712652613836

    • 查看从机日志

      screenshot-1712653762522

  • 命令

    • info replication命令查看

    • 查看主机

      screenshot-1712654026245

    • 查看从机

      screenshot-1712654136975

经过以上配置,主从配置就已经搭建完成

演示:主机:set k1 v1

从机:get k1

两个从机都可以查到主机设置的k1的值,说明很成功!

主从问题演示

  • 1、从机可以执行写命令吗?

    • 答案是:不能,从机只能被读

  • 2、从机切入点问题

    • 从机slave是从头开始复制还是从切入点开始复制?

      • 答案:首次一锅端,后续跟随,master写,slave跟

  • 主机shutdown后,从机会上位吗?

    • 答案:不会,从机不动,原地待命,从机数据可以正常使用,等待主机重启归来。

  • 主机shutdown后,重启后主从关系还在吗?从机还能否顺利复制?

    • 答案:关系依然在;能复制。

  • 某台从机down后,master继续,从机重启后还能跟上大部队吗?

    • 答案:能

方案2:命令操作手动指定

  • 从机停机去掉配置文件中的从机配置项,达到3台都是主机状态,个不从属

    • 就是把原来的从机一些配置修改

      • screenshot-1712655401530

  • 现在就是3台主机master

  • 预设的从机上执行以下命令

    • slaveof 主机IP 主机端口号

      • 效果就是又变成了从机

问题演示

  • 使用命令操作的话,2台从机重启后,关系还在吗?

    • 答案:关系不存在了,因为命令操作是临时的,只有配置文件操作才是持久的。

总结

配置文件 VS 命令的区别,当堂经验讲解

  • 配置文件:持久稳定

  • 命令:当此生效

🍕薪火相传

screenshot-1712656086100

几句话总结就是从机后面再跟从机

  • 上一个slave可以是下一个slave的master,ave同样可以接收其他 引aves的连接和同步请求,那么该引ave作为了链条中下一个的master可以有效减轻主master的写压力

  • 中途变更转向:会清除之前的数据,重新建立拷贝最新的

  • slaveof 新主机IP 新主机端口号

演示

从原来的从机中选一台执行slaveof 新主机IP 新主机端口号此命令,这样原来的主机就只有一个从机跟着,原来的其中一个从机也变成了主机的身份。

❗注意:虽然其中一个从机也变成了主机,但是它依然只能被读,不能写,因为它上面有总的一个老大(主机)

🌭反客为主

一句话总结就是从机不想再当从机,想自立为王

操作:使用当前从机执行SLAVEOF no one即可

以上就是主从复制的案例演示

5、复制的原理和工作的核心流程

  • slave启动,同步初请

    • slave启动成功连接到master后会发送一个sync命令

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

  • 首次连接,全量复制

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

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

  • 心跳持续,保持通信

    • 主机会发送一个心跳包检测,默认10s发一次问:兄弟们,还在吗,兄弟们,还在吗…..

  • 进入平稳,增量复制

    • Master继续将新的所有收集到的修改命令自动依次传给slave,完成同步

  • 从机下线,重连续传

    • master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterld,offset是保存在backlog中的:Master只会把已经复制的offset后的数据复制给SIave,类似断点续传。

6、主从复制有哪些缺点

  • 复制延时,信号衰减

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

      • screenshot-1712658038660

  • master挂了如何办?

    • 默认情况下,不会在slave节点中自动重选一个master

    • 那每次都要人工干预?

正是由于master挂掉了,从机不会自动重选一个主机,紧接着就有了redis哨兵模式

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

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

相关文章

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--wordpress中的著名循环

wordpress中的著名循环 首先,在深入研究任何代码之前,我们首先要确保我们有不止一篇博客文章可以工作。因此,我们要去自己的wordpress站点,从侧边栏单机Posts(文章),进行创建 在执行代码的时候会优先执行single.php如…

在B站看课的进度助手

效果 代码 BilibiliVideoDurationCrawler import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; imp…

Git分布式版本控制系统——Git常用命令(一)

一、获取Git仓库--在本地初始化仓库 执行步骤如下: 1.在任意目录下创建一个空目录(例如GitRepos)作为我们的本地仓库 2.进入这个目录中,点击右键打开Git bash窗口 3.执行命令git init 如果在当前目录中看到.git文件夹&#x…

Redis 常用的基本命令

🔥博客主页:fly in the sky - CSDN博客 🚀欢迎各位:点赞👍收藏⭐️留言✍️🚀 🎆慢品人间烟火色,闲观万事岁月长🎆 📖希望我写的博客对你有所帮助,如有不足,请指正&#…

【Linux】进程的状态(运行、阻塞、挂起)详解,揭开孤儿进程和僵尸进程的面纱,一篇文章万字讲透!!!!进程的学习②

目录 1.进程排队 时间片 时间片的分配 结构体内存对齐 偏移量补充 对齐规则 为什么会有对齐 2.操作系统学科层面对进程状态的理解 2.1进程的状态理解 ①我们说所谓的状态就是一个整型变量,是task_struct中的一个整型变量 ②.状态决定了接下来的动作 2.2运行状态 2.…

【JavaWeb】Day34.MySQL概述——数据库设计-DDL(一)

项目开发流程 需求文档: 在我们开发一个项目或者项目当中的某个模块之前,会先会拿到产品经理给我们提供的页面原型及需求文档。 设计: 拿到产品原型和需求文档之后,我们首先要做的不是编码,而是要先进行项目的设计&am…

荣湃半导体隔离芯片系列产品介绍和选型

一、公司简介 荣湃半导体(上海)有限公司成立于2017年,专注于高性能、高品质模拟芯片的设计与研发,凭借独创的电容智能分压技术(iDivider技术),致力于成为全球技术领先的高性能模拟集成电路产品…

JVM基础篇

初识JVM Java虚拟机的组成 字节码文件 i与1 javap ideajclasslib arthas(线上运行的)

【小程序】常用方法、知识点汇总1

欢迎来到《小5讲堂》 这是《小程序》系列文章,每篇文章将以博主理解的角度展开讲解, 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言请求超时Markdown解析逐行显示效果文本变动事件转发…

T527 Qt 触摸 ----- TSLIB

一、调试 1、驱动路径 bsp/drivers/input/ctp/gt9xx/gt9xx_ts.c 2、硬件接口 挂载在TWI0下 3、中断复位脚 4、设备树 &twi0 {clock-frequency <400000>;pinctrl-0 <&twi0_pins_default>;pinctrl-1 <&twi0_pins_sleep>;pinctrl-names &quo…

面试算法-172-对称二叉树

题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 解 class Solution {public boolean isSymmetric(TreeNode root) {return isSymm(root.left,root.right);}public b…

赛氪网|2024中国翻译协会年会“AI科技时代竞赛与就业”分论坛

在2024年中国翻译协会年会期间&#xff0c;赛氪网与中西部翻译协会共同体多边合作平台共同承办&#xff0c;于3月30日下午在长沙成功举办了“AI科技时代竞赛与就业分论坛”。该论坛汇聚了众多翻译界、科技界和教育界的专家学者&#xff0c;共同探讨科技、实践、就业与竞赛人才培…

【javaScript面试题】2023前端最新版javaScript模块,高频24问

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于javaScript的面试题 目录 一、2023javaScript面试题精选 1.js的数据类型…

如何用Python编写简单的网络爬虫(页面代码简单分析过程)

一、什么是网络爬虫 在当今信息爆炸的时代&#xff0c;网络上蕴藏着大量宝贵的信息&#xff0c;如何高效地从中获取所需信息成为了一个重要课题。网络爬虫&#xff08;Web crawler&#xff09;作为一种自动化工具&#xff0c;可以帮助我们实现这一目标&#xff0c;用于数据分析…

注解式 WebSocket - 构建 群聊、单聊 系统

目录 前言 注解式 WebSocket 构建聊天系统 群聊系统&#xff08;基本框架&#xff09; 群聊系统&#xff08;添加昵称&#xff09; 单聊系统 WebSocket 作用域下无法注入 Spring Bean 对象&#xff1f; 考虑离线消息 前言 很久之前&#xff0c;咱们聊过 WebSocket 编程式…

Android 属性动画及自定义3D旋转动画

Android 动画框架 其中包括&#xff0c;帧动画、视图动画&#xff08;补间动画&#xff09;、属性动画。 在Android3.0之前&#xff0c;视图动画一家独大&#xff0c;之后属性动画框架被推出。属性动画框架&#xff0c;基本可以实现所有的视图动画效果。 视图动画的效率较高…

新品攻略—小功率、小体积、高效率!LED驱动模块RSC6218A

瑞森半导体&#xff08;REASUNOS&#xff09;推出应用在5W-18W LED电源上的LED驱动模块RSC6218A。 LED驱动模块RSC6218A是一款LLC 谐振拓扑功率模块&#xff0c;带有半桥驱动的控制电路和功率转化器件&#xff0c;适用于 LED 恒流控制线路&#xff0c;电路工作频率可达200KHz。…

MicroPython with LVGL

官方博客:Micropython LittlevGL | LVGL’s Blog github:GitHub - lvgl/lv_micropython: Micropython bindings to LVGL for Embedded devices, Unix and JavaScript 官方在线模拟器:https://sim.lvgl.io/(需要电脑能访问外网才能使用) 电脑不能访问外网会出现以下错误&…

GlusterFS分布式存储

目录 前言 一、GlusterFS分布式存储概述 1、GFS概念 2、GFS特点 3、GFS术语 4、GFS构成 5、GFS工作流程 6、后端存储如何定位文件 7、GlusterFs的卷类型 7.1 Distributed Volume&#xff08;分布式卷&#xff09; 7.2 Striped Volume&#xff08;条带卷&#xff09…

vue通过echarts实现数据可视化

1、安装echarts cnpm install echarts -Sechart官方图表示例大全&#xff1a;https://echarts.apache.org/examples/zh/index.html#chart-type-line 2、代码实现 <template><div><div class"box" ref"zhu"></div><div class&…