Redis主从

news2024/11/27 14:44:52

搭建主从架构

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。

 

5之前叫slave,之后叫replica好像

共包含三个节点,一个主节点,两个从节点。

这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:

 

准备实例和配置

(1)创建目录

# 进入/tmp目录
cd /tmp
# 创建目录
mkdir 7001 7002 7003

(2)恢复原始配置

# 开启RDB
# save ""
save 3600 1
save 300 100
save 60 10000

# 关闭AOF
appendonly no

这些都是默认的,如果你之前改过,需要改回来,在redis.conf中

(3)拷贝配置文件到每个实例目录

echo 7001 7002 7003 | xargs -t -n 1 cp redis-6.2.4/redis.conf

redis.conf目录你需要用你自己的

假设有A、B两个Redis实例,如何让B作为A的slave节点?

在B节点执行命令:slaveof A的IP A的port,如果主节点有密码的话需要加上密码

主从数据同步原理

 master如何判断slave是不是第一次来同步数据?这里会用到两个很重要的概念:

Replication Id:

        简称replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承master节点的replid

offset:

         偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。

因此slave做数据同步,必须向master声明自己的replication id 和offset,master才可以判断到底需要同步哪些数据

简述全量同步的流程?

slave节点请求增量同步

master节点判断replid,发现不一致,拒绝增量同步

master将完整内存数据生成RDB,发送RDB到slave

slave清空本地数据,加载master的RDB

master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave

slave执行接收到的命令,保持与master之间的同步

主从第一次同步是全量同步 但如果slave重启后同步,则执行增量同步

repl_baklog大小有上限,写满后会覆盖最早的数据。如果slave断开时间过久,导致尚未备份的数据被覆盖,则无法基于log做增量同步,只能再次全量同步。

优化方案

在master中配置repl-diskless-sync yes启用无磁盘复制,避免全量同步时的磁盘IO

Redis单节点上的内存占用不要太大,减少RDB导致的过多磁盘IO

适当提高repl_baklog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步

限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构,减少master压力

总结

简述全量同步和增量同步区别?

全量同步:

master将完整内存数据生成RDB,发送RDB到slave。

后续命令则记录在repl_baklog,逐个发送给slave。

增量同步:

slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave

什么时候执行全量同步?

slave节点第一次连接master节点时

slave节点断开时间太久,repl_baklog中的offset已经被覆盖时

什么时候执行增量同步?

slave节点断开又恢复,并且在repl_baklog中能找到offset时 

思考

slave节点宕机恢复后可以找master节点同步数据,那master节点宕机怎么办?

提示(Redis哨兵),下集再说

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

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

相关文章

chatgpt赋能Python-pandas归一化

深入了解Pandas归一化:什么是归一化,为什么需要归一化? Pandas是Python中最常用的数据分析库之一。Pandas提供了许多功能,使数据分析变得更加轻松。其中,归一化是数据分析中一个重要的概念,它将数据缩放到…

chatgpt赋能Python-pycharm如何横向输出

PyCharm如何横向输出 如果你是Python开发者,那么你一定会使用到PyCharm这个IDE,而且PyCharm的强大也是得到大家的一致认可的。但是,有没有遇到过需要横向输出的情况呢?比如输出一个很长的字符串,但是你希望它能够在你…

【利用AI刷面试题】AI:十道不常见的TypeScript面试题

文章目录 前言😏以下是关于 TypeScript 的一些偏僻的面试题😝1. 泛型约束中的 "extends" 关键字有哪些用法和含义?2. 什么是交叉类型(Intersection Types)?如何在 TypeScript 中定义和使用它们&a…

chatgpt赋能Python-pycharm如何加库

Pycharm如何加库:A Complete Guide Pycharm是一款强大的Python集成开发环境(IDE),它提供了许多有用的工具和功能来简化Python开发过程。尽管Pycharm已经内置了许多功能和工具,但我们在开发过程中仍然需要使用第三方库来提高效率。在本文中&a…

MySQL 常用/见函数

目录 日期函数 字符串函数 数学函数 其它函数 日期函数 获得时分秒: select current_time(); ---------------- | current_time() | ---------------- | 13 :51:21 | ---------------- 日期就是date 获得时间戳: select current_timestamp()…

chatgpt赋能Python-pycharm中添加库

PyCharm中添加库:让你的Python开发更加高效 Python是一种高级编程语言,因其易学易用的特性被广泛应用于Web开发、数据分析、人工智能等领域。PyCharm是Python开发的一种强大的IDE(集成开发环境),它提供了各种有用的功…

【P24】JMeter 正则表达式用户参数(RegEx User Parameters)

