Redis 复制(replica)

1. 是什么

1.1 官网地址  https://redis.io/docs/management/replication/ 

1.2 一句话

1. 就是主从复制,master以写为主,slave以读为主

2. 当master数据变化的时候,自动将新的数据异步同步到其它slave数据库

2. 能干嘛

1. 读写分离

2. 容灾恢复

3. 数据备份

4. 水平扩容支撑高并发

3. 怎么玩

3.1 配从(库)不配主(库)

3.2 权限细节

1. master如果配置了requirepass参数,:需要密码登陆

2. 那么slave就要配置masterauth来设置校验密码否则的话master会拒绝slave的访问请求

3.3 基本操作命令

1. info replication

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

2 replicaof 主库IP 主库端口

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

3. slaveof 主库IP 主库端

每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件

在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库那么会停止和原主数据库的同步关系转而和新的主数据库同步,重新拜码头

4. slaveof no one

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

4. 案例演示

4.1 架构说明

4.1.1 一个master两个slave

4.1.2 拷贝多个redis.conf文件

redis6379.conf

redis6380.conf

redis6381.conf

4.2 小口诀

4.2.1 三边网络相互ping通且注意防火墙配置

4.2.2 三大命令

1. 主从复制

replicaof 主库IP 主库端
配从(库)不配主(库)


2. 改换门庭
slaveof 新主库IP 新主库端门


3. 自立为王
slaveof no one

4.3 修改配置文件细节操作,以 redis6379.conf为例

1.开启daemonize yes

2.注释掉bind 127.0.0.1 

3.protected-mode no 

4.指定端口 

5.指定当前工作目录,dir

6.pid文件名字,pidfile

7.log文件名字,logfile 

8.requirepass

9.dump.rdb名字

10.aof文件,appendfilename

11.从机访问主机的通行密码masterauth,必须 ,  从机需要配置,主机不用

4.4 常用3招

4.4.1 一主二仆

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

1. 配置文件执行

replicaof 主库IP 主库端口
2. 配从(库)不配主(库)

配置从机6380

配置从机6381


3. 先master后两台slave依次启动 

4. 主从关系查看
~ 日志

主机日志


备机日志


~ 命令
info replication命令查看

主从问题演示

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


2.从机切入点问题 

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

master启动,写到k3

slave1跟着master同时启动,跟着写到k3

slave2写到k3后才启动,那之前的是否也可以复制?

Y,首次一锅端,后续跟随,master写,slave跟

3.主机shutdown后,从机会上位吗? 

主机shutdown后情况如何?从机是上位还是原地待命   

从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来

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


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

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

1. 从机停机去掉配置文件中的配置项3台目前都是主机状态,各不从属


2. 3台master 目


3. 预设的从机上执行命令
~ slaveof 主库IP 主库端
~ 效果 


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

配置 VS 命令的区别,当堂试验讲解

配置,持久稳定

命令,当次生效

4.4.2 薪火相传

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

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

3. slaveof 新主库IP 新主库端口

4.4.3 反客为主

SLAVEOF no one 使当前数据库停止与其他数据库的同步,转成主数据库

5. 复制原理和工作流程

5.1 slave启动,同步初请

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

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

5.2 首次连接,全量复制

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

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

5.3 心跳持续,保持通信  

repl-ping-replica-period 10

master发出PING包的周期,默认是10

 

5.4 进入平稳,增量复制

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

5.5 从机下线,重连续传

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

6. 复制的缺点

6.1 复制延时,信号衰减 

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

6.2 master挂了如何办?

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

那每次都要人工干预?

无人值守安装变成刚需

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

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

相关文章

正规黄金代理的三大要素

对于现货黄金投资来说,寻找一个正规的黄金代理是十分重要的问题。在目前的现货黄金投资市场中,现货黄金代理的数量很多,他们都致力于耕耘现货黄金投资市场。当越来越多的专业人士加入到现货黄金投资的市场中当中时,这个市场将会越…

手写Mybatis:第10章-使用策略模式,调用参数处理器

文章目录 一、目标:参数处理器二、设计:参数处理器三、实现:参数处理器3.1 工程结构3.2 参数处理器关系图3.3 入参数校准3.4 参数策略处理器3.4.1 JDBC枚举类型修改3.4.2 类型处理器接口3.4.3 模板模式:类型处理器抽象基类3.4.4 类…

Unity Android 之 在Unity 中引入 OkHttp的操作注意(OKHttp4.xx- kotlin 的包)简单记录

Unity Android 之 在Unity 中引入 OkHttp的操作注意(OKHttp4.xx- kotlin 的包)简单记录 目录 Unity Android 之 在Unity 中引入 OkHttp的操作注意(OKHttp4.xx- kotlin 的包)简单记录 一、简单介绍 二、OKHttp 4.xx 的 SDK 封装 aar 给 Unity 的使用注意 三、附录 OKHttp 的…

德庄借助纷享销客CRM系统实现高效管理

德庄集团创于1999年,是一家集餐饮产业、食品产业、科技研发及文化研究为一体的现代化民营企业,下属9家子公司、2大现代化食品加工基地、1所研究所、1所培训学校、1个技术中心。拥有德庄、青一色、滟设、香漫谷、饭空等8大子品牌,呈现出良好的…

IDEA新建SpringBoot项目时启动编译报错:Error:java: 无效的源发行版: 17

文章目录 原因检查解决步骤修改jdk修改SpringBoot版本 原因 出现这种错误的原因可能是: 本机默认使用(编译)的jdk与该项目所使用的jdk版本不同。 jdk版本不适用于这个Idea,很典型的一个例子就是使用的Idea是2020的,而…

