【Redis】主从复制

目录

  • 单点问题
  • 主从模式
    • 如何启动多个redis-server
    • 建立主从关系
    • 断开连接
    • 安全性
    • 只读
    • 传输延迟
    • 拓扑结构
      • 一主一从
      • 一主多从
      • 树型结构
    • 主从复制的基本流程
    • replicationid的作用
    • offset的作用
    • 全量复制和部分复制
      • 全量复制的无硬盘模式
      • 关于runid和replid
      • 部分复制
      • 实时复制

单点问题

如果某个服务器,只有一个节点(只搞一个物理服务器,来部署这个服务器程序)
1.可用性问题,如果这个机器挂了,意味着服务就中断了~
2.性能/支持的并发量也是比较有限的~

引入分布式系统,主要也就是为了解决上述的单点问题~

在分布式系统中,往往希望有多个服务器来部署redis服务,从而构成一个redis集群~,此时就可以让这个集群给整个分布式系统中其他的服务,提供更稳定/更高效的数据存储功能。

在分布式系统中,希望使用多个服务器来部署redis,存在以下几种redis的部署方式~
1.主从模式
2.主从+哨兵模式
3.集群模式

主从模式

在若干个redis节点中,有的是“主”节点,有的是“从”节点.

假设有三个物理服务器(称为是三个节点)
分别部署了一个redis-server进程~
此时就可以把其中一个节点,作为“主节点”
另外两个节点作为“从节点”

从节点,得听主节点的~

在这里插入图片描述
在这里插入图片描述
由于从节点的数据都是时刻和主节点保持一致的。因此其他的客户端从从节点这里读取数据,和从主节点这里读取数据,没有区别。

后续如果有客户端来读取数据,就可以从上述节点中,随机挑一个节点,给这个客户端提供读取数据的服务~
引入了更多的计算资源,自然能够支撑的并发量也就大幅提高了~

之前只是单个redis服务器节点,此时这哥机器挂了,整个redis就挂了。
在这里插入图片描述
如果挂掉了某个从节点,没啥影响,此时继续从主节点或者其他从节点读取数据,得到的效果完全相同!
如果是挂掉了主节点呢?还是有一定影响的!
从节点只能读数据.如果需要写数据,就没得写了。

如何启动多个redis-server

配置redis主从结构,首先需要启动多个redis服务器
正常来说,每个redis服务器程序,应该在一个单独的主机上(才是分布式)
在这里插入图片描述
在这里插入图片描述
按照后台进程的方式来运行。在这里插入图片描述
在这里插入图片描述
当前这几个节点并没有构成主从结构,而是各自为政。要想成为主从结构,还需要进一步的配置。

建立主从关系

要想配置成主从结构,就需要使用slaveof
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 在配置文件中加入slaveof {masterHost} {masterPort} 随Redis启动生效
  2. 在redis-server启动命令时加入 --slaveof {masterHost} {masterPort} 生效
  3. 直接使用redis命令:slaveof {masterHost} {masterPort} 生效
    在这里插入图片描述
    此处以6379为主节点,6380和6381为从节点。
    redis服务器的配置文件改完之后,就需要重新启动才生效!
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    主节点这边数据产生任何的修改,从节点就能立即感知到。
    就是刚才看到的这些tcp连接起到的效果。
    在这里插入图片描述
    主节点上执行
    在这里插入图片描述
    从节点上执行
    在这里插入图片描述
    offset就相当于是从节点和主节点之间,同步数据的进度~
    主节点上会收到源源不断的“修改数据”请求~
    从节点就需要从主节点这里同步这些修改请求~
    从节点和主节点之间的数据同步,不是瞬间完成的~

断开连接

slaveof no one

直接使用这个命令断开现有的主从复制关系~
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从节点断开主从关系,它就不再从属于其他节点了,里面已经有的数据,不会抛弃~
在这里插入图片描述
但是,后续主节点如果针对数据做出修改,从节点就无法再自动同步数据了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安全性