文章目录 一、准备工作二、测试计划设计 一、准备工作 慕慕生鲜: http://111.231.103.117/#/login 进入网页后,登录,页面提供了账户和密码 搜索框输入“虾” 右键检查或按F12,打开调试工具,点击搜索 二、测试计划设…

Hantek 5000系列示波器原理图研究

Hantek 5000系列是Hantek(汉泰)2010年左右推出的入门型号示波器,最高采样率1GSa/s,带宽200M。2010年的时候,EEVblog论坛的大佬tinhead给出了该系列示波器的详细原理图(下载),图的可读…

RapidVideOCR(视频硬字幕提取工具)新增exe版

引言 考虑到提取视频字幕的小伙伴大多不是程序员行当,为了降低使用门槛,特此推出界面版的RapidVideOCR Desktop. RapidVideOCR Desktop需要搭配VideoSubFinder使用。它们两个关系如下图所示: #mermaid-svg-md1FaKkTWKdZahtd {font-family:&q…

Git常用命令rebase

Git常用命令rebase 1、git常用命令rebase rebase 会把你当前分支的 commit 放到公共分支的最后面,所以叫变基,就好像你从公共分支又重新拉出来这个 分支一样。 例如如果你从 master 拉了个 feature 分支出来,然后你提交了几个 commit&…

VScode添加右键运行、并设置每次运行前都清屏即去除之前的输出

一、添加右键运行 下载安装运行插件即可 二、运行前清屏 在运行插件中设置 找到Code-runner: Clear Previous Output,把√打上即可

同样都是PoE交换机,标准PoE交换机、非标准PoE交换机和非PoE交换机三者到底有啥区别?

网络交换机是企业和组织中构建局域网、企业网络和数据中心网络的重要组成部分。其中最常见的类型之一是PoE交换机。PoE交换机是一种允许通过网络线路提供电源和数据传输的交换机,这种技术可以为设备提供电力,避免了需要附加电源的麻烦。 本文将介绍PoE交…

从零制作操作系统——环境搭建以及HelloWorld

从零制作操作系统——环境搭建以及HelloWorld 起因 最近在学习操作系统,尝试自己照着书搓一个出来。 环境搭建 基础环境 我们的操作系统在x86平台的Linux下进行编写和运行。编辑器用的VIM。 我的系统是Fedora 36,当然你也可以使用Ubuntu或者其他Li…

码云(Gitee)与Git配置

前提 本文配置的前提是已经申请好了码云(gitee)的账号和电脑上已经安装好了git 1.配置gitee的ssh公钥 在gitee的个人设置里面配置ssh公钥 就是将公钥复制到右侧的框中, 并点击确定即可。 1.1生成ssh公钥 右键鼠标打开git bash here 输入如下命令,邮箱就填自己…

栈与队列的对决:如何用栈实现队列?

本篇博客会讲解力扣“232. 用栈实现队列”的解题思路,这是题目链接。 先来审题: 以下是输出示例: 以下是提示和进阶: 栈是一种后进先出的数据结构,而队列是一种先进先出的数据结构,如何用栈实现队列呢&…

chatgpt赋能Python-pingouin_python

了解Pingouin Python对数据分析和统计学的优势 介绍Pingouin Python Pingouin Python是一个强大的Python包,它提供了在数据分析和统计学中所需的一些主要函数。使用Pingouin Python可以方便地进行t-检验、方差分析、相关性等常用的数据分析和统计学任务。 此外&a…

Vue组件复杂表格高级编辑功能

Vue 组件复杂表格高级编辑功能 文章目录 Vue 组件复杂表格高级编辑功能1. sync 父子组件数据同步更新2. 在 el-table 中开发高级编辑表格功能3. 参考文献 在vue中组件的定义是希望组件可以做单一的功能,做到高复用,低耦合,所以父子组件之间的…

【每日一题/简单模拟题】2446. 判断两个事件是否存在冲突

⭐️前面的话⭐️ 本篇文章介绍【2446. 判断两个事件是否存在冲突】题解,算法标签:【模拟】,【字符串】,展示语言c/java。 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞&#x…

某大学信息安全竞赛——栈迁移加强版——只溢出0x8,无限ROP

芝士题目: 链接:https://pan.baidu.com/s/1uwFlcSg94MuC2tPi-HCb9w 提取码:joj6 感悟: 之前我只做过溢出超过0x10这样的栈迁移,思路就是找机会去泄露栈空间的地址然后把栈迁移到我们可以控制的栈空间,亦…

Linux_证书_Openssl工具详解

文章目录 OpenSSLopenssl实现对称加密openssl生成密钥对、非对称加密、数字签名根据CA颁布证书生成ca私钥和ca证书根据ca生成证书 小结 OpenSSL OpenSSL 是一个开源项目,其组成主要包括一下三个组件: openssl:多用途的命令行工具 libcrypt…