Redis 主从复制集群搭建及其原理

目录

前言

配置文件

启动服务

配置主从关系

两种配置方式

slaveof

配置文件

补充

缺点

认证

复制原理

全量同步

增量同步


前言

单机的 redis 的性能虽然已经很强大了,但是随着业务的扩展,总有一天会遇到性能瓶颈,针对高并发带来的性能问题,解决的思路其实就是将请求分散,用多个 redis 来处理请求。

具体的操作其实就是搭建一个简单的 redis 主从复制集群。使用 redis 主从复制集群,master 节点用来处理写请求,slave 节点用来处理读请求,当master数据变化时,自动将新的数据异步同步到slave节点上,实现读写分离。根据并发量的大小,动态扩展集群里的 slave 节点,实现水平化扩容

本文演示搭建一个 redis 主从复制集群(一主二从)的基本流程。

图方便省事,就在一台服务器上直接启动三个 redis 服务。

配置文件

创建 redis-replication 文件夹

mkdir redis-replication

将默认配置文件 redis.conf 放入 redis-replication,并修改其中几项配置

daemonize no 改为 daemonize yes

protected-mode yes 改为 protected-mode no 关闭保护模式

bind 127.0.0.1 直接注释掉,否则影响远程IP连接

创建 redis-7000.conf,写入以下内容

include redis.conf
pidfile /var/run/redis_7000.pid
port 7000
dbfilename dump_7000.rdb
appendfilename appendonly_7000.aof
replica-priority 90

#logfile logs/access_7000.log

同理,创建 redis-7001.conf 和 redis-7002.conf,然后写入以上内容,将 7000 分别修改为 7001 和 7002,修改后文件夹如下所示

启动服务

在 redis-replication 目录下,依次启动服务

redis-server ./redis-7000.conf

redis-server ./redis-7001.conf

redis-server ./redis-7002.conf

配置主从关系

这里选择将 7000 端口的 redis 作为 master 节点

分别用三个终端,使用 redis-cli 连接 7000 7001 7002 的 redis

redis-cli -h 127.0.01 -p 7000
redis-cli -h 127.0.01 -p 7001
redis-cli -h 127.0.01 -p 7002

 在 7001 和 7002 上使用 slaveof 命令,配置为 master 的 slave 节点

slaveof 127.0.0.1 7000

在 7000 上查看 slave 信息

info replication

这样一个一主二从的主从复制集群就搭建完成了

两种配置方式

slaveof

文中所示,启动服务后,使用 slaveof 命令来配置当前 redis 为指定 master 的从节点。这种配置方式当次生效,下次启动时则需要再次配置

#配置当前redis为指定master的slave节点
slaveof -h master地址 -p 端口

#升级为主机
slaveof no one

配置文件

在配置文件中配置 repllicaof,这种方式永久有效,不用每次启动都去配置主从关系

replicaof master主机地址 端口

补充

缺点

主从复制存在延迟,会出现数据不一致现象

master 节点宕机,不会自动选举 master 节点,需要人工干预

认证

如果为了安全,连接 redis 需要密码,那么在配置文件中也需要配置连接主机密码

节点各自的配置文件添加以下配置项

requirepass "此redis的密码"

masterauth "主节点的密码,如果为主节点,就是填自己的密码"

复制原理

全量同步

  • Replication Id:每一个master都有唯一的replid,slave会继承master节点的replid
  • offset:偏移量,如果slave的offset小于master的offset,说明slave数据落后与master,需要更新

plantuml

@startuml
'https://plantuml.com/sequence-diagram

autonumber

slave -> master: slaveof,建立连接
slave -> master: sync,请求同步数据
master -> slave: 第一次同步,返回master的数据版本(replid 和 offset)
master -> master: bgsave,生成rdb
master -> master: 同时记录rdb期间的所有命令(repl_backlog)
master -> slave: 发送rdb文件
slave -> slave: 清空本地数据,加载rdb文件
master -> slave: 发送repl_baklog中的命令
slave -> slave: 执行接受到的命令

@enduml

时序图

 

增量同步

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

plantuml

@startuml
'https://plantuml.com/sequence-diagram

autonumber

slave -> master: 发送replid与offset
master -> master: 判断replid是否一致
master -> slave: 一致返回continue
master -> slave: 发送repl_baklog中offset后的命令
slave -> slave: 执行接受到的命令

@enduml

时序图

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cJSON(API的详细使用教程)

我们今天来学习一般嵌入式的必备库,JSON库 1,json和cJSON 那什么是JSON什么是cJSON,他们之间有什么样的关联呢,让我们一起来探究一下吧。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&…

注意力机制篇 | YOLOv8改进之添加DAT注意力机制

前言:Hello大家好,我是小哥谈。DAT(Vision Transformer with Deformable Attention)是一种引入了可变形注意力机制的视觉Transformer。在训练算法模型的时候,通过引入可变形注意力机制,改进了视觉Transformer的效率和性能,使其在处理复杂的视觉任务时更加高效和准确。�…

扫地机器人(蓝桥杯)

文章目录 扫地机器人题目描述解题思路二分贪心 扫地机器人 题目描述 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示。 走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中。已知扫地机器人每分钟可以移动…

黑马HTMLCSS基础

黑马的笔记和资料都是提供好了的,这个文档非常适合回顾复习。我在黑马提供的笔记上做了一些微不足道的补充,以便自己复习查阅。该笔记比较重要的部分是 表单,http请求 第一章. HTML 与 CSS HTML 是什么:即 HyperText Markup lan…

目标检测——植物病害图像数据集