对于数据比较重要的节点,主节点会通过设置requirepass参数进行密码验证,这时所有的客户端访问必须使用auth命令实行校验。从节点与主节点的复制连接是通过一个特殊标识的客户端来完成,因此需要配置从节点的masterauth参数与主节点密码保持一致,这样从节点才可以连接到主节点并发起复制流程。

只读

默认情况下,从节点使用slave-read-only=yes配置为只读模式。由于复制只能从主节点到从节点,对于从节点的任何修改主节点都无法感知.修改从节点会造成主从数据不一致。所以建议线上不要修改从节点的只读模式。

传输延迟

主节点一般部署在不同机器上,复制时的网络延迟就成为需要考虑的问题,Redis为我们提高了repl-disable-tcp-nodelay参数用于控制是否关闭TCP_NODELAY,默认为no,即开启tcp-nodelay功能。
在这里插入图片描述

拓扑结构

若干个节点之间,按照啥样的方式来进行组织连接~

一主一从

在这里插入图片描述

在这里插入图片描述
改进办法,当主节点挂了之后,就需要让主节点从从节点这里获取到AOF的文件,再启动~

一主多从

在这里插入图片描述
主节点上的数据发生改变,就会把改变的数据同时同步给所有的从节点~
随着从节点个数的增加,同步一条数据,就需要传输多次~

树型结构

在这里插入图片描述
在这里插入图片描述

主从复制的基本流程

在这里插入图片描述

replicationid的作用

redis提供了psync命令,完成数据同步的过程~
psync不需要咱门手动执行
redis服务器会在建立好主从同步关系之后,自动执行psync
从节点负责执行psync.从节点从主节点这边拉取数据~

PSYNC replicationid offset

replication复制~
是主节点生成的.
主节点启动的时候就会生成~
(即使是同一个主节点,每次重启,生成的replication id 都是不同的)
从节点和主节点建立了复制关系,就会从主节点这边获取到replication id

info replicaiton 获取到当前replicationid的值~

offset的作用

偏移量
主节点和从节点上都会维护偏移量(整数)
主节点的偏移量,主节点上回收到很多的修改操作的命令~
每个命令都要占据几个字节~
主节点会把这些修改命令,每个命令的字节数进行累加~
从节点的偏移量,就描述了,现在从节点这里的数据同步到哪里了~

replication id 和 offset 共同描述了一个“数据集合”
如果发现两个机器,replication id 一样,offset 也一样,就可以认为这两个redis机器上存储的数据就是完全一样的!!

全量复制和部分复制

psync这里可以从主节点获取全量数据,也可以获取一部分数据。

主要就是看offset这里的进度~
offset写作-1,就是获取全量数据.
offset写具体的正整数,则是从当前偏移量位置来进行获取~

啥时候进行全量复制:
1.首次和主节点进行数据同步
2.主节点不方便进行部分复制的时候

啥时候进行部分复制:
从节点之前已经从主节点上复制过数据了~因为网络抖动或者从节点重启了,
从节点需要重新从主节点这边同步数据,此时看看能不能只同步一部分

全量复制的无硬盘模式

主节点,进行全量复制的时候,也支持”无硬盘模式“
主节点,生成的rdb的二进制数据,不是直接保存到文件中了~而是直接进行网络传输了
从节点之前,也是先把收到的rdb数据,写入到硬盘中,然后再加载~现在也可以省略这个过程,直接b把收到的数据进行加载了

即使引入了无硬盘模式,仍然整个操作时比较重量,比较耗时的.网络传输时没法省的~
相比于网络传输来说,读写硬盘时小头。

关于runid和replid

一个服务器上,replication id 和 run id是都存在的!!两个不同的id,看起来非常像~
主节点
info replication
在这里插入图片描述
info server
在这里插入图片描述
从节点6380
在这里插入图片描述
在这里插入图片描述
从节点6381
在这里插入图片描述
在这里插入图片描述
run id 是每个节点都不相同的.
replid则是具有主从关系的节点,是相同的~

在这里插入图片描述
在这里插入图片描述

部分复制

