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.mzph.cn/news/803762.shtml

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

相关文章

Flutter仿Boss-6.底部tab切换

效果 实现 图片资源采用boss包中的动画webp资源。Flutter采用Image加载webp动画。 遇到的问题 问题:Flutter加载webp再次加载无法再次播放动画问题 看如下代码: Image.asset(assets/images/xxx.webp,width: 40.w,height: 30.w, )运行的效果&#xf…

Vue3 + Vite 构建组件库发布到 npm

你有构建完组件库后,因为不知道如何发布到 npm 的烦恼吗?本教程手把手教你用 Vite 构建组件库发布到 npm 搭建项目 这里我们使用 Vite 初始化项目,执行命令: pnpm create vite my-vue-app --template vue这里以我的项目 vue3-xm…

GPT提示词分享 —— 中医

👉 中医诊断涉及因素较多,治疗方案仅供参考,具体的方子需由医生提供。AI建议不能替代专业医疗意见,如果症状严重或持续,建议咨询专业医生。 我希望你能扮演一位既是老中医同时又是一个营养学专家,我讲描述…

Linux部署FTP服务器

文章目录 什么是FTP协议?Linux上部署FTP服务器安装FTP服务启动FTP服务编辑/etc/vsftpd.conf重新启动服务测试FTP服务 什么是FTP协议? FTP协议是一种基于TCP的文件传输协议,能够实现高效的文件上传和下载功能,最重要的是它能够使用…

LeetCode-322. 零钱兑换【广度优先搜索 数组 动态规划】

LeetCode-322. 零钱兑换【广度优先搜索 数组 动态规划】 题目描述:解题思路一:Python动态规划五部曲:定推初遍举【先遍历物品 后遍历背包】解题思路二:Python动态规划五部曲:定推初遍举【先遍历背包 后遍历物品】解题思…

组装机械狗电子玩具方案

这款机械狗玩具电子方案结合了现代电子技术和人工智能元素,旨在为用户提供一个高科技、互动性强的娱乐体验。通过不断的软件更新和硬件迭代,机械狗的功能将持续扩展。 一、功能特点: 1、自动巡游:机械狗能够自主在房间内巡游&am…

一文详解手机IP地址如何改变

在互联网时代,手机的IP地址扮演着至关重要的角色。它不仅是手机在网络中的标识,还关系到手机的网络连接、隐私保护以及访问权限等方面。然而,在某些情况下,我们可能需要改变手机的IP地址,以满足特定的需求或解决网络问…

OLAP在线实时 数据分析平台

随着业务的增长,精细化运营的提出,产品对数据部门提出了更高的要求,包括需要对实时数据进行查询分析,快速调整运营策略;对小部分人群做 AB 实验,验证新功能的有效性;减少数据查询时间&#xff0…

逆向案例十七(1)——webpack加如果之前发送公钥如何定位参数,基于中国五矿

网址链接:中国五矿集团有限公司采购电子商务平台 定位到数据包,载荷中param是一个加密参数。 每一个数据包前都有一个public返回公钥。 点击查看返回的数据 如何定位参数加密位置? 复制公钥包url的后面,进行搜索 ,查…

nodejs fs http express express-session jwt mysql mongoose

文件fs模块 读取文件内容 fs.readFile(./file/fs-01.txt, utf8, (err, data) > {if (err) {console.error(err)return}console.log(data) })写入内容到文件 const fs require(fs);const filePath "./file/output.txt";fs.writeFile(filePath, "Hello Wor…

[C++][算法基础]字符串统计(Trie树)

维护一个字符串集合,支持两种操作: I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作,所有输入的字符串总长度不超过 ,字符串仅包含小写英文字母。 输入格式 第一行包含整数…

MySQL-10. 存储引擎、视图、mysql管理

10.1 存储引擎 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 存储引擎(Stor…

【MySQL】C# 连接MySQL

C# 连接MySQL 1. 添加MySQL引用 安装完MySQL之后,在安装的默认目录 C:\Program Files (x86)\MySQL\Connector NET 8.0 中查找MySQLData.dll文件。 在Visual Studio 中为项目中添加引用。 2. 引入命名空间 using MySql.Data.MySqlClient;3. 构建连接 private …

spring boot admin搭建,监控springboot程序运行状况

新建一个spring boot web项目&#xff0c;添加以下依赖 <dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.3.0</version></dependency> <dependency&…

微信小程序自定义tabbar,页面切换存在闪动【解决方案】

需求&#xff1a; 自定义tabbar&#xff0c;在需要的几个主页面都加入这么一个组件&#xff0c;但是有个情况&#xff1b;而组件中使用照片&#xff08;svg或png&#xff09;和文字;在切换tabbar的时候&#xff0c;跳转相应的页面&#xff0c;运行到真机或是模拟器&#xff0c;…

Go —— channel (二)

一个空的 channel 会产生哪些问题 读写nil管道均会阻塞触发死锁。关闭的管道仍然可以读取数据&#xff0c;向关闭的管道写数据会触发panic。 问&#xff1a;如果有多个协程同时读取一个channel&#xff0c;channel会如何选择消费者 channel 会按照维护的 recvq 等待读消息的…

苍穹外卖11(Apache ECharts前端统计,营业额统计,用户统计,订单统计,销量排名Top10)

目录 一、Apache ECharts【前端】 1. 介绍 2. 入门案例 二、营业额统计 1. 需求分析和设计 1 产品原型 2 业务规则 3 接口设计 2. 代码开发 3. 功能测试 三、用户统计 1. 需求分析和设计 1 产品原型 2 业务规则 3 接口设计 2. 代码开发 3. 功能测试 四、订单统…

0.开篇:SSM+Spring Boot导学

1. 为什么要使用框架 Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。 几乎当下所有企业级JavaEE开发都离不开SSM&#xff08;Spring SpringMVC MyBatis&#xff09;Spring B…

什么是企业邮箱?如何选择合适的企业邮箱?

企业邮箱和个人邮箱不同&#xff0c;它的邮箱后缀是企业自己的域名。企业邮箱供应商一般都提供手机app、桌面端、web浏览器访问等邮箱使用途径。那么什么是企业邮箱&#xff1f;如何选择合适的企业邮箱&#xff1f;好用的企业邮箱应具备无缝迁移、协作、多邮箱管理等功能。 企…

STM32-模数转化器

ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换 为离散的数字信号的器件。 ADC相关参数说明&#xff1a; 分辨率&#xff1a; 分辨率以二进制&#xff08;或十进制&#xff09;数的位数来表示&#xff0c;一般有 8 位、10 位、12 位、16 位…