高可用 Redis 服务架构分析与搭建

  • 时间:
  • 浏览:4
  • 来源:uu快3网站_uu快3充值_玩法

规模比较大的互联网公司,一般一定会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。

方案1:单机版Redis Server,无Sentinel

鉴于方案3并没有方法做到高可用,朋友最终的版本但会 我上图所示的方案4了。实际上这但会 我朋友最终搭建的架构。朋友引入了服务器3,但会 我在3后面 又搭建起一二个Redis Sentinel进程,现在由一二个Sentinel进程来管理一二个Redis Server实例。三种场景下,不管是单一进程故障、还是单个机器故障、还是某一二个机器网络通信故障,都可不也能继续对外提供Redis服务。

【异常1】某个节点服务器的某个进程一个劲down掉(之类某开发手残,把一台服务器的redis-server进程kill了)

【异常3】任意一二个节点服务器之间的通信中断了(之类某临时工手残,把用于一二个机房通信的光缆挖断了)

方案4:主从同步Redis Server,三实例Sentinel

为了实现高可用,补救方案1中所述的单点故障问題,朋友需要增加一二个备份服务,即在两台服务器上分别各启动一二个Redis Server进程,一般清况 下由master提供服务,slave只负责同步和备份。

实际上,是是因为你的机器比较空闲,当然也可不也能把服务器3后面 也开启一二个Redis Server,形成1 master + 2 slave的架构,每个数据一定会一二个备份,可用性会提升或多或少。当然也并一定会slave太少越好,毕竟主从同步也是需要时间成本的。

至此,朋友就用3台机器搭建了一二个高可用的Redis服务。着实网上还有更加节省机器的方法,但会 我把一二个Sentinel进程上放Client机器上,而一定会服务提供方的机器上。只不过在公司后面 ,一般服务的提供方和调用方太少来自同一二个团队。一二个团队一并操作同一二个机器,很容易是是因为沟通问題是是因为或多或少误操作,统统出于这各自 为因素的考虑,朋友还是采用了方案4的架构。但会 我是是因为服务器3后面 只跑了一二个Sentinel进程,对服务器资源消耗太少多,还可不也能用服务器3来跑或多或少或多或少的服务。

易用性:像使用单机版Redis一样使用Redis Sentinel

在方案4中,一旦服务器1和或多或少服务器的通信完整篇 中断,没有服务器2和3会将slave切换为master。对于客户端来说,在没有一瞬间会有一二个master提供服务,但会 我一旦网络恢复了,没有所有在中断期间落在服务器1上的新数据一定会丢失。是是因为不需要每项补救三种问題,可不也能配置Redis Server进程,让其在检测到各自 网络有问題的没有 ,立即停止服务,补救在网络故障期间还有新数据进来(可不也能参考Redis的min-slaves-to-write和min-slaves-max-lag三种二个配置项)。

不过任何一二个基础服务的提供方,一定会被调用方问起的一二个问題是:你的服务是有无具有高可用性?最好太少是是因为你的服务一个劲出问題,是是因为我这边的业务跟着遭殃。最近我所在的项目中也各自 搭了一套小型的“高可用”Redis服务,在此做一下各自 的总结和思考。

搭建任何一二个服务,做到“能用”着实是非常简单的,就像朋友运行一二个单机版的Redis。不过一旦要做到“高可用”,事情就会变得比较复杂起来。业务中使用了额外的两台服务器,5个Sentinel进程+一二个Slave进程,但会 我为了保证在那小概率的事故中依然做到服务可用。在实际业务中朋友还启用了supervisor做进程监控,一旦进程意外退出,会自动尝试重新启动。

答案当然是肯定的。这是是因为就要引入虚拟IP(Virtual IP,VIP),如上图所示。朋友可不也能把虚拟IP指向Redis Server master所在的服务器,在发生Redis主从切换的没有 ,会触发一二个回调脚本,回调脚本中将VIP切换至slave所在的服务器。没有 对于Client端来说,他仿佛在使用的依然是一二个单机版的高可用Redis服务。

方案2:主从同步Redis Server,单实例Sentinel

