百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

redis专题系列17 -- redis 集群模式之Cluster集群

mhr18 2025-03-30 19:03 31 浏览 0 评论

Cluster集群就是一个提供在多个Redis间节点间共享数据的程序集,是Redis 3.0版本以后引入的,是redis官方推荐的性能最高的集群模式。

架构模型


1.采取了去中心化的思想,没有中心节点

2.其对key的算法并非一致性hash算法,而是采用了哈希槽模型,每个集群拥有16384个hash slot,存储时,使用CRC16算法对key校验,然后对16384取模得到对应的哈希槽。

3.节点之间采用轻量通讯协议,占用带宽少,效率高

4.自动负载均衡,自动failover,支持动态扩展。

5.Cluster模式也是基于主从模式+哨兵衍生出来的,只不过数据节点本身也是哨兵节点,如果有半数节点发现某个节点异常,则共同决定故障节点状态,如果主节点故障,则其从节点晋升为主节点,主节点重启后降级为从节点。但是如果集群没有设置salve节点,一旦主节点挂掉,整个集群便进入fail状态,因为集群的slot映射不完整。如果集群超过半数以上的master挂掉,无论是否有slave,集群都会进入fail状态。

6.集群的规模至少有3台以上的master,这样比较合适集群的部署。

架构搭建实战

环境: win10 X64, redis 3.2.100

1.准备6份配置文件,3主3从,下面奉上其中一份配置的详情:


端口号依次从7000~7005,同样的集群配置文件的名称与端口号保持一致。

2.下载并安装ruby运行时环境

最新版本官网地址:
https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.5-1/rubyinstaller-2.6.5-1-x64.exe

按照提示一步步向下走就好了,安装成功后,可以使用 ruby -v 检查是否成功。


孤安装的是2.6.3,国内网站下载的,官网太慢

3.下载ruby环境下Redis的驱动,考虑到兼容性,这里下载的是4.1.3版本

下载地址:
https://rubygems.org/downloads/redis-4.1.3.gem,注意如果ruby的版本低于2.3.0,安装驱动时会报错。

4.安装Redis驱动

gem install --local path_to_gem/redis-4.1.3.gem 

5.下载创建Redis集群的ruby脚本文件redis-trib.rb,路径如下

github地址:
https://github.com/beebol/redis-trib.rb,解压然后放到redis的安装目录下(建议)。


redis-trib.rb脚本

6.cd到redis安装目录,依次启动7000~7005

redis-server redis.7000.conf
redis-server redis.7001.conf
redis-server redis.7002.conf
redis-server redis.7003.conf
redis-server redis.7004.conf
redis-server redis.7005.conf

启动成功:


cluster模式


同时看到安装目录生成了对应节点的节点配置文件:


内容即记录自己节点的信息:


nodes.7000.conf


7.使用redis-trib.rb脚本配置集群,本例配置为3主3从模式


首先看命令:


执行命令后,会为集群配置master及对应的slave,最后你只需要在确认时输入yes即可,接着为3个master分配16384个hash slot:


master 7000对应的slot为:0-5460,master 7001对应的slot: 5461-10922,master 7002的slot范围:10923-16383,此时,16384个slot全部分配完毕。

8.同时将分配的信息更新到了nodes.7000.conf文件中,其他节点也会同步,如下:


其他节点信息也被更新到nodes.7000.conf文件中

9.测试

>redis-cli -c -p 7000
127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
127.0.0.1:7002> get foo 
"bar"

可以看到redis将key foo经过CRC16(foo)对16384取模,定位到7002的slot上,并将值bar写入到7002的机器,返回client处理结果后,然后将命令同步到7005的从节点上。取值直接从7002执行命令。

10.故障模拟

此时kill掉7002的服务,观察集群的变化,此时执行命令 get foo

127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7005
"bar"

看到,集群将自动跳转到7005取值了,那么7005是slave还是master呢?


nodes.7000.conf

从上面的配置信息中看到,7005成功晋升为master节点。


10.重启7002节点,看nodes.7000.conf配置信息的变化


7002重启后成为7005的子节点


此时一个简单的redis cluster 集群就搭建和部署OK了。

扩展:除了nodes.xxx.conf看cluster的集群配置信息,也可以通过cluster nodes查看。


