加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

发布时间:2019-04-21 03:14:48 所属栏目:教程 来源:jackiej
导读:一、配景 跟着直播元年开启,越来越多的直播产物如春笋般呈现,在拉动营收的进程中,产物不遗余力思索着各类勾当来刺激用户的斲丧欲望,而这类勾当的基本情势就是榜单,在2016年我们基于cmem及扫描流水表的方法来实现榜单排名,2017开始,我们对原有体系进

首要由dashboard按批次触发直到全部的key都迁徙ok,迁徙的进程,slot上的key也许存在2种环境,一种在新的redis实例上A,一种在旧的redis实例上B,以是对付有迁徙状态的slot,全部向这个slot发送的呼吁都通过在redis中定制的呼吁SLOTSMGRT-EXEC-WRAPPER来处理赏罚,该呼吁是基于3.2的分支新增的,该呼吁首要做这几个工作,1)判定key是否存在,假如存在,但不在迁徙批次,则直接对key挪用真实要领,假如存在,但在迁徙批次,则应承读操纵,不应承写操纵,2)假如key不存大,则key也许已经被迁徙到新实例,也也许key不存在,则关照proxy前去新的实例举办操纵

迁徙机能

Codis的迁徙着实之前2.x版本的迁徙机能并不高,3.x之前机能晋升了很是之大,万万级此外zset布局迁徙只必要10多秒,而在原本的模式必要50多秒,详细缘故起因在于

深入浅出百亿哀求高可用Redis(codis)漫衍式集群揭秘

迁徙机能数据

6.2 迁徙非常处理赏罚

其它,看到这里,不知道各人有没有什么题目,不外这里我筹备了一些题目,来看看codis是怎样来处理赏罚的,出格在收集情形伟大,不不变的环境下怎么操纵。

题目一,把大key拆分成小批次举办迁徙,假如批次迁徙失败,超时,怎么做?

我们知道漫衍场景下收集挪用有三态,乐成,失败,超时,对付失败还好一点,超时的环境,我们可否盲目举办重试,这里显然不可,凡是对付数据层面的重试,我们必要担保一个很是重要的原则,幂等性,可是在redis布局中除了zset,set,hash,string布局重试理论不会受影响,对付list怎么办?以是codis用了一种较量暴力的方法,批次迁徙乐成重试时,会先带上一个del呼吁,让方针结点先将key删掉,再举办重试。

题目二,带逾期时刻key迁徙进程中,先在方针结点上配置逾期时刻再传数据,照旧先传数据在最后再配置逾期时刻?

先看一下在方针结点上配置逾期时刻再传数据的题目:传输一半B呆板的key逾期,后续key就没有逾期时刻。不切合我们的祈望

再看一下先传数据在最后再配置逾期时刻的题目:假如传输一半Acrash重启,而此时key逾期,则数据落在B呆板上成僵尸数据,也不切合我们的祈望。那codis怎样来做呢?

为了担保迁徙进程中的分片在迁徙非常时能自动烧毁,以是每次分片传输的时辰,都重置一下key逾期时刻为90秒(大于超时时刻30秒),在key迁徙完成之后再重置为真实的逾期时刻,这样纵然迁徙进程中Acrash,key逾期可能其他的非常,分片数据也只会在方针结点上存活90秒就烧毁。

题目三,迁徙进程中Acrash, 此时对应分片的数据一半在A,一半在B,怎么办了?

常在河滨走,哪有不挨刀,我们就遇到过codis的一个因expire迁徙实现不妥造成的血案,不外幸好产生在测试情形,此时万万万万不要拉起A,由于A上也许有旧数据,此时会导致已经迁徙完成的key从头迁徙,造成B的数据丢失,正确的姿势是A的备机顶上去,继承迁徙,由于A的备机固然是异步复制,但根基靠近于A的全量数据,以是题目不太大。不外全部的迁徙进程中,都最好把数据和分片信息备份,以防数据丢失。此时也万万万万不能反向将B的数据迁徙回A,由于B上也许残留有部门迁徙的数据,会包围掉A的全量数据。

题目四,为了机能题目,能否A不做备机,不开启AOF和RDB。

这个也是千万不行,由于A假如crash之后,被织云拉起,则相等于一个空实例,会清掉备机的数据,造成数据丢失。

七、Codis相干数据

个中压测情形:压测处事器(v4-8-100)+proxy(v4-8-100) + redis( B5(4 -32-100) )

从上图中可以看出,当单次获取的数据量越来越大时,proxy的机能降落会很是快,譬喻ZRANGE_500的直连的机能是proxy的2倍

八、运维手册及避坑指南

操纵留意项:

8.1 主从切换: 每次主从切换之后,都确认一下被切的主可能备机上的conf文件都已经rewriteok。

grep "Generatedby CONFIG REWRITE" -C 10 {redis_conf路径}/*.conf

8.2 迁徙数据:要害操纵前,备份数据,若涉及切片信息,备份切片信息

A迁徙B时刻过长的呼吁查察:连上Acodisserver,呼吁行中执行slotsmgrt-async-status查察正在迁徙的分片信息(尤其是大key),做到心中稀有。万万级此外key约20秒阁下可以迁徙完成

8.3 非常处理赏罚:redis宕机后重启,重启之后加载key快加载完时,页面上报error

深入浅出百亿哀求高可用Redis(codis)漫衍式集群揭秘

8.4 客户端呈现大量超时

深入浅出百亿哀求高可用Redis(codis)漫衍式集群揭秘

8.5 fork耗时高

深入浅出百亿哀求高可用Redis(codis)漫衍式集群揭秘

深入浅出百亿哀求高可用Redis(codis)漫衍式集群揭秘

8.6 AOF耐久化细节

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读