Redis从3。0开始支持RedisCluster集群部署,在3。0之前使用哨兵模式来实现Redis集群(利用Sentinel来监控master节点的状态,如果master节点异常,则将其中一台slave切换为master),性能不如RedisCluster。 本篇博文以Redis7。0。5为例来搭建RedisCluster高可用集群。 Redis官网:https:redis。io Redis下载地址:https:redis。iodownload1、Redis高可用集群模式 Redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,可以线性扩展到上万个节点(官方推荐不超过1000个节点)。 2、Redis安装 首先需要安装Redis,请参考文章CentOS7下Redis7安装riversblog。3、高可用集群部署 Redis集群需要至少三个master节点,这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,需要用三台机器部署6个redis实例,每台机器一主一从,不过这里为了方便再简化些,使用一台机器部署6个redis实例; 搭建集群的步骤如下: 3。1、配置 1、在第一台机器的optsoftwareredis下创建文件夹rediscluster,然后在其下面分别创建6个文件夾7001、7002、7003、7004、7005、7006;mkdirpoptsoftwareredisredisclustercdoptsoftwareredisredisclustermkdir700170027003700470057006 2、把之前的redis。conf配置文件copy到7001下,修改如下内容:daemonizeyes后台启动port7001分别对每个机器的端口号进行设置pidfilevarrunredis7001。pid把pid进程号写入pidfile配置的文件diroptsoftwareredisrediscluster7001指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据clusterenabledyes启动集群模式clusterconfigfilenodes7001。conf集群节点信息文件,这里800x最好和port对应上clusternodetimeout10000bind127。0。0。1bind绑定的是自己机器网卡的ip,内网一般可以不配置bind,注释掉即可protectedmodeno关闭保护模式appendonlyyes开启AOF如果要设置密码需要增加如下配置:requirepass123456设置redis访问密码masterauth123456设置集群节点间访问密码,跟上面一致 再分别将redis。conf配置文件copy至其他文件夹(7002、7003、7004、7005、7006),调整如下配置为对应节点:port700xpidfilevarrunredis700x。piddiroptsoftwareredisrediscluster700xclusterconfigfilenodes700x。conf 3。2、启动各节点srcredisserveroptsoftwareredisrediscluster7001redis。confsrcredisserveroptsoftwareredisrediscluster7002redis。confsrcredisserveroptsoftwareredisrediscluster7003redis。confsrcredisserveroptsoftwareredisrediscluster7004redis。confsrcredisserveroptsoftwareredisrediscluster7005redis。confsrcredisserveroptsoftwareredisrediscluster7006redis。conf 使用psefgrepredis查看验证,如下表明各节点启动成功: 3。3、使用rediscli创建集群 redis5以前的版本集群是依靠ruby脚本redistrib。rb实现,现在redis7可以使用rediscli来创建集群,创建集群前先关闭防火墙:systemctlstopfirewalld临时关闭防火墙systemctldisablefirewalld禁止开机启动 创建集群:srcredisclia123456clustercreateclusterreplicas1127。0。0。1:7001127。0。0。1:7002127。0。0。1:7003127。0。0。1:7004127。0。0。1:7005127。0。0。1:7006clusterreplicas后面的1代表每个创建的主服务器节点创建一个从服务器节点,如果没有从,可以设置为0 a参数访问服务端密码,如果之前配置了访问密码,这里需要加上a参数〔rootiZuf6ib0sh7w9e6el7zwlcZredis7。0。5〕srcredisclia123456clustercreateclusterreplicas1127。0。0。1:7001127。0。0。1:7002127。0。0。1:7003127。0。0。1:7004127。0。0。1:7005127。0。0。1:7006Warning:Usingapasswordwithaoruoptiononthecommandlineinterfacemaynotbesafe。Performinghashslotsallocationon6nodes。。。Master〔0〕Slots05460Master〔1〕Slots546110922Master〔2〕Slots1092316383Addingreplica127。0。0。1:7005to127。0。0。1:7001Addingreplica127。0。0。1:7006to127。0。0。1:7002Addingreplica127。0。0。1:7004to127。0。0。1:7003Tryingtooptimizeslavesallocationforantiaffinity〔WARNING〕SomeslavesareinthesamehostastheirmasterM:d7fdb82e01378603f58ec808b394417d1fec8f0e127。0。0。1:7001slots:〔05460〕(5461slots)masterM:6d50abfd77cb7d7bda6ee2b209e7d8e6029310e7127。0。0。1:7002slots:〔546110922〕(5462slots)masterM:07fbd029398efac634cd564ad442d115af55babe127。0。0。1:7003slots:〔1092316383〕(5461slots)masterS:afc23d25b05f5c7c41fa4008cc715e600bed1a9c127。0。0。1:7004replicates07fbd029398efac634cd564ad442d115af55babeS:02e43e0dea2fec5c2742125d46ae3b24070a1478127。0。0。1:7005replicatesd7fdb82e01378603f58ec808b394417d1fec8f0eS:e846487495c506c756b2a604eff2ed0118db44fe127。0。0。1:7006replicates6d50abfd77cb7d7bda6ee2b209e7d8e6029310e7CanIsettheaboveconfiguration?(typeyestoaccept):yesNodesconfigurationupdatedAssignadifferentconfigepochtoeachnodeSendingCLUSTERMEETmessagestojointheclusterWaitingfortheclustertojoin。。PerformingClusterCheck(usingnode127。0。0。1:7001)M:d7fdb82e01378603f58ec808b394417d1fec8f0e127。0。0。1:7001slots:〔05460〕(5461slots)master1additionalreplica(s)S:02e43e0dea2fec5c2742125d46ae3b24070a1478127。0。0。1:7005slots:(0slots)slavereplicatesd7fdb82e01378603f58ec808b394417d1fec8f0eS:afc23d25b05f5c7c41fa4008cc715e600bed1a9c127。0。0。1:7004slots:(0slots)slavereplicates07fbd029398efac634cd564ad442d115af55babeM:07fbd029398efac634cd564ad442d115af55babe127。0。0。1:7003slots:〔1092316383〕(5461slots)master1additionalreplica(s)S:e846487495c506c756b2a604eff2ed0118db44fe127。0。0。1:7006slots:(0slots)slavereplicates6d50abfd77cb7d7bda6ee2b209e7d8e6029310e7M:6d50abfd77cb7d7bda6ee2b209e7d8e6029310e7127。0。0。1:7002slots:〔546110922〕(5462slots)master1additionalreplica(s)〔OK〕Allnodesagreeaboutslotsconfiguration。Checkforopenslots。。。Checkslotscoverage。。。〔OK〕All16384slotscovered。 3。4、集群验证 连接任一客户端验证:srcredisclia123456cp7001 a访问服务端密码,c表示集群模式,p表示连接端口 进入7001客户端 查看集群信息:clusterinfo127。0。0。1:7001clusterinfo clusterstate:ok clusterslotsassigned:16384 clusterslotsok:16384 clusterslotspfail:0 clusterslotsfail:0 clusterknownnodes:6 clustersize:3 clustercurrentepoch:6 clustermyepoch:1 clusterstatsmessagespingsent:504 clusterstatsmessagespongsent:508 clusterstatsmessagessent:1012 clusterstatsmessagespingreceived:503 clusterstatsmessagespongreceived:504 clusterstatsmessagesmeetreceived:5 clusterstatsmessagesreceived:1012 totalclusterlinksbufferlimitexceeded:0 查看节点列表:clusternodes127。0。0。1:7001clusternodes 02e43e0dea2fec5c2742125d46ae3b24070a1478127。0。0。1:700517005slaved7fdb82e01378603f58ec808b394417d1fec8f0e016701322602611connected afc23d25b05f5c7c41fa4008cc715e600bed1a9c127。0。0。1:700417004slave07fbd029398efac634cd564ad442d115af55babe016701322592563connected 07fbd029398efac634cd564ad442d115af55babe127。0。0。1:700317003master016701322582523connected1092316383 e846487495c506c756b2a604eff2ed0118db44fe127。0。0。1:700617006slave6d50abfd77cb7d7bda6ee2b209e7d8e6029310e7016701322612642connected 6d50abfd77cb7d7bda6ee2b209e7d8e6029310e7127。0。0。1:700217002master016701322580002connected546110922 d7fdb82e01378603f58ec808b394417d1fec8f0e127。0。0。1:700117001myself,master016701322600001connected05460 RedisCluster将所有数据划分为16384个slots(槽位),每个节点负责其中一部分槽位,槽位的信息存储于每个节点中。 可以看出: 7001主节点(当前节点)分配了05460槽位, 7002主节点分配了546110922槽位, 7003主节点分配了1092316383槽位。 集群操作: 集群默认会对key值使用crc16算法进行hash得到槽位值: HASHSLOTCRC16(key)mod16384 当在7001节点执行setkey123命令时,该节点会发现指令的key所在的槽位12539非自己管理的槽位,这时它会向客户端发送一个跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去处理数据,如下: Redirectedtoslot〔12539〕locatedat127。0。0。1:7003 3。5、关闭集群srcredisclia123456ch127。0。0。1p7001shutdownsrcredisclia123456ch127。0。0。1p7002shutdownsrcredisclia123456ch127。0。0。1p7003shutdownsrcredisclia123456ch127。0。0。1p7004shutdownsrcredisclia123456ch127。0。0。1p7005shutdownsrcredisclia123456ch127。0。0。1p7006shutdown 如果没有设置访问密码,则省略a参数 重新启动集群:1、先关闭集群节点 2、删除集群相关文件 3、启动集群节点 4、创建集群 原文链接:RedisCluster高可用集群部署riversblog