下一篇文章将接着介绍Cluster模式下节点的动态扩展。

相关推荐

Team IDE 集成管理工具

Team·IDE工具简介TeamIDE工具集成SSH、FTP、MySql、Redis、Zookeeper、Kafka、Elasticsearch等管理工具Team·IDE功能模块目录结...

MySQL大数据表处理策略,原来一直都用错了……

场景当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题。数据的插入,查询时长较长后续业务需求的扩展,在表中新增字段,影响较大表中的数据并不是所有的都为有效数...

Java程序员你真的甘心只做增删改查吗

各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题最近...

Java后端开发除了增删改查还有什么?

后端的追求:接口稳定、架构合理、业务逻辑清晰、模块拆分合理、支持高并发等。软件本身归根到底都是由算法+数据结构构成的,进一步细化之后,其实就是通过一系列的增删改查操作,构成算法,对数据结构进行操作,赋...

基于shiro实现session持久化和分布式共享

前言本文写下session持久化和分布式共享基于shiro框架对session的管理机制来实现必要性一直处于登陆状态:你登陆微信不可能三天两头就让你重新登陆吧?而是一直处于登陆状态除非主动退出...

为啥工作那么多年,你还是只会增删改查?

你以为没有这样的感觉,工作中领导和同事都非常认可你的能力,但是你想更进一步,却不被认可。想出去看看,跳槽面试,却也是屡屡碰壁。面试的过程中,面试官问技术方案,明明心里很清楚,或者说印象还行,可就是说不...

Java程序员除了做增删改查还能干嘛?

就以Java后端开发为例,说说不同级别程序员干的事情。1初级开发,大概是有3年Java开发经验。22年底,上海,这批程序员如果学历是本科,薪资一般是8k到2w,当然如果能进好公司或互联网大厂,薪资能...

Java面试题及答案总结(2025版持续更新)

大家好,我是Java面试分享面对Java后端岗位的激烈竞争,掌握系统化的知识体系至关重要。本文整理了覆盖主流技术栈的高频面试题,助你高效备战,内容包含:Java基础、并发编程、Spring生态、数据库...

微服务架构之API网关——在微服务项目中的技术框架和用法实践

API网关技术实战在介绍了API网关的相关理论之后,大家可以了解到API网关的作用和优缺点,接下来将为大家介绍API网关在微服务项目中的技术框架和用法实践。Zuul网关其实API网关并不是很难的技术,...

带小白黑客入门,你也可以跟我们一起成为黑客大牛

小编这几天一直在做关于ssrf的实验,这篇文章可以带纯小白黑客入门。靶机ip地址:192.168.2.138查看靶机运行的redis服务。攻击机为ip192.168.2.112.用客户端redis-c...

Python最常见的170道面试题全解析答案(二)

60.请写一个Python逻辑,计算一个文件中的大写字母数量答:withopen(‘A.txt’)asfs:count=0foriinfs.read():ifi.isupper...

Spring Boot项目集成Redis,原来这么简单!

在现代软件开发的“快车道”上,SpringBoot无疑是许多开发者手中的“神兵利器”。它以其“约定大于配置”的理念,大大简化了Java应用的开发和部署过程,让开发者能够将更多精力聚焦于业务逻辑本身。...

Apache Commons Pool——优化你的java内存

大家好,我是吉森。我会持续分享一些开发技巧、经验和技术,如果你也热爱各种开发技术,欢迎关注我。今天我们继续介绍ApacheCommons工具包,今天的主角是:CommonsPool。简单地说,它是...

码农成长系列-基于WebSocket的后台消息提醒

场景描述当用户对app有某些业务操作时,需要将该操作友好地提醒给,有接收提醒权限的后台管理者。技术场景分析经分析,要实现上述业务,业务拆解后可能需要解决如下业务①.触发提醒待推送数据的监听②.提醒时接...

百度直播消息系统的实践和演进

导读:直播业务的核心功能有两个,一个是实时音视频推拉流,另一个是直播间消息流的收发。本文主要介绍百度直播服务内的消息服务系统的设计实践和演化。一、背景直播间内用户聊天互动,形式上是常见的IM消息流;...

取消回复欢迎 发表评论: