版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Redis相对于CdisdisRedisCluster将所有数据划分为16384的slots,它⽐Codis的1024个槽划分的更为精细,每个节点负责其中⼀部分槽位。槽位的信息存储于每个节点中,它不像Codis,它不需要另外的分布式存储当RedisCluster的客户端来连接集群时,它也会得到⼀份集群的槽位配置信息。这样当客户端要查找某个key时,可以直接定位到⽬这点不同于Codis,Codis需要通过ProxyRedisClusterkey所在的节点,它就需要缓存槽位相关信息,这样才可以准确快速另外,RedisClusterCluster默认会对key值使⽤crc16算法进⾏hash得到⼀个整数值,然后⽤这个整数值对16384进⾏取模来得到具体槽位。Cluster还允许⽤户强制某个key挂在特定槽位上,通过在key字符串⾥⾯嵌⼊tag标记,这就可以强制key所挂在的槽位等于tagdefdefs=key.index"{"ifse=key.index"}",s+1ife&&e!=s+1key=key[s+1..e-crc16(key)%当客户端向⼀个错误的节点发出了指令,该节点会发现指令的keyGETGET-MOVED3999MOVED指令的第⼀个参数3999是key⽬标节点地址。MOVED指令前⾯有⼀个减号,表示该指令是⼀个错MOVED指令后,要⽴即纠正本地的槽位映射表。后续所有key将使⽤新的槽位映射表。RedisCluster提供了⼯具redis-trib可以让运维⼈员⼿动调整槽位的分配情况,它使⽤Ruby语⾔进⾏开发,通过组合各种原⽣的RedisCluster指令来实现。这点Codis做的更加⼈性化,它不但提供了UI界⾯可以让我们⽅便的迁移,还提供了⾃动化平衡槽位⼯具,⽆需⼈⼯⼲预就可以均衡集群负载。不过Redis官⽅向来的策Redis迁移的单位是槽,Redis⼀个槽⼀个槽进⾏迁移,当⼀个槽正迁移⼯具rdistribky(kynslt)k进⾏迁移。每个kyk执⾏dumprstor携O从源节点获取内容从源节点删除内容注意这⾥的迁移过程是同步的,在⽬标节点执⾏restore指令到原节点删除key之间,原节点的主线程会处于阻塞状态,直到key被成功如果迁移过程中突然出现⽹络故障,整个slot的迁移只进⾏了⼀半。在迁移过程中,如果每个key的内容都很⼩,migrate指令执⾏会很快,它就并不会影响客户端的正常访问。如果key的内容很⼤,因为⾸先新旧两个节点对应的槽位都存在部分key数据。客户端先尝试会向客户端返回⼀个-ASKtargetNodeAddr的重定向指令。客户会形成重定向循环。asking指令的⽬标就是打开⽬标节点的选项,情况下⼀个ttl就能完成,⽽在迁移中得3个ttl才能搞定。RedisCluster可以为每个主节点设置若⼲个从节点,单主节点故障Redis也提供了⼀个参数cluster-require-full-coverage可为解决这种问题,RedisCluster提供了⼀种选项cluster-node-timeout,表示当某个节点持续timeout的时间失联时,才可以认动会导致主从频繁切换(数据的重新复制)。rsevtyt作为倍乘1可能下线(PFAIL-PossiblyFail与确定下线(Fail)因为RedisCluster是去中⼼化的,⼀个节点认为某个节点失联了并Redis集群节点采⽤Gossip协议来⼴播⾃⼰的状态以及⾃⼰对整个集群认知的改变。⽐如⼀个节点发现某个节点失联了(PFail),它会如果⼀个节点收到了某个节点失联的数量(PFailCount)已经达到了集群的⼤多数,就可以标记该节点为确定下线状态(Fail),然后向整Cluster另外⼀个包,这个包是依赖redis-py包的。pippipinstallredis-py-redis-py-cluster>>>>>>fromredisclusterimport>>>#Requiresatleastonenodeforclusterdiscovery.Multiplenodesisrecommended.>>>startup_nodes=[{"host":"127.0.0.1","port":"7000"}]>>>rc=>>>rc.set("foo","bar")>>>Cluster是去中⼼化的,它有多个节点组成,构造StrictRedisCluster实例时,我们可以只⽤⼀个节点地址,其它地址必须更换地址才可以继续访问Cluster。decode_responses数组转换成unicodeCluster使⽤起来⾮常⽅便,⽤起来和普通的redis-py差别不⼤,Cluster不⽀持事务,Cluster的mget⽅法相⽐Redis要慢很多,被拆分成了多个get指令,Cluster的rename⽅法不再是原⼦如果Cluster中某个槽位正在迁移或者已经迁移完了,client如何能我们前⾯提到Cluster有两个特殊的error指令,⼀个是asking第⼀个moved是⽤来纠正槽位的。如果我们将指令发送到了错误的地址随同moved指令回复给客户端通知客户端去⽬标节点去访问。第⼆个asking指令和moved不⼀样,它是⽤来临时纠正槽位的。回⼀个askingerror携带上⽬标节点的地址。客户端收到这个askingerror后,就会去⽬标节点去尝试。客户端不会刷新槽位重试2movedasking指令都是重试指令,客户端会因为这两个指令多2次呢?这种情况是存在的,⽐如⼀条指令被发送到错误的节点,这个节点会先给你⼀个moved错误告知你去另外⼀个节点重试。所以个槽位进⾏迁移操作,于是给客户端回复了⼀个asking指令告知客户端去⽬标节点去重试指令。所以这⾥客户端重试了2次。会有⼀个循环,然后会设置⼀个最⼤重试次数,Java和Python都点关系表。那客户端是如何得到通知的呢?这⾥要分2种情况:Connecti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《组件层压工艺说明》课件
- 吹气球治疗肺部疾病
- 《汇编程序设计》课件
- 《各种各样的绳子》课件
- 儿童常见病治疗
- 医院医疗设备外借流程
- 八省八校2022届高三化学下学期3月第二次联考试题
- 《安全事故案例汇编》课件
- 中国母婴营养品市场洞察报告
- 微课如何撰写岗位说明书之工作目的财经管理人力资源管理系
- 外科学教学课件:周围神经损伤
- 杆塔分解组立
- 医院员工手册5篇
- 13培智二年级语文上册《土木火》教案
- 病史采集和临床检查方法
- 利益相关方投诉处理程序
- 部编版五年级语文上册 (教案+反思)口语交际父母之爱
- 高考语文作文素材人物速递——苏炳添课件18张
- 钢板桩及支撑施工方案DOC
- 完整解读新版《化学》新课标2022年《义务教育化学课程标准(2022年版)》PPT课件
- 针织弹性面料基本知识
评论
0/150
提交评论