Redis7--基础篇6(复制replica)

1. 复制(replica)介绍

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

Redis数据库支持主从复制,master以写为主,slave以读为主,当master数据变化的时候,自动将新的数据异步同步到slave数据库。
实现读写分离、容灾恢复、数据备份、水平扩容支撑高并发。

2. 案例演示

2.1 架构说明

一个master,两个slave。
在这里插入图片描述

2.2 以配置文件方式启动主从复制

以端口为6379的redis举例修改配置文件并启动主从复制

1. 开启daemonize

在这里插入图片描述

2. 注释

在这里插入图片描述

3. 关闭protected-mode

在这里插入图片描述

4. 指定端口

在这里插入图片描述

5. 指定当前工作目录

在这里插入图片描述

6. pid文件名

在这里插入图片描述

7. log文件名

在这里插入图片描述

8. requirepass

在这里插入图片描述

9. dump.rdb

在这里插入图片描述

10. aof(本步骤可选,非必须)

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

11. 从机访问主机的访问密码(slave从机需要配置,master主机不用配置)

在这里插入图片描述

12. 先启动主机master,再启动从机slave

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

13. 主从关系查看

  • 主机日志
    在这里插入图片描述

  • 从机日志
    在这里插入图片描述
    在这里插入图片描述

  • 命令
    info replication
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

14. 主从问题小结

从机不可执行写命令

在这里插入图片描述

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

master启动,写到k3
slave1跟着master同时启动,跟着写到k3
slave2写到k3后才启动,那之前的是否也可以复制?
Y,首次一锅端,后续跟随,master写,slave跟

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

从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主机shutdown后重启,主从关系能恢复吗,从机能否顺利复制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
主从关系可以恢复,从机可以顺利复制。

某台从机down掉后,主机继续,从机重启后会继续复制吗

手动配置复制关系: 如果在启动过程中没有直接在从机的配置文件中定义主机(Master)信息,而是通过命令行启动并使用类似于 SLAVEOF 127.0.0.1 6379 的命令将从机连接到主机,那么在从机宕机后重新启动时,它将会以自己作为主机的状态启动,并不会自动恢复数据同步。为了使数据同步重新开始,需要再次手动执行 SLAVEOF 127.0.0.1 6379 这样的命令,将其重新设为主机的从机,以实现数据同步。

配置文件定义复制关系: 如果在从机的配置文件中明确指定了主机的信息,那么在从机宕机后重新启动时,它会自动尝试连接到指定的主机并恢复数据同步。这种情况下,从机会重新以从属身份连接到主机,继续同步数据。

2.3 以命令方式启动主从复制

三台机器都是主机状态,在预设的从机上执行命令:slaveof 主机ip 主机端口

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

1. 从机重启以后的效果

在这里插入图片描述

2. 配置VS命令实现的区别

配置方式实现,持久稳定。
命令方式实现,当次生效。

2.4 从机是否可以作为其他从机的主机

上一个从机可以是下一个从机的主机,从机同样可以接受其他从机的连接和同步请求,那么此从机就作为链条中下一个从机的主机,可以有效减轻上一层主机的写压力。

2.5 从机变回主机命令

SLAVEOF NO ONE

对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行

3. 复制原理和工作流程

3.1 slave启动,同步初请

slave启动成功连接到master后,会发送一个sync命令。
slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清楚。

3.2 首次连接,全量复制

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

3.3 心跳持续,保持通讯

master发出PING包的周期,默认是10秒
在这里插入图片描述

3.4 进入平稳,增量复制

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

3.5 从机下线,重连续传

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

4. 复制的缺点

4.1 复制延时,信号衰减

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

4.2 master down掉以后无法处理

默认情况下不会在slave中自动选出一个节点当做master。

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

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

相关文章

知虾如何选品丨如何使用知虾进行选品和优化策略

在Shopee平台上作为卖家,如何进行选品和优化策略是一个至关重要的问题。而知虾作为一个为Shopee卖家提供数据分析的工具,可以帮助您更好地进行选品和优化策略。在本文中,我们将介绍如何使用知虾进行选品,并提供一些建议和步骤。 知…

powershell获取微软o365 21v日志

0x00 背景 o365 21v为o365的大陆版本,主要给国内用户使用。微软提供了powershell工具和接口获取云上日志。微软o365国内的代理目前是世纪互联。本文介绍如何用powershell和配置证书拉取云上日志。 0x01 实践 第一步,ip权限开通: 由世纪互联…

enumerate函数(python)

enumerate()函数是Python内置函数之一,用于给可迭代对象(如列表、元组、字符串等)添加一个索引,并以迭代器的形式返回。 enumerate()函数的语法如下: enumerate(iterable, start0)参数说明: iterable&am…

MFC、VC++操作excel后,excel程序进程无法正常退出的非暴力处理方法

先说处理方式 1、最low的方式:强制结束进程 //打开进程得到进程句柄 HANDLE hProcessOpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid); if(hProcess!NULL) { //结束进程 if (TerminateProcess(hProcess,0)){printf("结束进程成功\n");return 0;} }这种方式…

Linux中的Swap和Mem:有什么区别?

在Linux系统中,内存管理是操作系统的重要部分。在内存管理方面,Swap和Mem是两种不同的内存类型,它们在Linux系统中发挥着不同的作用。本文将解释Swap和Mem的区别以及它们在Linux系统中的作用。 一、Swap Swap是Linux系统中的交换分区&#…

Python datetime 字符串 相互转 datetime

字符串转 datetime from datetime import datetime# 定义要转换的日期时间字符串 dt_str "2021-09-30 15:48:36"# 使用datetime.strptime()函数进行转换 dt_obj datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S") print(dt_obj)datetime 转字符串 from …

python 制作3d立体隐藏图

生成文件的3d图,例子: 文字: 隐藏图: 使用建议: 1、建议不用中文,因为中文太复杂,生成立体图效果不好。 2、需要指定FONT_PATH,为一个ttf文件,…

【微服务 SpringCloudAlibaba】实用篇 · Nacos配置中心

微服务(6) 文章目录 微服务(6)1. 统一配置管理1.1 在nacos中添加配置文件1.2 从微服务拉取配置 2. 配置热更新2.1 方式一2.2 方式二 3. 配置共享1)添加一个环境共享配置2)在user-service中读取共享配置3&am…

【ICCV2023论文阅读】XNet(能跑通代码)

这里写目录标题 论文阅读摘要介绍方法overviewwhy use wavelet transform?融合方法用于全监督分割和半监督分割可行性分析 效果局限性总结 代码跑通去掉分布式训练生成低频和高频图片产生数据集改读取数据的位置损失函数添加自己数据集的信息结果 ps:我现在不知道自己研究方向…

用分布函数定义的随机变量的独立性的合理性

随机变量的独立性是这样定义的: 如果对任意 x , y x, y x,y 都有 P { X ≤ x , Y ≤ y } P { X ≤ x } P { Y ≤ y } P\{X\leq x,Y\leq y\} P\{X\leq x \}P\{Y\leq y\} P{X≤x,Y≤y}P{X≤x}P{Y≤y} 即 F ( x , y ) F X ( x ) F Y ( y ) F(x,y)F_X(x)F_Y(y) F…

Codeforces Round 911 (Div. 2)(C~E)(DFS、数论(容斥)、SCC缩点 + DAG图上DP)

​​​​​​1900C - Anjis Binary Tree 题意: 凯克西奇一直被安吉冷落。通过一个共同的朋友,他发现安吉非常喜欢二叉树,于是决定解决她的问题,以引起她的注意。Anji 给了 Keksic 一棵有 n个顶点的二叉树。顶点 1 是根&#xff…

【错误记录】Python 错误集合

Python 错误集合 文章目录 Python 错误集合TypeError: list object cannot be interpreted as an integer python 常见错误集合:持续更新 TypeError: ‘list’ object cannot be interpreted as an integer map [ [1, 1, 1, 1, 1, 1, 1, 0, 1, 1],[1, 0,…

利用异或、取反、自增bypass_webshell_waf

目录 引言 利用异或 介绍 eval与assert 蚁剑连接 进阶题目 利用取反 利用自增 引言 有这样一个waf用于防御我们上传的文件: function fun($var): bool{$blacklist ["\$_", "eval","copy" ,"assert","usort…

linux配置ssh无密码登录失败的一种原因

先说一下步骤,如下 参考:https://www.cnblogs.com/rickiyang/p/11074203.html 1、安装ssh 直接 sudo apt-get install openssh-server2、查看ssh运行状态 ps -e | grep ssh 如果发现 sshd 和 ssh-agent 即表明 ssh服务基本运行正常3、生成公钥和私钥…

大模型中的数据

简介: 数据是基础大模型的生命线;这些模型的训练数据在很大程度上决定了这些模型可以获得哪些功能。数据的中心性并不是基础大模型所独有的;最近对以数据为中心的人工智能的呼吁表明了管理、理解和记录用于训练机器学习模型的数据的普遍重要性。具体而言&am…

Vue+SpringBoot解决session跨域问题

做了一个前后端分离,因为前后端的 session id不一致,导致前端请求时,后端的session读取不到对应的值,造成登录问题。 解决方法: SpringBoot项目: 添加一个跨域配置 代码如下: 或者controller使用CrossOrigin Conf…

No matching version found for @babel/compat-data@^7.23.5 处理

npm ERR! notarget No matching version found for babel/compat-data^7.23.5 处理 报错信息 npm WARN ERESOLVE overriding peer dependency npm ERR! code ETARGET npm ERR! notarget No matching version found for babel/compat-data^7.23.5. npm ERR! notarget In most …

【java】编译时bug 项目启动前bug合集

文章目录 1. jdk8中 Optional orElseThrow 编译时报错java: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出2. 启动项目时提示 Error running Application: Command line is too long. Shorten command line for Application or also for Spring Boot default configurati…

算法学习—排序

排序算法 一、选择排序 1.算法简介 选择排序是一个简单直观的排序方法,它的工作原理很简单,首先从未排序序列中找到最大的元素,放到已排序序列的末尾,重复上述步骤,直到所有元素排序完毕。 2.算法描述 1&#xff…

传统算法:使用 Pygame 模块实现冒泡排序

使用 Pygame 模块实现了冒泡排序的动画演示。它首先生成一个包含随机整数的数组,并通过 Pygame 在屏幕上绘制这个数组的条形图。随后,通过冒泡排序算法对数组进行排序,同时使用动画效果可视化每一步的排序过程。在排序的过程中,相邻的元素进行比较,如果顺序不对则交换它们…