当前位置: 首页 > article >正文

Redis7——基础篇(五)

 前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。

基础篇:

  1. Redis(一)
  2. Redis(二)
  3. Redis(三)
  4. Redis(四)

接上期内容:上期完成了Redis的其他功能的学习。下面开始学习Redis的主从模式(重点),话不多说,直接发车。


一、定义

Redis主从模式是一种数据复制架构,在这个架构中,存在一个主节点(Master)和多个从节点(Slave)。主节点负责处理所有的写操作,然后将写操作产生的数据变化同步给从节点。从节点则主要负责处理读操作,通过复制主节点的数据来提供数据读取服务。

总结一句话:当master数据变化的时候,自动将新的数据异步或同步到其它slave数据库


二、功能

  1. 读写分离:主节点负责处理所有的写操作,确保数据的一致性和完整性。而从节点则主要承担读操作,它们通过复制主节点的数据来保持与主节点数据的同步。
  2. 容灾恢复:主节点正常运行时,持续将数据变化同步到从节点。当主节点因硬件故障、软件错误、人为误操作或自然灾害等原因出现故障时,系统能够快速切换到从节点继续提供服务。
  3. 数据备份:从节点周期性或实时地复制主节点的数据,在存储介质上形成数据副本。
  4. 负载均衡:读请求被分散到多个从节点上,使得系统能够更均衡地处理负载
  5. 水平扩容支持高并发:当系统面临高并发压力时,可以通过增加从节点的数量来进行水平扩容

三、实操

(一)、架构说明

在VMWare上装三台虚拟机,三台虚拟机都装上Redis,一台Master,两台slave。


(二)、三大命令

1、“主从复制”

配从(库)不配主(库)

replication 主库IP 主库端口

2、“改换门庭”

改换门庭指:主节点宕机,slave连接到新的主节点上。

slave 新主库IP 新主库端口

3、“自立为王”

自立为王指:slave从从节点晋升为主节点。

slave no one

(三)、细节操作

1、开启daemonize

主从都改


2、注释掉bind 127.0.0.1

主从都改


3、设置protected-mode no

主从都改


4、指定端口

主机不用指定默认6379,改从机,分别对应6380,6381


5、修改存储目录

主从都改。在/myredis目录下面新建backups文件夹


6、修改pid名字,方便辨识

主机不修改,改从机,一般加上端口即可。


7、修改日志文件名

主从都改,一般加上端口即可。在/myredis目录新建logs日志目录。方便后续排查问题。


8、设置访问客户端密码

自己学习建议主从都设置一样。


9、修改rdb文件名

主从都改,一般加上端口即可。


10、修改aof文件

主从都改,一般加上端口即可。


11、设置从机访问主机IP和通行密码

主机不用,从机必须加

在从机上配置Master:

replicaof <masterip> <masterport>

查看IP地址命令


12、最终效果图

一台Master,两台slave。


13、设置防火墙

一定要配置正确,不然主从无法通信,一直搭建不起来。我在这里栽了大坑。我建议临时关闭防火墙。

临时关闭防火墙命令

systemctl stop firewalld

临时开启防火墙命令

systemctl start firewalld

(四)、常用模式

1、"一主二从"

所谓一主二从指的是一台Master,两台slave。启动主从模式有两种方案,一种是配置(永久生效),一种是手动(临时生效,redis宕机失效)。

1.1、方案一
1、先启动Master,在启动两台slave。

Master启动,不需要带端口号

如果发现从机启动不了,优先排查防火墙问题。(三台虚拟机都临时关闭防火墙),然后在看日志。

从机启动需要带上端口号

redis-cli -a xxx -p 6380


2、主从关系查看

主从关系查看分两种方式:

  • 命令查看:
    info replication

  • 日志查看:进入/myredis/logs目录下,用vim打开日志


1.2、方案二
1、移除配置项

移除slave中replicaof的配置项。


2、启动三台redis服务


3、执行命令

从机执行命令。

slaveof 主机IP 主机端口号

6380执行后: 

6381执行后:

查看Master信息:

 主从模式通过命令配置成功。


1.3、主从模式Q&A
Q1:从机可以执行写命令吗?

A:不可以。主从模式的优点就是可以进行读写分离。Master写,slave读。


Q2:从机是从头开始复制还是从切入点复制?

A:假设Master已经启动成功,slave1也跟着一起启动成功,slave2在Maseter写到k3的时候才启动成功。此时slave2才加入,那么slave2第一次同步为全量同步,后续,Master写一个,slave跟写一个。