一、重要性及意义 首先,植物病害图像是了解农业中植物生长和受病害情况的重要信息来源。通过对这些图像的分析,可以直观地观察到植物的生长状况,及时发现病害的存在。这不仅有助于农民和研究人员快速、准确地诊断植物病害,还能为…

代码随想录第27天 | 39. 组合总和、40.组合总和II、131.分割回文串

一、前言 今天的主题还是回溯算法&#xff0c;还是根据那个backtracking模板&#xff0c;但是今天会涉及到去重和一些小细节的问题。 二、组合总和 1、思路&#xff1a; 我一开始的想法就是在for循环转化为&#xff1a; for(int i 0; i < size; i) 但是这个是会陷入一…

C#实现Word文档转Markdown格式(Doc、Docx、RTF、XML、WPS等)

文档格式的多样性丰富了我们的信息交流手段&#xff0c;其中Word文档因其强大的功能性而广受欢迎。然而&#xff0c;在网络分享、版本控制、代码阅读及编写等方面&#xff0c;Markdown因其简洁、易于阅读和编辑的特性而展现出独特的优势。将Word文档转换为Markdown格式&#xf…

智慧安防监控EasyCVR视频调阅和设备录像回看无法自动播放的原因排查与解决

智慧安防监控EasyCVR视频管理平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚EasyCVR平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…

JMeter自定义日志与日志分析

1 JMeter日志概览 JMeter与Java程序一样&#xff0c;会记录事件日志&#xff0c;日志文件保存在bin目录中&#xff0c;名称为jmeter.log。当然&#xff0c;我们也可以在面板中直接察看日志&#xff0c;点击右上角黄色标志物可以打开日志面板&#xff0c;再次点击收起。 可见&…

数据分析之Tebleau可视化:折线图、饼图、环形图

1.折线图的绘制 方法一&#xff1a; 拖入订单日期和销售金额&#xff0c;自动生成一个折线图 方法二&#xff1a; 选中订单日期和销售金额&#xff08;摁住ctrl可以选择多个纬度&#xff09; 点击右边的智能推荐&#xff0c;选择折线图 2.双线图的绘制、双轴的设置 方法一&…

在Python中使用PyPDF2库在PDF文件中插入内容

目录 一、引言 二、PyPDF2库的安装 三、PyPDF2库的基本使用 四、在PDF文件中插入内容 五、注意事项和扩展 六、总结 一、引言 PDF&#xff08;Portable Document Format&#xff09;文件因其跨平台、不易被篡改的特性&#xff0c;广泛应用于日常办公和文档交流中。在实际…

MySQL连接查询补充与三表连查

前言 MySQL多表联查是指在一个查询语句中同时查询多个表&#xff0c;并根据表之间的关联条件进行数据的匹配和筛选。通过多表联查&#xff0c;我们可以获取到更丰富的数据信息&#xff0c;从而满足复杂的查询需求。先前了解了三种简单的连接查询方式&#xff0c;这里将进一步介…

17.应用负载压力测试

早些点&#xff0c;下午题考&#xff0c;最近几年出现的少&#xff1b; 备考较为简单&#xff1b;历年真题相似度高&#xff1b; 主要议题&#xff1a; 1.负载压力测试概述 注意这些测试细微的差别&#xff1b; 负载测试和压力测试的方法比较相似&#xff0c;但是目的不同&a…

如何使用potplayer在公网环境访问内网群晖NAS中储存在webdav中的影视资源

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-D7WJh3JaNVrLcj2b {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

臻奶惠无人售货机:新零售时代的便捷消费革命

臻奶惠无人售货机&#xff1a;新零售时代的便捷消费革命 在新零售的浪潮中&#xff0c;智能无人售货机作为一个创新的消费模式&#xff0c;已经成为距离消费者最近的便捷购物点之一。这种模式不仅能够满足居民对消费升级的需求&#xff0c;还能通过建立多样化和多层次的消费体…

2024年04月编程语言流行度排名

点击查看最新编程语言流行度排名&#xff08;每月更新&#xff09; 2024年04月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多&#xff0c;大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自…

MotionBuilder 脚本执行

目录 MediaPipe_Pose_in_MotionBuilder 你可以用以下几种方式执行你的脚本&#xff1a; MediaPipe_Pose_in_MotionBuilder https://github.com/Ndgt/MediaPipe_Pose_in_MotionBuilder/blob/main/PoseLandmark.py tcp通信 https://github.com/nils-soderman/motionbuilder-s…

银行业架构网络BIAN (Banking IndustryArchitecture Network)详细介绍

BIAN ( The Banking Industry Architecture Network) 是一个业界多方协作的非营利性组织&#xff0c;由全球领先银行、技术提供商、顾问和学者组成&#xff0c;定义了一个用以简化和标准化核心银行体系结构的银行技术框架。这一框架基于面向服务的架构 (SOA) 原则&#xff0c;银…

RabbitMQ安装及Springboot 集成RabbitMQ实现消息过期发送到死信队列

死信队列 RabbitMQ 的死信队列&#xff08;Dead-Letter-Exchanges&#xff0c;简称 DLX&#xff09;是一个强大的特性&#xff0c;它允许在消息在队列中无法被正常消费&#xff08;例如&#xff0c;消息被拒绝并且没有设置重新入队&#xff0c;或者消息过期&#xff09;时&…

微服务管理(完整)

前言&#xff1a; 分享一篇学微服务管理的过程 一&#xff0c;etcd入门 1&#xff0c;简介 1.1&#xff0c;etcd是什么 etcd是CoreOS团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。 官网上的一段描述&#xff1a; A…