Redis 复制(replica)

news2024/9/24 23:28:45

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.coloradmin.cn/o/958211.html

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

相关文章

准备HarmonyOS开发环境

引言 在开始 HarmonyOS 开发之前,需要准备好开发环境。本章将详细指导你如何安装 HarmonyOS SDK、配置开发环境、创建 HarmonyOS 项目。 目录 安装 HarmonyOS SDK 配置开发环境 创建 HarmonyOS 项目 总结 1. 安装 HarmonyOS SDK HarmonyOS SDK 是开发 Harmo…

共享办公空间的SWOT分析:

S(优势): 灵活性和多样性:共享办公空间通常提供多种套餐和服务,适合不同需求和预算的初创企业和个人。 资源共享和合作:共享办公空间提供了与其他企业家、创新者和专业人士交流和合作的机会,可…

为 LVGL 添加截图/截屏功能(lv_100ask_screenshot)

本文内容选自百问网,完整的演示视频观看: https://www.bilibili.com/video/BV18r4y1X7MJ 前言 lv_100ask_screenshot 是一个基于 lvgl 的屏幕截图工具。 lv_100ask_screenshot 特性: 可以将LVGL的屏幕对象(全屏)保存为图片文件&#xff1…

Deepnote:为什么我停止使用 Jupyter Notebook

Jupyter 笔记本已经成为必不可少多年来用于众多数据科学工作流程的工具。其中包括执行数据挖掘、分析、处理、建模以及在每个数据科学项目的生命周期中执行的一般日常实验任务。 Jupyter(作者提供的图片) 尽管它很受欢迎,但许多数据科学家也指出了它的众多缺点,例如这里和

ThingsKit物联网平台告警中心之告警联系人

告警联系人是指接收告警信息的人,产生告警后,会第一时间通知他。 新增 点击新增告警联系人按钮,填入相关信息,确认新增。 告警联系人参数参数说明联系人姓名 定义告警通知到的联系人名称必填支持输入的格式:中英文…

【LeetCode】84.柱状图中最大的矩形

题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释:最大的…

如何理解attention中的Q、K、V?

y直接用torch实现一个SelfAttention来说一说: 1、首先定义三哥线性变换,query,key以及value: class BertSelfAttention(nn.Module):self.query nn.Linear(config.hidden_size, self.all_head_size)#输入768,输出768…

2第一个Java程序

目录 1第一个Java代码 2类class 3运行Java文件 1第一个Java代码 public class Hello {public static void main(String[] args) {System.out.println("Hello, world!");} } 2类class public class Hello {public static void main(String[] args) {System.ou…

书箱扫描仪真神器,免拆书,AI助力自动识别翻页

平板扫描仪见多了,馈纸式扫描仪我们也介绍过了,但它们都不适合扫描书箱,如果您一定要用它们来完成这项任务,那将很费劲,首先,您得将书拆成一页一页的,然后再放进去扫,非常麻烦&#…

Docker从认识到实践再到底层原理(二-2)|Namespace+cgroups

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

分库分表篇-2.3 springBoot 集成Mycat(1.6)

文章目录 前言一、springBoot 集成Mycat(1.6) 步骤:二、query_cache_size unknown 处理:总结: 前言 在springboot 项目中我们应该如何集成mycat 然后让其帮助我们进行数据的分库和分表处理呢。 一、springBoot 集成Mycat(1.6) 步骤&#xff…

HTTP与SOCKS5的区别对比

在互联网世界中,服务器是一种重要的工具,可以帮助我们提高网络安全性等。今天,我们将重点关注两种常见的技术:HTTP和SOCKS5。让我们深入了解它们的工作原理、用途和优缺点,并通过Python代码示例学习如何使用它们。 HT…

跨境海淘攻略:如何实现自己批量养买家账号海淘

近年来,随着互联网的发展,网购已经成为人们日常生活中不可或缺的一部分。不仅在国内购买商品,在跨境电商行业越来越成熟,很多的消费者开始选择购买国外平台商品,价格相比国内专柜来说会更为优惠。因此,海淘…

书单制作方法详细步骤分享,想学的小伙伴看过来

如果你是一个热爱阅读的人,那么制作一份书单可能是一件有趣和有用的事情。在这篇文章中,我们将分享一些书单制作的方法和注意事项。 选择主题和书籍 首先,你需要选择一种主题,以便你可以按照主题来选择书籍。选择一个你感兴趣的主…

MES系统车间生产进度监控

随着制造业竞争的加剧和市场需求的不断变化,车间生产进度监控成为制造企业提高生产效率、降低成本以及实现及时决策的重要环节。在这个背景下,制造执行系统(MES)的车间生产进度监控模块应运而生。 一、车间生产进度监控MES系统的定…

TensorFlow 的基本概念和使用场景介绍

文章目录 一、TensorFlow基本概念1. 张量(Tensor)2. 计算图(Computation Graph)3. 会话(Session) 二、TensorFlow使用场景1. 机器学习(Machine Learning)2. 计算机视觉(C…

Fedora Linux Flatpak 八月推荐应用

导读本文介绍了 Flathub 中可用的项目以及安装说明。 Flathub 是获取和分发适用于所有 Linux 的应用的地方。它由 Flatpak 提供支持,允许 Flathub 应用在几乎任何 Linux 发行版上运行。 请阅读 “Flatpak 入门”。要启用 Flathub 作为你的 Flatpak 提供商&#xff…

用Airtest快速实现手机文件读写与删除功能

1. 前言 前几天有同学留言,能不能安排“读写手机文件”的示例。我们今天就来实现这个小功能。 当然,熟悉adb的同学,看到这个需求,肯定很开心,不就是一个 adb push 和 adb pull 嘛,非常简单呀。 确实如此…

算法通关村——原来滑动窗口如此简单

1. 子数组最大平均数 I 最大平均数 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。 任何误差小于 10-5 的答案都将被视为正确答案。 示例 1: 输入:nums [1,12…

centos中得一些命令 记录

redis命令 链接redis数据库的命令 redis-cli如果 Redis 服务器在不同的主机或端口上运行&#xff0c;你需要提供相应的主机和端口信息。例如&#xff1a; redis-cli -h <hostname> -p <port>连接成功后&#xff0c;你将看到一个类似于以下的提示符&#xff0c;表…