一、Redis持久化
1.1持久化的功能:
Redis是内存数据库,数据都是存储在内存中,为了避免服务器断电等原因导致Redis进程异常退出后数据的永久失,需要定期将Redis中
的数据以某种形式(
数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置(NFS)。
Redis提供两种方式进行持久化:
- RDB持久化:原理是将Reids在内存中的数据库记录定时保存到磁盘上。(类似快照)
- AOF持久化(append only file) :原理是将Reids的操作日志以追加的方式写入文件,类似于MySQL的binlog。 (基于日志持久化方式)
1.1.1redis 基础
redis 是一种非关数据库(内存/缓存)
redis 相比于其他非关数据库优势的地方主要在于
- 数据类型丰富
- 持久化 (可以讲内存中的数据保存在磁盘中)形式为:RDB 与 AOF
- 使用epoll+I/O多路复用以及回调机制提升单线程模型的处理性能减少资源消耗(处理性能优化)
1.2redis 集群模式:哨兵、主从、cluster (集群)
redis的集群模式,同时也可以理解为是redis的高可用模式.
主从:提供了备份冗余,缺点:无法针对故障进行自动修复,写操作无法负载均衡
哨兵:以主从为基础提供了故障自动修复的功能,写操作无法负载均衡
集群:基于主从基础,解决了故障自动修复、写操作负载均衡的问题,同时对于资源需求相较于前两种集群得到了一定的改善
1.3高可用中的持久化
RDB和AOF
(1)持久化方式:
团.RDB:周期性的快照
◎AOF :接近实时的持久化(以everysec方式)
(2)redis启用的优先级
AOF>RDB,同时仅当A0F功能关闭的情况下,redis才会在重新启动时使用RDB的方式进行恢复
(3) RDB和AOF中持久化模式
DRDB:
由redis主进程( 周期性) fork 派生出子进程对redis内存中的数据进行持久化,生成到. rdb文件中
②AOF:
根据持久化策略(alawys、 no、 everysec (默认) ),先将redis 中的语句保存在缓冲区中,再从缓冲
区同步到.aof文件中
4、redis的恢 复策略/优势
redis与其他常用非关数据库类似,都是将数据保存在内存中.
而保存在内存中时,当redis 重启,内存数据丢失,但redis 通过RDB或AOF的持久化功能可以在redis
进行重启之后,优先读取AOF文件,基于AOF文件进行数据恢复这种方式来“持久化保存”数据
1.4.淘汰策略
默认是惰性删除
随机淘汰
淘汰近期命中较少的数据
#定期删除——》保证两种持久化完成的情况下,同时业务不繁忙/终止业务的时候,删除为了解决缓存压力过大而导致使用swap交换分区以及牵扯到的其他功能模块问题
其他功能模块: AFO的持久化
1.5流量控制
漏桶
令牌桶
1.6小结:
而试点① : RDB持久化、A0F持 久化的区别,主要为以下四点
触发式临界值之前
实现方式
文件体积
安全性
优先级
①实现方式
RDB持久化是通过将某个时间点Redis服务器存储的数据保存到RDB文件中来实现持久化的。
AOF持久化是通过将Redis服务器执行的所有写命令保存到AOF文件中来实现持久化的。
①文件体积
由以上实现方式可知,RDB持久化记录的是结果,AOF持久化记录的是过程,所以AOF持久化生成的AOF文件会有体积越来越大的问题,Redis
提供了AOF重写功能来减小AOF文件体积。
③安全性
AOF持久化的安全性要比RDB持久化的安全性高,即如果发生机器故障,AOF持久化要比RDB持久化丢失的数据要少。
因为RDB持久化会丢失上次RDB持久化后写入的数据,而A0F持久化最多丢失1s之内写入的数据(使用默认everysec配置的话) 。
4.优先级
由于以上的安全性问题,如果Redis服务器开启了AOF持久化功能,Redis服务器在启动时会使用AOF文件来还原数据,如果Redis服务器没有
开启A0F持久化功能,Redis服务器在启动时会使用RDB文件来还原数据,所以AOF文件的优先级比RDB文件的优先级高。
模块数据流向:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZFwkF8UG-1641707667964)(C:\Users\赵金华\Desktop\整理复习\赵金华\rsync图片\1.png)]
二、redis主从复制
2.1主从复制原理图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2ZVTGXk-1641707667965)(C:\Users\赵金华\Desktop\整理复习\rsync图片\2.png)]
- 从库生成两个线程,一个I/O线程,一个SQL线程;
- i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志)文件中;
- 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
- SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
2.2.哨兵们监控整个系统节点的过程
1.首先主节点的信息是配置在哨兵(Sentinel)的配置文件中
2.哨兵节点会和配置的主节点建立起两条连接命令连接和订阅连接
PS:Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub) 接收消息。
3.哨兵会通过命令连接每10s发送一次INFO命令,通过INFO命令,主节点会返回自己的run_id和自己的从节点信息
4.国哨兵会对这些从节点也建立两条连接命令连接和订阅连接
5.哨兵通过命令连接向从节点发送INFO命令,获取到他的一些信息:
run id (redis服务器id)
role (职能)
从服务器的复制偏移量offset
其他
6.通过命令连接向服务器的sentinel:he11o频道发送一条消息,内容包括自己的ip端口、runid、配置(后续投票的时候会用到)等
7.通过订阅连接对服务器的sentinel:hello频道做了监听,所以所有的向该频道发送的哨兵的消息都能被接受到
8.解析监听到的消息,进行分析提取,就可以知道还有那些别的哨兵服务节点也在监听这些主从节点了,更新结构体将这些哨兵节点记录下来
简易版本:
1.主节点信息配置在哨兵的文件中
2.哨兵会和配置的主节点建立两条连接命令和订阅连接 pub和sub
3.哨兵10s发送一次info连接,由info命令主节点会返回自己的run id和从节点
4.哨兵对从节点也建立两条连接命令和订阅连接
5.哨兵通过命令连接向从节点发送info命令,获取run id、 role ,offset
6.由命令连接给服务器的hello频道发送一条消息
7.通过订阅连接对服务器hello频道做监听
8.解析监听消息,分析提取,从而知道另外的哨兵监听这些节点了,并将哨兵节点记录下来。
三、rsync服务器
3.1.Rsync 介绍
- rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
- rsync软件适用于unix/linux/windows等多种操作系统平台
- rsync是 一- 个快速和非常方便的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制
- 以其delta-transfer算法闻 名。
- rsync监听端口: 873
- rsync运行模式: C/S