Redis 哨兵集群架构总结

大家好 已经接近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 的文件,如果断掉会继续复制,如果丢失该文件将会重新进行全复制。
在这里插入图片描述
关于集群的知识如果有进一步的了解将继续补充~~~~~~~

发布了29 篇原创文章 · 获赞 19 · 访问量 6495

猜你喜欢

转载自blog.csdn.net/wenzhouxiaomayi77/article/details/103757660