专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

RedisCluster集群模式从零理论配合集群搭建

  满怀忧思,不如先干再说!
  本文章为系列文章,如需系统观看请按照文章顺序阅读,如有所了解,解决针对性问题,可直接阅读,谢谢支持!用到Redis版本为5。X说在前头
  本文涵盖大量理论和原理性知识,适合收藏反复阅读
  如果纯粹搭建集群,暂且对理论和原理不感兴趣,可直接阅读【快速配置】章节为什么使用集群
  之前我们提到redis可以实现主从复制,但是主从复制是不能实现高可用的,当数据容量或者QPS需要很大时但即使无法满足需求的。至于RedisSentinel【哨兵模式】与RedisCluster【集群模式】有何区别在文末说明。并发量
  Redsi官方提供的数据为10W秒,不去计较它的准确性,但是实际使用中是可以完全达到上万,已经可以满足我们很大一部分的需求,但是有些业务可能需要更高的QPS,比如百万级的。数据量
  Redis是基于内存的数据库,机器的内存普遍在16256G之间,如果我们的数据量有500G,比如个性化推荐系统,将用户相关的数据都存到Redis中。解决方案配置强悍的机器,超大内存,顶级CPU等,但是成本非常高,一台节点总归有极限。分布式,添加节点。
  Redis在3。0版本之后推出RedisCluster来满足我们分布式的需求数据分区
  在学习Redis集群之前先看看数据分区的概念,就是怎么将所有的数据合理的分配到不同的节点上。常有的分区方式有顺序分区和哈希分区
  顺序分区
  就是将同一个范围内的数据存储到同一个Redis实例中,比如有一张用户表,我们将ID0ID10000的,ID10001ID20000,以此类推,存储到同一个实例中。那么如果我们有些数据不好分区,比如有些ID是随机数,UUID等等,我们可以使用哈希分区哈希分区
  哈希分区跟范围分区相比一个明显的优点是哈希分区适合任何形式的key,而不像顺序分区一样有局限性,而且分区方法也很简单,一个公式就可以表达:idhash(key)nodes
  其中id代表Redis实例的编号,公式描述的是首先根据key和一个hash函数(如crc32函数)计算出一个数值型的,再对Redis节点数取模,取模的目的是计算出我们要将数据存到第几台节点上!
  节点取余分区
  当我们Redis节点有三台,但是数据越来越多时,我们会考虑增加节点,这个时候我们建议使用多倍扩容,比如3台节点我们扩容到4台那么80的数据会切换接点,比如从1到了2节点等现象,数据迁移变化太多,我们如果熙增到6台节点那么只有50的数据会迁移。
  总结:客户端分片:哈希取余节点伸缩:数据节点关系变化,导致数据迁移,因为要重新计算迁移量和添加节点数量有关:建议翻倍扩容这种方式不建议使用,是一种比较古老的方式,因为当新增节点时会对大量数据造成迁移,如果你的系统很依赖缓存,那么性能必然会受到影响。一致性哈希分区
  上边说到哈希取余方式如果增加节点对数据造成的迁移比较大,一致性哈希就是解决了这种问题。我们可以将Redis保存数据认为是一个环形,Hash值有32位,0232,将节点的IP算法确定唯一的哈希值,之后在内存中确定节点的位置,当保存数据时,根据key进行哈希运算,顺时针确定挂载到哪台节点上。图丑见谅
  如果集群需要添加节点,比如在node2和node3之间添加一个node4,数据分布会变成下图
  我们会发现,数据依然有迁移,本来在node3上的数据一部分迁移到了node4上,但是node1和node2没有受到影响。如果我们集群有1000台,是由原本的取余分区方式会有80的数据迁移,为了避免我们使用双倍扩容,也就是再添加1000台节点达到50数据迁移的效果,很显然添加这么多的节点是不合适的!!!这种分区方式在memCache中使用。Redis哈希槽
  上边我们介绍了顺序分区和hash分区,而RedisCluster并没有使用其中的任何一种(坑爹呢,上边叨X叨半天),Redis而是引入了哈希槽的的概念,Redis内置了16384个槽,从016383。每个节点都维护一个范围的哈希槽,当有新的key需要添加时,会使用CRC16算法并且对16384取余,公式:CRC16(key)16384。得到一个值,去找Redis集群中的节点,看看这个槽是哪个节点维护的,就将key存储到哪个节点上。
  到这里我们知道有顺序分区,哈希分区,哈希分区包含节点取余和一致性哈希。memCache分布式使用一致性哈希,Redis集群中使用的是哈希槽的方式存储数据。我们接下来说一下Redis集群的架构和搭建方式。
  Redis集群架构单体架构
  单体架构如下图所示,只有一个Redis实例,多个客户端都在操作同一个Redis,数据存储量,访问量,数据备份上都是有问题的
  RedisCluster架构说明
  下图是分布式架构,蓝色圆圈是Redis实例,这里有五个,之前说Redis集群中存储数据通过槽的概念,会讲16384个槽平均到5台节点上,节点之间看到了有双向箭头指向,这代表他们之间是相互通信的,每个节点都知道对应的槽是哪个节点负责。下方的绿色客户端可以去操作Redis集群中可用的节点。如果客户端要找的数据在该节点上就会返回数据,如果不在会响应客户端新的节点地址,做一个转发操作,去新的节点上获取数据。当然这种方式效率不高,当节点多时,命中率不会很高,需要智能客户端,这个后边再说。
  在分布式模式下节点之间会相互通信每个节点都负责读写,每个节点负责数据的一部分
  节点间通信
  节点间使用meet命令进行通信,比如A向C发送meet命令,C会反馈给A一个PONG,A给B发送meet,B反馈给A一个PONG,这样B和C也能得知对方的存在。
  节点更多时如下
  指派槽
  比如我们的RedisCluster有三台节点,我们需要给三台节点分配槽,如下图,而客户端则需要使用公式计算结果将key存储在对应的节点上。
  Redis集群配置和启动Redis集群配置有原生配置、官方提供的ruby插件配置方式和redis5。0之后的快捷配置,我们这里三种方式我们说明第一种和第三种,原生配置比较麻烦,但是可以让你体验到RedisCluster架构和整个流程,实际应用中使用快捷方式配置即可。
  原生配置方式步骤配置开启Redis,这种情况每台节点都是独立的;执行meet操作,让Redis集群之间感知到其他节点的存在;分配槽;设置主从关系,我们这里一共6台节点,3主3从。Redis配置和启动我们的配置文件从redis7000。conf到redis7005。conf,每个配置文件中端口和日志文件名不一样,只贴出redis7000。conf配置文件
  port7000daemonizeyeslogfile7000。logdirusrlocalredis5。0。5dataprotectedmodenodbfilenamedump7000。rdb开启集群clusterenabledyes集群运行时文件clusterconfigfilenodes7000。conf是否集群所有的节点都正常集群才可使用,改为noclusterrequirefullcoverageno
  启动Redis6个节点,在查看进程,发现端口后边都有cluster标记
  我们随便进入一个节点添加数据会发现,提示我们集群下线,没有提供哈希槽!请回头看我们的步骤。至此我们第一步和第二步就完成
  接下来我们到data目录下发现有nodes开头的文件,这就是我们在redis配置文件中配置的,我们输出一下文件内容,绿色下划线的分别是该节点的ID和自己的状态为master。
  meet操作实现节点握手命令:redisclipportclustermeet目标节点ip目标节点port
  查看状态命令:redisclip7000clusterinfo
  发现节点个数为6个
  那么这里给大家留个问题,至此我们可否向redis中存储数据呢?指派槽集群规划为7000,7001,7002是主节点,7003是7000从节点,7004是7001从节点,7005是7002从节点
  7000:05461
  7001:546210922
  7002:1092316383
  分配槽命令:redisclipportclusteraddslotsslot
  我们有16384个槽,一个一个分配是很慢的,所以我们编写一个脚本来分配!
  分配槽脚本start1end2port3forslotinseq{start}{end}doechoslot:{slot}redisclip{port}clusteraddslots{slot}done
  执行命令addslots。sh054617000addslots。sh5462109227001addslots。sh10923163837002
  进入到7000端口实例执行clusternodes命令看到槽已分配好,大家就可以向Redis中添加数据了
  主从分配
  根据指派槽哪里说得主从关系我们使用以下命令进行分配
  命令redisclip从节点portclusterreplicate主节点ID主节点ID就是上图最前边的那一串字符redisclip7003clusterreplicatecb436d72cee8f6547e0dc002c9342dd27087bdccredisclip7004clusterreplicate03717034bca9c03e40cf4c1a4041c94f79e209d8redisclip7005clusterreplicatec0167209ceb9fa350704781a1a53432a61f92a8c
  在执行clusternodes命令会发现已经变成3主3从,如下图
  注意:如果启动集群模式的客户端需要使用redisclicp7003命令加上了c参数!
  至此我们的原生方式已经搭建完成,很复杂,但是可以看到RedisCluster的整个实现流程,对大家理解RedisCluster更有帮助,希望大家可以自己动手跟着做一遍!有问题的可以下方留言!快速配置
  redis5。0集群创建方式改为了C编写的rediscli创建,不用再安装麻烦的ruby了。ruby方式大家感兴趣可以到网上搜索,这里就不说了配置和之前一样就是将7000端口改为8000,以此类推为了区别,大家在配置的时候建议先将redis都停掉,还是3主3从的方式,下边只贴出8000的配置配置文件port8000daemonizeyeslogfile8000。logdirusrlocalredis5。0。5dataprotectedmodenodbfilenamedump8000。rdb开启集群clusterenabledyes集群运行时文件clusterconfigfilenodes8000。conf是否集群所有的节点都正常集群才可使用,改为noclusterrequirefullcoverageno节点请求超时时间clusternodetimeout15000关闭保护模式protectedmodeno启动节点
  分别启动6台节点,查看进程
  配置集群
  直接使用以下命令即可,前边三台是主节点,后边三台是从节点,如要操作请先看下方蓝色字体部分,有坑!rediscliclustercreate192。168。11。101:8000192。168。11。101:8001192。168。11。101:8002192。168。11。101:8003192。168。11。101:8004192。168。11。101:8005clusterreplicas1
  大家这里一定要注意上边create创建集群时,一定要写具体的节点ip,不要写127。0。0。1,否则在你使用Java操作RedisCluster时会去连接127。0。0。1的节点,比如:你在Centos上部署的redis集群,你的开发环境实在window下,那么他就会操作你window下的redis,然而并没有!当时我这里也是出了问题,搞了将近2个小时才找到!
  下图为分配槽、配置主从的过程是可以看出来的
  查看集群情况
  可以看出3主3从,操作和之前都一样哨兵模式和集群有何区别哨兵模式需要开启sentinel进程主要作用是监控Redis节点的运行状态,如果主数据库发生故障则切换到从数据库,sentinel发现master挂掉之后再重新选举出一个新的master,主要是监控,提醒和故障转移,实现Redis的高可用;哨兵模式客户端不会记录具体的master节点的ip,而是记录sentinel节点,我们从sentinel节点获取redis的地址,上节我们用代码演示过;哨兵模式存储数据都是全量存储,每个Redis存储的都是完整的数据,浪费内存而且存在木桶效应,为了最大化利用内存,我们可以使用分布式存储,采用集群。即每台节点存储不同的数据,共有16384个slot;集群最少3主3从,且主从不用配置,集群会自己分配(参考我们的第二种搭建方式);集群模式为了解决单机Redis容量有限的问题,将数据按照一定的规则分配到多台机器,提高并发。
  如果不错记得关注,点赞哦!无偿提供编程咨询服务,如有需要可私信

