Redis 是如何保证高可用的?

笔名琉忆,就职于大型互联网公司的一名PHP高级工程师。一直对PHP面试有所研究,面试过各种PHP应聘者。目前已出版《PHP程序员面试笔试宝典》、《PHP程序员面试笔试真题解析》、《PHP程序员面试笔试真题库》、《PHP程序员面试笔试算法宝典》等PHP相关面试书籍。

文章正文

你好,是我琉忆,很高兴你能够参与本次 Chat 交流。希望本文的分享你能够有所收获。

Redis 的使用对于后端人员的你来说,我相信你一定不陌生。Redis 的应用,可以缓存数据,缓解数据库的压力,提高数据的访问速度,提高网站的性能等。它的重要性如此高,那么在我们实际的开发工作过程中,它是如何做到高可用的?对于一个应用来说,每个开发者都是希望它是高可用的。

那么我们来看看 Redis 提供了哪些高可用方案,以及为什么需要这些高可用方案。

为什么需要高可用方案

对于一个开发人员来说,开发完一个系统上线后,都希望系统能够一切正常运行,服务器不会宕机,数据库访问正常,即使用户增加,访问系统也不会出现延迟等问题。也就是说对于一个系统来说,最希望看到的事情就是系统能够一直被访问使用,减少停工的影响,追求 7*24 小时它都是可以正常使用的。所以系统可用的时间 / 总的时间 = 高可用性。

但是对于系统来说,代码是人写的,难免会出现问题。除此之外,还有一些不可控因素随时可能发生,例如系统所在的机房停电、断网,或遇到火灾、地震等情况发生,系统都可能不能正常访问。也就是说没人能够保证系统的运行可以 100% 是高可用的。

那么为什么需要高可用方案呢?

我们来看看如果没有高可用方案会怎样。

如果 Redis 是单机模式运行,那么所有缓存数据都存储在这一台 Redis 服务器上,Redis 的访问压力会很大,对于很多大型的系统来说,访问在十万级别以上,单独一台 Redis 缓存系统是不足以支撑的。这时就需要使用 Redis 的主从复制、集群模式来提高系统的访问性能。

如果 Redis 是单机模式,那么当服务器宕机或者服务器断电等情况,这时原本可以从 Redis 访问的数据,都需要请求数据库进行访问,这时数据库就可能访问缓慢,处理速度跟不上,甚至系统出现 502 等问题。当用户使用出现问题,用户体验性会很差。等技术人员处理恢复也需要一段时间,对公司的口碑也会产生影响。这时还是需要使用 Redis 的集群模式和哨兵模式来提高系统的容灾性。

如果 Redis 是集群模式,恰巧集群中的主机宕机了,而没有设置哨兵实现自动切换从机为主机的操作,那么每次出现主机宕机需要切换从机的操作都需要手动操作。如果开发人员都下班后,没有关注系统的运行情况,那么 Redis 主机出现宕机等问题,导致写入缓存失败,这时访问都访问到数据库中,数据库访问压力过大而导致宕机,系统访问延迟,甚至出现 502 等问题。这时就需要使用到哨兵模式,可以对系统进行实时监控,给开发人员充分的时间修复好旧的主机。起到保证系统一切运行正常的作用。

除此之外,还可能出现服务器 CPU 满了、内存不足、磁盘满了、Redis 的相关进程挂了等问题,随时都可能导致系统不可用,我们就需要提前预防这些问题,避免出现时系统访问依旧可以正常。

Redis 提供的高可用方案,主要手段是故障转移,实现主备切换。当主节点出现故障时,可以自动检测并将某个从节点切换到主节点,这样就可以保证 Redis 的高可用。给开发人员足够的时间修复故障节点,并且不影响系统的正常使用。其次一般架构都是多台从机,即使存在部分从机宕机、不能正常使用等问题,系统也依然可以正常使用。并且对于存在故障的机器还会通知开发人员进行及时修复。从而很好的保证系统的高可用。

Redis 提供了集群、主从复制、哨兵等模式保证系统的高可用。

接下来针对这几种高可用方案进行介绍,相关搭建使用可以查看其他相关 Chat 文章查看,或者到 Redis 官网浏览学习。

高可用方案 1:主从复制模式,它的优缺点

前面我们简单提到,如果 Redis 是单机模式,那么承载的压力是很大的。当访问量不断增加,达到十万级别以上时,就不能很好的提供服务了。甚至 Redis 单机情况下,所在服务器出现故障整个访问就都请求到数据库了,数据库压力是非常大的,随时可能出现崩溃的问题。 这时,Redis 提供了第一个高可用方案,出现了主从复制模式,并且支持一主多从的架构。通过这个架构可以实现流量平分,把访问压力平分到多台从机上,让单台从

作者正在撰写中...
隐藏内容 支付可见
内容互动
写评论
加载更多
评论文章
¥15 购买
× 订阅 Java 精选频道
¥ 元/月
订阅即可免费阅读所有精选内容