这基于一二个高可用服务设计的方法,即单点故障三种但会 我个小概率事件,而多个单点一并故障(即master和slave一并挂掉),可不也能认为是(基本)不是是因为发生的事件。

作为服务的提供方,朋友时不后要讲到用户体验问題。在上述方案当中始终有一二个让Client端用的一定会没有舒服的地方。对于单机版Redis,Client端直接连接Redis Server,朋友只需要给一二个ip和port,Client就可不也能使用朋友的服务了。而改造成Sentinel模式没有 ,Client不得不采用或多或少支持Sentinel模式的组织组织结构依赖包,但会 我需要修改各自 的Redis连接配置,这对于“矫情”的用户来讲显然是没有接收的。有没有方法还是像在使用单机版的Redis那样,只给Client一二个固定的ip和port就可不也能提供服务呢?

我的业务中数据量太少大,统统搞集群服务反但会 我浪费机器了。最终在Keepalived和Redis Sentinel之间做了个挑选,挑选了官方的补救方案Redis Sentinel。

着实以上任意三种异常一定会小概率事件,而做到高可用性的基本指导思想但会 我:多个小概率事件一并发生的概率可不也能忽略不计。但会 我朋友设计的系统可不也能容忍短时间内的单点故障,即可实现高可用性。

说到这里,也给朋友推荐一二个架构交流学习群:835544715,后面 会分享或多或少资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化哪些成为架构师必备的知识体系。还能领取免费的学习资源,相信对于是是因为工作和遇到技术瓶颈的码友,在三种群里会有你在需要的内容。

与此一并,在额外启动一二个Sentinel进程,监控一二个Redis Server实例的可用性,以便在master挂掉的没有 ,及时把slave提升到master的角色继续提供服务,没有 就实现了Redis Server的高可用。

为了补救方案2的问題,朋友把Redis Sentinel进程也额外启动一份,一二个Sentinel进程一并为客户端提供服务发现的功能。对于客户端来说,它可不也能连接任何一二个Redis Sentinel服务,来获取当前Redis Server实例的基本信息。通常清况 下,朋友会在Client端配置多个Redis Sentinel的链接地址,Client一旦发现某个地址连接不上,会去试图连接或多或少的Sentinel实例,这当然但会 我需要朋友手动实现,各个开发语言中比较热门的redis连接库都帮朋友实现了三种功能。朋友预期是:即使其中一二个Redis Sentinel挂掉了,还有另外一二个Sentinel可不也能提供服务。

对于Redis服务的调用方来说,现在要连接的是Redis Sentinel服务,而一定会Redis Server了。常见的调用过程是,client先连接Redis Sentinel并询问目前Redis Server中哪个服务是master,哪些是slave,但会 我再去连接相应的Redis Server进行操作。

点击链接加入群聊【JAVA高级架构】:https://jq.qq.com/?_wv=1027&k=5dbERkY

然而,朋友实现了Redis Server服务的主从切换没有 ,又引入了一二个新的问題,即Redis Sentinel三种也是个单点服务,一旦Sentinel进程挂了,没有客户端就没方法链接Sentinel了。统统说,方案2的配置并无法实现高可用性。

你是是因为会问,为哪些Redis要有三种3000%的设定?假设朋友允许小于等于3000%的Sentinel连通的场景下也可不也能进行主从切换。试想一下【异常3】,即服务器1和服务器2之间的网络中断,但会 我服务器三种是可不也能运行的。如下图所示:

对于搭建高可用Redis服务,网上已有了统统方案,之类Keepalived,Codis,Twemproxy,Redis Sentinel。其中Codis和Twemproxy主但会 我用于大规模的Redis集群中,也是在Redis官方发布Redis Sentinel没有 twitter和豌豆荚提供的开源补救方案。

实际上对于服务器2来说,服务器1直接down掉和服务器1网络连不通是一样的效果,反正一定会一个劲就无法进行任何通信了。假设网络中断时朋友允许服务器2的Sentinel把slave切换为master,结果也有你在现在拥有了一二个可不也能对外提供服务的Redis Server。Client做任何的增完整篇 操作,有是是因为落在服务器1的Redis上,一定会是是因为落在服务器2的Redis上(取决于Client到底连通的是哪个Sentinel),造成数据混乱。即使后面 服务器1和服务器2之间的网络又恢复了,没有 们也无法把数据统一了(两份不一样的数据,到底该信任谁呢?),数据一致性完整篇 被破坏。