男子大半辈子以乞讨为生,事迹轰动朝野,皇帝亲赐黄马褂清朝末年,一名山东男子大半辈子以乞讨为生,他的事迹却轰动朝野。光绪皇帝听说后,不仅为男子赐名,还赏他黄马褂。男子一生无婚无子,死后却有万人为他送葬。老百姓为他树碑立传,尊称他是千古解放前,一地下党被敌围捕,旁边杂货店老板道赶紧坐下来吃花生1945年10月23日,晌午,吴县北桥芮埭小镇(现相城区北桥镇芮埭村)东桥头杂货铺内。店主傅根生吃罢饭,将门口的棉帘半放下来,随后轻步来到了账台的后面,缓缓坐下。晌午头刚过的这段时你的收入在古代相当于几品大员?这是很多人都探讨过的一个热门话题,那就是古代官员的俸禄到底有多少,以及历朝官员的俸禄差异。鉴于历代俸禄的形式各有不同,查阅详细的俸禄数量之后(部分是推算),把所有形式的俸禄,如俸钱人们常说东山再起,东山究竟指哪座山?中华文明,博大精深,源远流长,每一个成语背后都有一段小故事。或跌宕起伏或含蓄优美或扣人心弦。比如,成语东山再起,指的是再度出任要职,也比喻失势之后重新得势。但东山再起里的东山到底指智慧之星刘庚新智慧之星刘庚新记得小时候,我从幼稚的童年矇胧记事起,一个非常有诱惑力的故事,时常萦绕在我的心怀,就是风流才子刘庚新的故事,早早的就进入了我的脑际,且印象深刻,记忆犹新。刘庚新的故事剖析漕运帆樯去似飞,古代交通史上的传奇,它又是怎么发展的在阅读此文前,诚邀您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持。引言漕运是中国古代十分常见的一种运输方式,被运输的通常都是国家发展所需要的重要的物吉林省第一届职工冰雪运动会暨红旗冰雪嘉年华活动启幕1月18日,吉林省第一届职工冰雪运动会暨红旗冰雪嘉年华活动在长春南溪湿地公园正式开幕。近年来,吉林省推动构建以冰雪为核心的全产业链发展,强调做好后冬奥时代冰雪文章。在吉林省委省政府五人得分上双CBA第二阶段最后一战北控战胜同曦1月18日,20222023赛季CBA联赛常规赛第二十八轮的一场比赛中,北京控股面对排名高于自己的南京同曦,最终118比109战胜了对手。北控男篮在CBA第二阶段的最后一场比赛中,经济学研读谈谈我国东北地区经济发展现状经济发展技术创新指数测度东北地区,传统优势产业发展受阻,近年来经济发展局面较为困难,逐渐与其他地区形成差距。东部地区,凭借良好的发展基础和先天优势继续领跑我国经济发展。但在其内部也陕西省政府批复建设四家省级高新技术产业开发区近日,陕西省人民政府批复建设延安黄陵,咸阳兴平武功和礼泉4家省级高新技术产业开发区,我省高新区队伍再添新力量!截至目前,全省高新区总数达到29家,其中国家高新区7家,省级高新区22徐杰很开心以胜利结束第二阶段感谢诸暨赛区工作人员的付出直播吧1月18日讯CBA常规赛,广东10899战胜辽宁,第二阶段取得17胜2负的战绩。赛后,广东后卫徐杰更博写道春节前的最后一场比赛,很开心以一场胜利结束了第二阶段最后一场比赛。感
粮仓也有黑科技!从古至今人们如何储粮?央广网北京7月2日消息据中央广播电视总台中国之声新闻超链接报道,眼下,全国夏粮小麦大规模收获已经结束。四川湖北河南安徽江苏陕西山东河北山西等9省已收获超3亿亩。一粒粒金黄的麦子颗粒唯恐天下不乱!岸田扬言明日东亚或成乌克兰第二,赵立坚回击文庞建国工作室李不言日本曾对中国以及其他国家和地区犯下滔天罪行,手上沾满了血腥。然而受害者们不仅没有等到一个道歉,甚至连真实的历史,日方都意欲模糊。随着时代的不断发展,日本还试图塑司马懿出征带了个老头,诸葛亮得知后长叹吾命休矣三国时期群雄逐鹿,在这样的乱世中涌现出了许多的英雄人物,无论是刘关张桃园三结义,还是以曹操为首的北方,亦或是偏居一隅的东吴,都是不容忽视的势力。就在这样三足鼎立的局面下,三方势力都三大因素导致中国航空企业拒绝美国波音客机中国三大航空巨头南航国航东航联合签署与欧洲空中客车购买空客A320NEO客机协议,共292架,372。57亿美元。本协议签署以后,各方的反应是不同的,我们中国航空公司很自信,因为我中国移动用户总数已达9。61亿,但它有一款神奇产品很多人却不知道身在中国,我们每天都会使用电话通信,使用移动流量上网等等,而提供这些服务的,则是中国大名鼎鼎的电信运营商。目前中国的电信运营商有三家,移动,电信和联通,它们三家在中国都是赫赫有名,泽曲河畔黑颈鹤育儿记视频加载中央广网西宁7月3日消息(记者樊永涛)近日,在青海省黄南藏族自治州河南蒙古族自治县的泽曲河畔,当地生态志愿者才项南加拍摄到了黑颈鹤成功繁殖雏鸟的影像资料。黑颈鹤夫妇(央广网养生故事杯弓蛇影添心病在日常生活中,确实有些人非常害怕蛇这种动物,他们一见到蛇就会产生恐惧心理,进而产生一系列反应。中国古代有个寓言,叫做杯弓蛇影,讲的就是这个原理。古代有个县令请客人喝酒,喝着喝着,客一饿就心慌手抖,恨不得立刻吃饭?别大意,不一定是低血糖心慌手抖,是太累了?要赶紧吃饭?其实都不是,它有可能是疾病信号,不要大意,来看看两个案例。神奇!女子心慌手抖没力气,一喝可乐就好林女士有一个爱好,那就是喝饮料,每次商家搞活动她都会围歼团灭港独之势已成!必须尽快将港独团伙连根拔起文曾财安从现在开始,李家超政府最迫切的其中一个战略任务就是围歼港独份子,将团伙连根拔起,使其永远也没有机会作乱作恶。自香港国安法于2020年6月生效之后,香港国安处连同有关的政府部习近平主席视察驻香港部队时的重要讲话在全军引发热烈反响央广网北京7月3日消息(记者刘若晨)据中央广播电视总台中国之声新闻和报纸摘要报道,习近平主席视察慰问中国人民解放军驻香港部队并发表重要讲话,在全军引发热烈反响。广大官兵纷纷表示,要新主帅浮出水面!中国短道速滑时隔4个月重新集结,功勋名宿回归近段时间,中国短道速滑队重新集结,将会开展为期1个月的训练。按照体育总局方面的计划,这次集训的主要目的,是提升运动员的体能,也算是打基础的工作。相比于集训本身,广大粉丝更关注中国短
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网