【前端】CSS-Flex弹性盒模型布局

目录 一、前言二、Flex布局是什么1、任何一个容器都可以指定为Flex布局2、行内元素也可以使用Flex布局3、Webkit内核的浏览器,必须加上-webkit前缀 三、基本概念四、flex常用的两种属性1、容器属性2、项目属性 五、容器属性1、flex-direction①、定义②、语句1&…

模糊测试面面观 | 模糊测试是如何发现异常情况的?

协议模糊测试是一种用于评估通信协议、文件格式和API实现系统安全性和稳定性的关键技术。在模糊测试过程中,监视器扮演着关键角色,它们能够捕获异常情况、错误响应、资源利用等,为测试人员提供有价值的信息,有助于发现潜在漏洞和问…

汽车3D HMI图形引擎选型指南【2023】

推荐:用 NSDT编辑器 快速搭建可编程3D场景 2002年,电影《少数派报告》让观众深入了解未来。 除了情节的核心道德困境之外,大多数人都对它的技术着迷。 我们看到了自动驾驶汽车、个性化广告和用户可以无缝交互的 3D 计算机界面。 令人惊讶的是…

数字人创作+SadTalker+GTX1080

https://github.com/OpenTalker/SadTalker 开源项目 SadTalker模型是一个使用图片与音频文件自动合成人物说话动画的开源模型,我们自己给模型一张图片以及一段音频文件,模型会根据音频文件把传递的图片进行人脸的相应动作,比如张嘴&#xf…

02-系统篇-内存分布

一.进程中的内存分布 进程是应用程序运行的单位,进程在内存中运行时,各个部分分布的情况如图。 1.栈内存(statck) 特点:后进先出 系统一般会对栈的大小进行限制,可以用命令进行查看,如下,700是进程号,栈被…

Python学习 -- Math模块和Random模块

math 模块提供了许多数学函数,用于执行各种数学运算。以下是一些常用的 math 函数以及相应的示例代码: math.sqrt(x): 计算平方根。 import math x 25 square_root math.sqrt(x) print(f"√{x} {square_root}") math.pow(x, y): 计算 x …

机器学习(吴恩达第一课)

课程链接 文章目录 第一周1、机器学习定义2、监督学习(Supervised learning)1、回归(Regression)2、分类(Classification) 3、无监督学习(Unsupervised learning)4、线性回归模型5、代价函数6、梯度下降(Gradient descent)1、学习率2、用于线性回归的梯度下降 第二周(多维特征…

W5500-EVB-PICO进行MQTT连接订阅发布教程(十二)

前言 上一章我们用开发板通过SNTP协议获取网络协议,本章我们介绍一下开发板通过配置MQTT连接到服务器上,并且订阅和发布消息。 什么是MQTT? MQTT是一种轻量级的消息传输协议,旨在物联网(IoT)应用中实现设备…

MATLAB中mod函数转化为C语言

背景 有项目算法使用matlab中mod函数进行运算,这里需要将转化为C语言,从而模拟算法运行,将算法移植到qt。 MATLAB中mod简单介绍 语法 b mod(a,m) 说明 b mod(a,m) 返回 a 除以 m 后的余数,其中 a 是被除数,m 是…

数字孪生与GIS:智慧城市的未来之路

数字孪生和地理信息系统(GIS)是两个在现代科技中崭露头角的概念,它们的融合为智慧城市项目带来了革命性的机会。本文将解释数字孪生为何需要融合GIS,并以智慧城市项目为例进行说明。 数字孪生是一种虚拟模型,它精确地…

行军遇到各种复杂地形怎么处理?

行军遇到各种复杂地形怎么处理? 【安志强趣讲《孙子兵法》第30讲】 【原文】 凡军好高而恶下,贵阳而贱阴,养生而处实,军无百疾,是谓必胜。 【注释】 阳,太阳能照到的地方。阴,太阳照不到的地方。…

【Python】从入门到上头— IO编程(8)

文章目录 一.IO编程是什么二.文件读写1.读取文件2.file-like Object二进制文件字符编码 3.写文件file对象的常用函数常见标识符 三.StringIO和BytesIO1.StringIO2.BytesIO 四.操作文件和目录五.序列化和反序列化1.pickle.dumps()2.pickle.loads()3.JSON 一.IO编程是什么 IO在计…

vue3 搭配ElementPlus做基础表单校验 自定义表单校验

<script setup> import { ref, reactive } from vue// 表单元素 const dom ref(null) // 校验规则 const rules {name: [{ required: true, message: 请输入活动名称, trigger: blur }],//校验手机号格式phone: [{ required: true, message: "请输入电话", t…

React 中的 ref 如何操作 dom节点,使输入框获取焦点

聚焦文字输入框 .focus() 获取焦点 当用户点击按钮时&#xff0c;handleClick 函数会被调用&#xff0c;从而将焦点聚焦到文本输入框上。 // 焦文字输入框 import { useRef } from "react";const FocusForm () > {const inputRef useRef<any>(null);func…

ITIL重大事件管理综合指南

什么是ITIL中的重大事件 重大事件是一个高影响力的紧急问题&#xff0c;通常影响整个组织或其主要部分。重大事件几乎总是导致组织的服务变得不可用&#xff0c;从而导致该组织的业务受到打击&#xff0c;并最终影响其财务状况。重大事件可以通过两种方式影响组织的服务&#…