不需要学习Java高架构、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费获取 架构群:835544715

【异常2】某台节点服务器down掉,共要三种节点上所有进程都停了(之类某运维手残,把一二个服务器的电源拔了;之类或多或少老旧机器出显硬件故障)

三种搭配仅适合个学数学 习娱乐,毕竟三种配置总会有单点故障的问題无法补救。一旦Redis服务进程挂了,是是因为服务器1停机了,没有服务就不可用了。但会 我是是因为没有配置Redis数据持久化一段话,Redis组织组织结构是是因为存储的数据也会丢失。

方案3:主从同步Redis Server,双实例Sentinel

结语

当然目前的第三方库一般都是是因为实现了三种调用过程,不再需要朋友手动去实现(之类Nodejs的ioredis,PHP的predis,Golang的go-redis/redis,JAVA的jedis等)。

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,朋友一个劲在业务中用其存储用户登陆态(Session存储),加速或多或少热数据的查询(相比较mysql而言,数率有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。

这时,Sentinel着实是不需要将仅剩的slave切再加master继续服务的,也就是是因为Redis服务不可用,是是因为Redis的设定是没有当超过3000%的Sentinel进程可不也能连通并投票挑选新的master时,才会真正发生主从切换。本例中一二个Sentinel没有一二个可不也能连通,等于3000%太少在可不也能主从切换的场景中。

Redis Sentinel可不也能理解为一二个监控Redis Server服务是有无正常的进程,但会 我一旦检测到不正常,可不也能自动地将备份(slave)Redis Server启用,使得组织组织结构用户对Redis服务组织组织结构出显的异常无感知。朋友按照由简至繁的步骤,搭建一二个最小型的高可用的Redis服务。

一般清况 下,朋友搭的各自 网站,是是因为平时做开发时,会起一二个单实例的Redis Server。调用方直接连接Redis服务即可,甚至Client和Redis三种就发生同一台服务器上。

然而,愿景是美好的,现实却是很残酷的。没有架构下,依然无法实现Redis服务的高可用。方案3示意图中,红线每项是两台服务器之间的通信,而朋友所设想的异常场景(【异常2】)是,某台服务器整体down机,不妨假设服务器1停机,此时,只剩下服务器2后面 的Redis Sentinel和slave Redis Server进程。

首先朋友要定义一下对于Redis服务来说怎么能不能才有无高可用,即在各种出显异常的清况 下,依然可不也能正常提供服务。是是因为宽松或多或少,出显异常的清况 下,只经过很短暂的时间即可恢复正常服务。所谓异常,应该共要暗含了以下几种是是因为性:

猜你喜欢

三星w2018组装机多少钱!

可选中两个 或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。提示:请各位消费者在收到这种于中奖或极低价格购机信息时谨慎对待,补救上当受骗。使用百度知

2020-03-22

王者荣耀拒绝了一次人脸识别,时候不弹出,每天只能玩一个小时,已成年,卸载重下已经试过了

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。追问不怎么推荐不采纳的全是蔡徐坤。你对你这人 回答的评价是?追答收起更多回答(6)你对你这人 回答的

2020-03-22

网宿科技孙靖泽:CDN规模门槛为5T,整合潮年底就会出现

业内人士认为,CDN行业是另另四个靠规模取胜的行业,原因分析分析手里的服务器和强度很多,能应对的峰值就越高,越来越 也就更有能力做更大的客户。这几年随着市场需求的不断扩大,以

2020-03-22

OPPO哪一款手机比较好

换一换下载百度知道APP,抢鲜体验展开完正扫描二维码下载其他人刚买了oppor15,用了有另一有一个月了,感觉手感比较好,因此 运行传输数率还能要能,外观也比较好看,拿起来

2020-03-21

阿里云数据库资深专家林伟:大规模计算平台研究与实战

【云栖大会】高可用、高并发、高性能架构实战经验昨夜难忘?今晚20点,容器、后面 件、负载均衡等实战交流继续!进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

2020-03-21