从节点要从主节点这里进行全量复制,全量复制,开销是很大的。
有些时候,从节点本身已经持有了主节点的绝大部分数据,这个时候,就不太需要进行全量复制了。

比如,出现网络抖动~主节点这边最近修改的数据可能就无法及时同步过来了
更严重的,从节点已经感知不到主节点了~(进一步的从节点可能会升级成主节点)
网络抖动,一般都是“暂时的”,过一会就恢复了~
此时就可以让从节点和主节点重新建立联系~

当从节点和主节点重新建立连接之后,就需要进行数据的同步~

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实时复制

全量复制:从节点刚连上主节点之后,进行的数据初始化工作.
部分复制:全量复制的特殊情况,优化手段,目的和全量复制一样

实时复制:从节点,已经和主节点,同步好了数据了~
但是之后,主节点这边会源源不断的收到新的修改数据的请求.
主节点上的数据就会随之改变。
也需要能够同步给从节点
从节点和主节点之间会建立TCP的长连接~
然后主节点把自己收到的修改数据的请求,通过上述连接,发给从节点
从节点再根据这些修改的请求,修改内存中的数据~

在进行实时复制的时候,需要保证连接处于可用状态~
心跳包机制~
在这里插入图片描述

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

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

相关文章

07-React-redux和redux的使用

07.react-redux和redux的使用 1.redux的使用 1).redux的理解 a.redux是什么 redux是一个专门用于做状态管理的JS库(不是react插件库)。它可以用在react, angular, vue等项目中, 但基本与react配合使用。作用: 集中式管理react应用中多个组件共享的状态。 b.什么情况下需要使…

Lake Formation 和 IAM 之间的区别与联系

IAM 和 Lake Formation 都是 AWS 上的权限管理服务,且默认都是自动开启并生效的,只是如果你没有特别配置过它们,可能感觉不到它们的存在,特别是Lake Formation(后文简写为 LF),通常情况下都是“透明”的,但它确实在每次请求时进行了权限检查。本文会详细介绍一下两者之…

CPU飙高问题排查命令

1. 远程客户端连接服务器,top命令查看cpu占用最高的进程id 2. (top -H -p 进程pid) 命令: 找出进程里面线程占用CPU高的线程有哪些 ? 3. (printf 0x%x\n 线程id) 线程id转16进制 4. (./jstack PID | grep TID(十六进制) -A 30)

【rust/树莓派】使用rppalembedded-graphics控制st7789 LCD屏幕

说在前面 树莓派版本:4bLCD模块:ST7789V2 240*280 LCD树莓派系统:Linux raspberrypi 5.15.76-v8 #1597 SMP aarch64 GNU/Linuxrust版本:rustc 1.73.0 模块详情 某雪的1.69inch LCD模块,包含杜邦线 准备工作 树莓派…

Unity中Shader实现UI流光效果

文章目录 前言一、实现思路1:1、采集两张贴图,一张是主纹理,一张是扫光纹理2、在 v2f 定义一个二维变量 “uv2” 来存放 uv 偏移后的值3、在顶点着色器中,仿照之前的 uv 流动效果,与 _Time相乘后存放于 uv2 中4、最后,…

【Machine Learning】02-Advanced Learning Algorithms

02-Advanced Learning Algorithms 2. Advanced Learning Algorithms2.1 Neural Network2.1.1 概述2.1.2 Neural network model2.1.3 TensorFlow的实现2.1.4 Neural network implementation in Python2.1.5 强人工智能(AGI) 2.2 Vectorization2.2.1 矩阵使…

华山论剑:2nm芯片工艺谁更强?

在当今高速发展的科技时代,芯片工艺的重要性不言而喻。芯片制造技术不断突破,使得电子产品性能更高、功能更强大,同时也推动了整个科技行业的快速发展。本文探讨下三星、台积电和英特尔三大芯片制造巨头的工艺技术。 英特尔未来几年的主要目标…

用Wokwi仿真ESP-IDF项目

