大家好 已经接近2019的尾声了,想写点啥来总结下,下面就总结下现在学的redis 集群是怎么回事吧。
hello guys ~~ before 2020 arrived ,I want to write something to sum up something
The following is my learning summary of redis cluster
Redis RDB AOF 基本概念
首先来说下 redis做为能持久化的分布式数据库的特性 RDB 和 AOP ,redis作为缓存是存储在内存里的,Redis 的持久化机制有两种,第一种是快照,第二种是 AOF 日志。快照是一次全量备份,AOF 日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本。AOF 日志在长期的运行过程中会变得无比庞大,数据库重启时需要加载 AOF 日志进行指令重放,这个时间就会无比漫长,所以需要定期进行 AOF 重写,给 AOF 日志进行瘦身,如果缓存重新启动使用,AOF日志时间较久 。
Redis 混合持久化
【前提】线上环境状态多变,很容易就会导致服务器莫名其妙挂掉。Redis数据都存在内存中,重启后数据早已消失无影无踪。我们需要对Redis重启后的数据进行恢复
【思考】重启 Redis 时,我们很少使用 rdb 来恢复内存状态,因为会丢失大量数据。我们通常使用 AOF 日志重放,但是重放 AOF 日志的性能相对 rdb 来说要慢很多,这样在 Redis 实例很大的情况下,启动需要花费很长的时间。
【结论】Redis 4.0 为了解决这个问题,带来了一个新的持久化选项——混合持久化。如图 1-3 所示,将 rdb 文件的内容和增量的 AOF 日志文件存在一起。这里的 AOF 日志不再是全量的日志,而是自持久化开始到持久化结束的这段时间发生的增量 AOF 日志,通常这部分 AOF 日志很小。于是在 Redis 重启的时候,可以先加载 rdb 的内容,然后再重放增量 AOF 日志就可以。完全替代之前的 AOF 全量文件重放,重启效率因此得到大幅提升。
接下来我们来讨论集群的事情,集群主要解决了两件事情。1,redis 的高可用性 。2, redis的读写分离 。
Redis Cluster
本架构主要是主从的架构 会有一台master 多个slave。
- master 负责写数据,接受写请求
- slave 负责读数据并且与master进行数据的同步
redis replication的核心机制
(1)redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量
(2)一个master node是可以配置多个slave node的
(3)slave node也可以连接其他的slave node
(4)slave node做复制的时候,是不会block master node的正常工作的
(5)slave node在做复制的时候,也不会block对自己的查询操作,它会用旧的数据集来提供服务; 但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了
(6)slave node主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量
有以下几个好处
1 能够进行读写的分离
2 能够水平扩容 集群不足以满足业务并发量时只需要增加设备即可
3 高可用性 当有master宕机时可以及时的选举新master 并且进行数据同步
集群数据的同步机制
【正常情况】当有一个新的slave加入集群时
1 slave内部存在定时任务,根据配置参数监测master是否需要,建立连接,复制数据,如果发现,就与master建立一个socket连接
2 如果master设置了需要密码的校验就多一步校验身份信息然后返回结果。
3 master启动一个线程,将自己的快照发送给slave进行数据的同步,一般的数据同步超过60s会断开 需要根据具体的大小进行调整,并且两方内部维护了一个偏移量offset
记录同步的情况
4 之后master对应数据调整的时候只需要进行AOF的数据追加形式来调整slave对应数据即可
【异常状况】master 数据恢复到不久前的数据
master由于业务的需求需要恢复到前20分钟的数据 此时与slave的数据产生了不一致性。
该情况下 master 保存了一个master run id的字段,如果数据恢复到20分钟前,该字段会发生改变并且对slave再次进行全复制 覆盖slave原先数据 但是 slave 在复制的过程中仍然会用之前的旧数据提供服务。
【异常情况】机器宕机或进程中断
如果是master宕机 就无法写缓存与复制数据,Redis系统将处于不可用状态 。此时将引发主备切换
, 哨兵会监测这种情况并且获取选举获取新地址。
如果是slave宕机 master的心跳监测机制每10s监测一次会移除该slave
【异常情况】主从复制到一半中断
在redis2.8之后 如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份 因为两者会保存一个replica offset 还有master id 的文件,如果断掉会继续复制,如果丢失该文件将会重新进行全复制。
关于集群的知识如果有进一步的了解将继续补充~~~~~~~