从零开始了解Redis 主从复制全部流程

news2024/12/22 18:57:50

主从复制

主从复制介绍

分析单个Redis 的问题

在一个项目中读的操作是比写的操作要多的 像京东,淘宝等等同一时刻看的人是远远多于买的人的所有单个redis既要承担写的操作又要承担读的操作效率低在高并发的情况下不稳定

所以引出了主从复制

一图胜千言

Redis 主从复制的示意图

在这里插入图片描述

对上图的解读

  1. 上图描述了主机数据更新后, 自动同步到备机的master/slaver 机制
  2. Master 以写为主,Slaver 以读为主
  3. 好处: 读写分离, 提升效率(理解: 读写分离后, 将读和写操作分布到不同的Reids, 减少单个Redis 的压力, 提升效率)
  4. 好处: 容灾快速恢复(理解: 如果某个slaver , 不能正常工作, 可以切换到另一个slaver)
  5. 主从复制, 要求是1 主多从, 不能有多个Master( 理解: 如果有多个主服务器Master,那么slaver 不能确定和哪个Master 进行同步, 出现数据紊乱)
  6. 要解决主服务器的高可用性, 可以使用Redis 集群

搭建一主多从

需求说明

  1. 搭建主从复制结构
  2. 这里我们搭建一主二从即可, 其它slaver 可以依此完成

思路分析

在这里插入图片描述

开始执行

  1. 创建目录, 并拷贝redis.conf 到/wyxredis

​ 创建命令是 mkdir /wyxredis

​ 到创建的目录下 cd /wyxredis

​ 然后把redis.conf复制到我们刚刚创建的目录

​ cp /etc/redis.conf /wyxredis/redis.conf

  1. vi /wyxredis/redis.conf , 进行如下设置,
    在这里插入图片描述

在这里插入图片描述

  1. 创建3 个文件/wyxredis/redis6379.conf /wyxredis/redis6380.conf /wyxredis/redis6381.conf并编辑
include /wyxredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb

注意前面3个文件都是这样的操作 只是端口号要发生改变

  1. 启动三台redis 服务器
    在这里插入图片描述

  2. 连接到3 个Redis 服务, info replication 打印主从复制的相关信息, 如图, 这时三台Redis都是Master

在这里插入图片描述

connected_slaves代表的是有几个从服务器
在这里插入图片描述

在这里插入图片描述

  1. 将6380 和6381 配置成slaver, 6379 作为主机-在slaver 执行如命令, 成为某个实例的从服务器

-指令说明: slaveof <master_ip> <master_port>

在这里插入图片描述

解释上图

role:slave代表的是从服务器 Master带表的主服务器

master_host 指的是主服务器的ip

master_port 指的是主服务器的端口

master_link_status_up代表是主服务器是否在线

其它的其实就是根据英语单词来解释的还是很好理解的

  1. 在主机上写,在从机上可以读取数据, 如果你在从机上写入数据,就报错

在这里插入图片描述

在这里插入图片描述

  1. 到此一个基本的主从复制结构就OK 了.

主从复制-原理

原理示意图

在这里插入图片描述

解读上图-主从复制流程

  • Slave 启动成功连接到master 后会发送一个sync 命令
  • Master 接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后, master 将传送整个数据文件到slave,以完成一次完全同步
  • slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中, 即全量复制
  • Master 数据变化了, 会将新的收集到的修改命令依次传给slave, 完成同步, 即增量复制
  • 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

一主二仆

如果从服务器down 了, 重新启动, 仍然可以获取Master 的最新数据

在这里插入图片描述

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

在这里插入图片描述

如果主服务器down 了, 从服务器并不会抢占为主服务器, 当主服务器恢复后, 从服务器仍然指向原来的主服务器.
在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

薪火相传

示意图

在这里插入图片描述

解读上图

  1. 上一个Slave 可以是下一个slave 的Master,Slave 同样可以接收其他slaves 的连接和同步请求,那么该slave 作为了链条中下一个的master, 可以有效减轻master 的写压力,去中心化降低风险

  2. 用slaveof <master_ip><master_port>

  3. 风险是一旦某个slave 宕机,后面的slave 都没法同步

  4. 主机挂了,从机还是从机,无法写数据了

实验

  1. 将6381 的主机设置为6380, 他的数据同步就是从6380 获取

在这里插入图片描述

  1. 查看6380 和6379

在这里插入图片描述

在这里插入图片描述

反客为主

1、在薪火相传的结构下, 当一个master 宕机后, 指向Master 的slave 可以升为master, 其后面的slave 不用做任何修改

2、用slaveof no one 将从机变为主机(说明: 后面可以使用哨兵模式, 自动完成切换.)

