redis持久化

目录

前言

一、持久化

1、两种持久化方式

2、两种持久化的区别 

2、两种持久化的优点 

二、主从复制 

1、主从复制的作用

2、主从复制的流程

 三、哨兵

1、哨兵的作用

2、哨兵检测整个系统节点过程

3、哨兵的主要功能 

4、哨兵模式下的故障迁移 

四、集群

五、结语


前言

在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和集群,下而分别说明它们的作用,以及解决了什么样的问题。

一、持久化

持久化是最简单的高可用方法,主要作用是数据的备份,将数据存储在硬盘,保证数据不会因为进程退出而丢失数据

1、两种持久化方式

RDB持久化通过将某个时间点的redis服务器存储的数据保存到RDB文件中来实现持久化

基于结果有手动、自动、被动触发

手动触发:直接使用bgsave

自动触发:save m n 900秒至少一次操作

RDB类似于快照周期性的进行保存

 AOE持久化是将redis操作日志以追加方式写入文件,类似MySQL的binlog

基于执行语句,有手动、自动方式

手动:bgreweiteaof

自动:基于定期时间执行,基于AOF文件和缓存的差异进行aof

压缩功能:针对于AOF文件进行压缩处理,主要体现在rewrite重写机制

2、两种持久化的区别 

区别有四点

  • 实现方式:RDB持久化会生成bgsave触发持久化命令但会阻塞新的子进程,当触发bgsave会通知redis主进程fork生成一个子进程来专门做RDB的持久化生成.rdb文件在这过程中主进程无法派生新的子进程,只有rdb文件做完了才会通知主进程阻塞的状态才会解除
  • 而AOF是用了redis服务器执行的所写命令保存到AOF文件中来实现的

  •  安全性:AOF安全性比RDB高,如果发送故障,AOF最多丢失1秒内写入的数据,而RDB会丢失上次持久化后写入的数据,AOF只丢失一秒所以安全性高
  • 文件体积 :RDB记录的是结果,AOF记录过程,所以AOF文件会越来越大
  • 优先级 :由于安全性问题在没有开启AOF持久化时才会使用RDB

 

总结:

  • RDB持久化速度较于AOF更快
  • 从rewrite重启后数据恢复角度看AOF更加安全
  • 优先级AOF关闭时才会使用RDB
  • AOF文件毕RDB文件大,并且首次全量备份后会进行增量备份容易造成服务器磁盘空间问题

2、两种持久化的优点 

RDB

优点:文件紧凑,体积小,网络传输快,适合全量复制。恢复速度比AOF快

缺点:做不到实施持久化,需要满足特定格式兼容性较差

 AOF

优点:支持秒级的持久化,兼容性好

缺点:文件大恢复速度慢,对性能影响大

二、主从复制 

1、主从复制的作用

  • 主从复制 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。
  •   缺陷:故障恢复无法自动化:写操作无法负载均衡:存储能力受到单机的限制。

2、主从复制的流程

  1. slave加入到主从复制集群会根据配置文件的指向找到master节点,然后发送rsync命令请求同步
  2. Mastre接收到请求后,由主进程fok一个子进程,子进程开始bgsave得到基于当前的.rdb文件,发送rdb文件给slave
  3. Slave收到文件后先检查自己数据库是否有数据,无数据则基于rdb文件进行恢复操作,有文件则先清空数据在恢复
  4. 在恢复过程中master产生的新数据会以AOF保存在缓冲区中,slave再从缓冲区中同步到磁盘中,在此之后master产生的数据会以AOF机制到slave

总结:当开启主从复制后第一次以RDB(相当于增量备份),次后所有数据都是以AOF(类似于增量备份的方式)

 三、哨兵

1、哨兵的作用

  •  在主从复制的基础上,哨兵实现了自动化的故障恢复。
  •  缺陷:写操作无法负载均衡,存储能力受到单机的限制

2、哨兵检测整个系统节点过程

  1. 三个哨兵之间建立命令连接,周期性检测队友状态
  2. 哨兵会向master节点(在配置文件中指定)发送两条连接,分别是命令连接和订阅连接(为了周期性获得master节点数据)
  3. 哨兵向master周期性返回info命令,master(活着的情况下)会返回redis-cli info replication master节点信息+从节点位置
  4. 哨兵通过master返回信息得到slave信息,再向slaves节点发送info命令,slaves返回数据,从而哨兵集群可以获得整个redis集群的所有信息
  5. 哨兵会向服务器发送命令连接,建立自己的hello频道,哨兵会向这个hello频道建立订阅,用于哨兵之间消息共享

3、哨兵的主要功能 

  • 集群监控:负责监控Redismaster和slave进程是否正常工作
  • 消息通知:如果某个Redis实例有故障,那么哨兵负责发送消息作为报敬通知给管理员
  •  故障转移:如果masternode挂掉了,会自动转移到slave node上
  • 配置中心:如果故障转移发生了,通知client客户端新的master地址

4、哨兵模式下的故障迁移 

主观下线
哨兵(Sentinel)节点会每秒一次的频率向建立了命令连接的实例发送PING命令,如果在down-after-milliseconds毫秒内没有做出有效响应包括(PONG/LOADING/MASTERDOWN)以外的响应,哨兵就会将该实例在本结构体中的状态标记为SRI_S_DOWN主观下线

客观下线
当一个哨兵节点发现主节点处于主观下线状态是,会向其他的哨兵节点发出询问,该节点是不是已经主观下线了。如果超过配置参数quorum个节点认为是主观下线时,该哨兵节点就会将自己维护的结构体中该主节点标记为SRIO DOWN客观下线询问命令SENTINEL is-master-down-by-addr

 master选举
在认为主节点客观下线的情况下,哨兵节点节点间会发起一次选举,命令为:SENTINEL is-master-down-by-addr
只是runid这次会将自己的runid带进去,希望接受者将自己设置为主节点。如果超过半数以上的节点返回将该节点标记为leacer的情况下,会有该leader对故障进行迁移

 从节点中挑选出新的主节点的条件
 通讯正常
 优先级排序
 优先级相同时选择offset最大的

四、集群

  • 通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。
  • redis的集群最低需要6个节点,3主3从

redis的哨兵模式基本已经可以实现高可用、读写分离,但是在这种模式每台redis服务器都存储相同的数据,很浪费内存资源,所以在redis3.0上加入了Cluster群集模式,实现了redis的分布式存储,也京是说每台redis节点存储着不同的内容根据官方推荐,集群部署至少要3台以上的master节点,最好使用3主3从六个节点的模式

五、结语

以上只是理论介绍了redis高可用的模式,下篇将介绍主从复制与哨兵的搭建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值