一句话:什么时候变成slave,什么时候全量继承Master,其后在增量同步

6380:

6381此时还没启动成功:

由于我们手动移除了配置文件,所以只能通过命令实现主从关系。


Q3:主机宕机后,从机会上位吗?

A:不会,从机只会成为望夫石,等待Master的归来。

Master关机:

6380、6381不会上位:


Q4:主机宕机后,重新启动成功后,主从关系还存在吗?

A:不管是通过命令还是配置方式构建的主从关系,主机宕机后,重启成功后,主从关系依旧存在。


Q5:从机宕机后,重新启动成功后,从机的数据能跟Master保持一致吗?

A:能保持一致。Q1做了测试。


Q6:通过命令配置的主从关系,重启后,主从关系还存在吗?

A:如果是通过命令配置的主从关系,主机没有宕机,从机宕机后重启,主从关系不存在。但是如果是主机宕机从机没有宕机,主机重启后,主从关系依旧存在。


2、"薪火相传"

薪火相传指的是在一主二从的模式下,其中的某台slave2变成了slave1的slave,但是不管slave1还是slave2的最终数据来源都是Master。

薪火相传的架构图:


2.1、实操

中途变更转向:会清除之前的数据,重新建立拷贝最新的
将6381转变为6301的从机:

 注意:虽然6380由slave变成了6381的Master,但是还是不具备写的权限,毕竟它还是6379的slave。


3、"反客为主"

反客为主指的是两台slave造反了,自己当老大,不给6379打工了。自此三分天下,各自为政。

3.1、实操
slaveof no one

 注意:虽然自立为王,但是起家的资本不能丢。所以,slave本身已经同步的数据不会清除。

所以架构图变成了:


四、主从模式的流程和原理

1、slave启动,同步初清

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


2、首次连接,全量复制

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


3、心跳持续,保持通信

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


4、进入平稳,增量复制

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


5、从机下线,重连续传

当slave下线后,重新启动,master会检查backlog里面的offset,master和slave都会保存一个复制的offset和masterId,offset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传。


五、主从模式优劣势对比

优势

  • 提高读写性能:通过读写分离,能够显著提升系统在高并发场景下的读写能力。
  • 数据备份:多节点的数据冗余保证了数据的安全性,降低了数据丢失的风险。
  • 易于扩展:可以方便地添加从节点来应对不断增长的读请求。

劣势

  • 写操作单点问题:所有写的操作都集中在主节点,如果主节点出现故障,在故障转移期间,写操作会受到影响。
  • 数据一致性问题:由于主从节点之间的数据同步存在一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

六、总结

Redis主从模式是一种简单而有效的架构,能够满足大部分应用场景对于读写性能和数据安全的需求。通过合理配置和使用主从模式,可以大大提升系统的性能和稳定性。然而,在实际应用中,也需要充分考虑其存在的劣势,采取相应的措施来解决可能出现的问题,希望本文能帮助大家对Redis主从模式有更深入的理解和应用。


ps:努力到底,让持续学习成为贯穿一生的坚守。学习笔记持续更新中。。。。


http://www.kler.cn/a/556977.html

相关文章:

  • 大数据开发治理平台~DataWorks(词汇梳理)
  • SmartX 超融合硬盘健康检测机制升级(附故障模拟性能实测)
  • Python 学习之旅:高级阶段(十一)数据库操作 Redis
  • Docker 与 Nginx:容器化 Web 服务器
  • 欢乐力扣:赎金信
  • R 语言科研绘图第 27 期 --- 密度图-分组
  • 【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片
  • 【UCB CS 61B SP24】Lecture 7 - Lists 4: Arrays and Lists学习笔记
  • ios UICollectionView使用自定义UICollectionViewCell
  • Centos虚拟机扩展磁盘空间
  • 短视频平台“封号圈”乱象猖獗,IP查询技术助力整治
  • 反射机制详解
  • 基于 Spring Boot 的社区居民健康管理系统部署说明书
  • 代码审计入门学习之sql注入
  • 海外企业真的需要跨境专线网络吗?
  • Nmap:网络扫描与安全评估的多功能工具
  • tailwindcss 前端 css 框架 无需写css 快速构建页面
  • 用 UniApp 打造新颖美观的弹出框
  • HTML应用指南:利用GET请求获取全国泸溪河门店位置信息
  • 【信息系统项目管理师-案例真题】2022下半年案例分析答案和详解