陈拓 2023/10/21-2023/10/21 1. 概述 Wokwi是一个在线的电子电路仿真器。你可以使用它来仿真Arduino、ESP32、STM32和许多其他流行的电路板、元器件以及传感器,免去使用开发板。 Wokwi提供基于浏览器的界面,您可以通过这种简单直观的方式快速开发一个…

golang查看CPU使用率与内存及源码中的//go:指令

golang查看CPU使用率与内存 1 psutil 1.1 概念与应用场景 psutil是业内一个用于监控OS资源的软件包,目前已经多种语言,包括但不限于Python、Go。 gopsutil是 Python 工具库psutil 的 Golang 移植版,可以帮助我们方便地获取各种系统和硬件信…

Scrum 敏捷管理流程图及敏捷管理工具

​敏捷开发中的Scrum流程通常可以用一个简单的流程图来表示,以便更清晰地展示Scrum框架的各个阶段和活动。以下是一个常见的Scrum流程图示例: 转自:Leangoo.com 免费敏捷工具 这个流程图涵盖了Scrum框架的主要阶段和活动,其中包括…

vue中使用coordtransform 互相转换坐标系

官方网站:https://www.npmjs.com/package/coordtransform 在使用高德sdk时,其返回的坐标在地图上显示时有几百米的偏移,这是由于高德用的是 火星坐标(GCJ02),而不是wgs84坐标。为了消除偏移,将G…

Java面试题-UDP\TCP\HTTP

UDP UDP特性 (1)UDP是无连接的:发送数据之前不需要像TCP一样建立连接,也不需要释放连接,所以减少了发送和接收数据的开销 (2)UDP 使用尽最大努力交付:即不保证可靠交付 &#xff0…

思维模型 上瘾模型(hook model)

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。你到底是怎么上瘾(游戏/抖音)的?我们该如何“积极的上瘾”?让我们来一切揭晓这背后的秘密。 1 上瘾模型的应用 1.1上瘾模型的积极应用 1 学…

【Java 进阶篇】深入理解 Bootstrap 导航条与分页条

Bootstrap 是一个强大的前端框架,为网页和应用程序开发提供了丰富的组件和工具。其中,导航条和分页条是两个常用的组件,用于创建网站的导航和分页功能。本篇博客将深入探讨 Bootstrap 导航条和分页条的使用,适用于那些希望提升网页…

Spring framework Day24:定时任务

前言 在我们的日常生活和工作中,时间管理是一项至关重要的技能。随着各种复杂任务的增加和时间压力的不断增加,如何更好地分配和利用时间成为了一项迫切需要解决的问题。在这样的背景下,定时任务成为了一种非常有效的解决方案。 定时任务&a…

【Java 进阶篇】深入了解 Bootstrap 组件

Bootstrap 是一个流行的前端框架,提供了丰富的组件,用于创建各种网页元素和交互效果。这些组件可以帮助开发者轻松构建漂亮、响应式的网页,而无需深入的前端开发知识。在本文中,我们将深入探讨 Bootstrap 中一些常用的组件&#x…

python随手小练6

1、汉诺塔 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放…

LABVIEW 安装教程(超详细)

目录 LabVIEW2017(32/64位)下载地址: 一 .简介 二.安装步骤: LabVIEW2017(32/64位)下载地址: 链接: https://pan.baidu.com/s/1eSGB_3ygLNeWpnmGAoSwcQ 密码:gjrk …

Vue--》简易资金管理系统后台项目实战(后端)

今天开始使用 node vue3 ts搭建一个简易资金管理系统的前后端分离项目,因为前后端分离所以会分两个专栏分别讲解前端与后端的实现,后端项目文章讲解可参考:前端链接,我会在前后端的两类专栏的最后一篇文章中会将项目代码开源到我…

经典算法试题(二)

文章目录 一、岁数1、题目2、思路讲解3、代码实现4、结果 二、打碎的鸡蛋1、题目2、思路讲解3、代码实现4、结果 三、分糖1、题目2、思路讲解3、代码实现4、结果 四、兔子产子1、题目2、思路讲解3、代码实现4、结果 五、矩阵问题1、题目2、思路讲解3、代码实现4、结果 六、谁是…