实验

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

哨兵模式(sentinel)

工作示意图

在这里插入图片描述

2、哨兵模式(如图): 反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库

实验

  1. 调整为一主二仆模式,6379 带着6380、6381 , 根据前面讲解的调整即可
  2. 创建/wyxredis/sentinel.conf , 名字不能乱写, 按照指定的来
sentinel monitor redis_master 127.0.0.1 6379 1

在这里插入图片描述

说明:

  • redis_master 为监控对象起的服务器名称
  • 1 表示至少有多少个哨兵同意迁移的数量, 这里我配置1 表示只要有1 个哨兵同意迁移就可以切换

启动哨兵, 注意看哨兵的端口是26379

在这里插入图片描述

当主机挂掉,从机选举中产生新的主机

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果原来的主机重启, 会自动成为从机

在这里插入图片描述

注意事项和细节

1、在哨兵模式下,主机down 后的执行流程分析

在这里插入图片描述

2、解读上图- 哨兵如何在从机中, 推选新的Master 主机, 选择的条件依次为:

  1. 优先级在redis.conf 中默认:replica-priority 100,值越小优先级越高
  2. 偏移量是指获得原主机数据的量, 数据量最全的优先级高
  3. 每个redis 实例启动后都会随机生成一个40 位的runid, 值越小优先级越高

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

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

相关文章

数据库入门下篇(如何安装和登录MYSQL数据库)

在这篇文章里&#xff0c;笔者将着重讲解如何在win和Linux系统上安装自己的MySQL数据库软件&#xff0c;以及安装好数据库软件后如何启动和登录&#xff0c;忘了密码怎么办&#xff1f;如何创建一个数据库&#xff0c;如何在数据库中创建一个表等内容 目录 在windows系统上安装…

宠物行业 | 活动落地页设计指南基础版

中国是全球第二大宠物市场&#xff0c;同时也是增长最快的市场之一。随着养宠人群的扩大&#xff0c;人宠亲情关系的加深&#xff0c;客群消费意愿与消费水平的提高&#xff0c;中国宠物行业正处于消费与认知的全面升级期。 调研显示&#xff0c;2022年我国宠物产业规模达4936亿…

管理类联考——英语二——技巧篇——写作——图表作文——经典方法论

考研英语(二)的B节写作主要考查的是图表作文。笔者根据考研英源(二)大纲要求以及议论文经典的三段式写法(首段指出问题、中间段分析问题、尾段解决问题)&#xff0c;研发出一套图表作文的经典写法。下面我们来看图表作文经典的三段式写法的基本大招。 从上图可以看出&#xf…

【SpringCloud入门】-- Nacos快速入门之搭建服务与注册中心

目录 前言&#xff1a; 1.Nacos的下载与安装 2. 去MySQL建立一个名为nacos的数据库 3.介绍配置文件&#xff0c;conf目录下的 application.properties 4.nacos启动 5. nacos作为注册中心的作用 6.建立一个项目&#xff0c;实现向命名空间注册 前言&#xff1a; 上文我们已…

使用influxQL 查询influxDB 2.0以上版本

使用grafana 9.0 连接influxdb 2.0 时候,只能用FLux语言连接,就没有SQL编辑面板,通过研究搞定了,先看效果。 influxQL 格式连接 influxdb2.0 无法连接,总数报错 bad request. 那就用FLux格式连接,连接成功后,查询的地方没有可视化面板,只有编写脚本的地方,很不方便…

Android11 DNS解析流程

Android11 DNS解析 1. DNS解析概念 ​ DNS的全称是domain name system&#xff0c;即域名系统。主要目的是将域名解析为IP地址&#xff0c;域名是方便用户记忆&#xff0c;但网络传输中源目地址使用IP地址来进行标识的&#xff0c;所以Android中的网络应用程序在发起http请求…

MySQL redo log

redo log介绍 重做日志&#xff0c;用于记录事务操作的变化&#xff0c;确保事务的持久性。redo log是在事务开始后&#xff08;begin; 之后&#xff09;就开始记录&#xff0c;不管事务是否提交都会记录下来&#xff0c;在异常发生时&#xff08;如数据持久化过程中掉电&…

如何在 Vue3 组件中使用 TS 类型(必看)

一、为 props 标注类型 使用 <script setup> 方式一&#xff1a;当使用 <script setup> 时&#xff0c;defineProps() 宏函数支持从它的参数中推导类型&#xff1a; const props defineProps({treeTableProps: {type: Array,default: null,required: false},ms…

华为OD机试真题 JavaScript 实现【玩牌高手】【2023 B卷 100分】,附详细解题思路

一、题目描述 给定一个长度为n的整型数组&#xff0c;表示一个选手在n轮内可选择的牌面分数。 选手基于规则选牌。 请计算所有轮结束后其可以获得的最高总分数。 选择规则如下&#xff1a; 在每轮里选手可以选择获取该轮牌面&#xff0c;则其总分数加上该轮牌面分数&#…

✎Qt-doc——尺寸调整策略(QSizePolicy)

目录 QSizePolicy类详述成员类型文档 QSizePolicy类详述 小部件的尺寸策略是其愿意以各种方式调整大小的表达方式&#xff0c;并影响布局引擎对小部件的处理方式。每个小部件返回一个描述其在布局时首选的水平和垂直调整策略的QSizePolicy。您可以通过更改其QWidget::sizePoli…

SpringCloud:分布式事务Seata事务模式

Seata会有 4 种分布式事务解决方案&#xff0c;分别是AT模式、TCC模式、Saga模式和XA模式。 1.AT 模式 2019 年 1 月份&#xff0c;Seata开源了AT模式。AT模式是一种无侵入的分布式事务解决方案。在AT模式下&#xff0c;用户只需关注自己的业务SQL&#xff0c;用户的 业务SQL …

2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。

一、要理解还是得自己看代码 1.1 完整的测试代码路径如下 https://download.csdn.net/download/qq_37858386/87916944 1.2 代码架构 1.3 app 运行效果 二、android studio 添加 opencv module可以参考下面的文章&#xff0c;比较详细。 Android OpenCV 入门教程笔记&#x…

华为OD机试真题 JavaScript 实现【计算最大乘积】【2022Q4 100分】,附详细解题思路

一、题目描述 给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值&#xff0c; 如果没有符合条件的两个元素&#xff0c;返回0。 二、输入描述 输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2 < 数组长度<100&am…

Linux之RPM管理工具

目录 Linux之RPM管理工具 定义 作用 RPM软件包 RPM软件包的经典命名格式 RPM安装 语法格式 参数及作用 有关rpm包相关网站 RPM查询功能 语法格式 参数及作用 案例 rpm软件包安装 软件包升级 rpm软件包卸载 rpm卸载 强制卸载 rpm包签名验证 用途 查看签名 …

程序员如何转型成为个人开发者

作者&#xff1a;哈桑c&#xff08;CSDN平台&#xff09; 文章目录 1、什么是个人开发者&#xff1f;2、个人开发者如何赚钱&#xff1f;3、程序员如何转型成为个人开发者&#xff1f;4、成为个人开发者需要学习哪些技能&#xff1f;结语 1、什么是个人开发者&#xff1f; 个人…

redhat安装oracle11g单实例软件建库

1、打开xmanager-passive 2、oracle 用户登录&#xff0c;开始安装 [rootrhel64 database]# su - oracle [oraclerhel64 ~]$ evn |grep oracle -bash: evn: command not found [oraclerhel64 ~]$ evn | grep oracle -bash: evn: command not found [oraclerhel64 ~]$ env | g…

首次使用云服务器搭建网站(三)

上回说到&#xff0c;我们已经搞定了服务器问题和网站模板问题&#xff0c;接下来只需要上传模板即可。 一、上传网站代码 1、打开宝塔面板&#xff0c; 点开文件、这里就是我们服务器的所有文件了。 2、依次点击WWW文件夹、wwwroot文件夹、域名文件夹&#xff0c;进入…

Python之私有属性、私有方法、装饰器及属性和类的命名规则

一、私有属性和私有方法(实现封装) Python对于类的成员没有严格的访问控制限制&#xff0c;这与其他面向对象语言有区别。关于私有属性和私有方法&#xff0c;有如下要点&#xff1a; 通常我们约定&#xff0c;两个下划线开头的属性是私有的(private)。其他为公共的(public)。…

Centos环境 使用docker 部署MySQL 8.X详细版本

文章目录 安装docker配置docker 阿里镜像加速阿里云容器镜像服务ACR配置镜像源 安装部署MySQL拉取MySQL镜像创建挂载文件测试部署部署MySQL进入容器将它的mysql配置同步给宿主机删除test1测试容器 正式部署MySQL查看正式部署的容器状态配置远程连接字符集以及关闭跳过密码验证等…

Aop详解

AOP简介 AOP是一种编程思想&#xff0c;就如同面向对象这种编程思想一样&#xff0c;是一种编程范式&#xff0c;用来指导开发者如何组织程序更好的运行 AOP&#xff08;面向切面编程&#xff09; 作用&#xff1a;在不改变原代码的前提下&#xff0c;为其增加功能。 连接点…