连接Redis不支持集群错误,ERR This instance has cluster support disabled,解决方案
1. 问题背景
调整redis的配置后,启动程序时, 会报如下错误:
[redis://172.16.0.8@xxx]: ERR This instance has cluster support disabledSuppressed: io.lettuce.core.RedisCommandExecutionException: ERR This instance has cluster support disabledat io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147)at io.lettuce.core.internal.Exceptions.bubble(Exceptions.java:72)at io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh.getException(DefaultClusterTopologyRefresh.java:402)at io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh.tryFail(DefaultClusterTopologyRefresh.java:173)at io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh.lambda$null$9(DefaultClusterTopologyRefresh.java:150)at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150)at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)at io.lettuce.core.RedisChannelHandler.lambda$closeAsync$0(RedisChannelHandler.java:189)at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)at io.lettuce.core.internal.Futures.lambda$adapt$1(Futures.java:120)at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625)at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105)at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990)at io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:756)at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:731)at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:620)at io.netty.channel.DefaultChannelPipeline$HeadContext.close(DefaultChannelPipeline.java:1352)at io.netty.channel.AbstractChannelHandlerContext.invokeClose(AbstractChannelHandlerContext.java:749)at io.netty.channel.AbstractChannelHandlerContext.access$1200(AbstractChannelHandlerContext.java:61)at io.netty.channel.AbstractChannelHandlerContext$11.run(AbstractChannelHandlerContext.java:732)at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.base/java.lang.Thread.run(Thread.java:833)Caused by: io.lettuce.core.RedisCommandExecutionException: ERR This instance has cluster support disabledat io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147)at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116)at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120)at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111)at io.lettuce.core.cluster.topology.TimedAsyncCommand.complete(TimedAsyncCommand.java:52)at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:747)at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:682)at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:599)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
3. 问题原因
这是由于redis的实例不支持集群模式,但是在redisson的配置文件里,使用的是集群模式的方法。因此会产生如下报错。
那么redis的具体有几种模式呢,主要有4种,这个需要根据项目的实际情况进行配置。
4. redis的四种模式
redis的模式主要有4种,分别是单机模式、主从模式、哨兵模式、集群模式。
3.1 单机模式
单机模式就是在一台服务器上安装redis,然后启动,所有业务都调用这一台redis服务器。
优点:部署简单,只需要在一台服务器上安装并启动redis就行。
成本低,没有备用节点,不需要其他的开支。
高性能,单机不需要同步数据,数据天然一致性。
缺点:可靠性较弱,一旦服务器宕机,所有业务都无法使用redis服务。单机模式redis性能受限于CPU的处理能力。
3.2 主从模式
主从模式是指有多台redis服务器,其中一台专门用来负责写入客户端请求数据,称为主节点(master),
其他服务专门负责处理客户端的读取数据的请求不负责写入数据,称为从节点。
主节点写入的数据会复制的各个从节点上,并且数据复制的方向是单向的,只能从主节点复制到从节点。
优点:
- 读写分离:master写,slave读,同时可以根据访问需求⼤⼩来添加slave节点数量。
- 负载均衡:通过读写分离的⽅式来分但服务器负载,主节点负责写⼊数据,多个从节点负责读取数据,缓解单个服务器访问的压⼒,提⾼读的吞吐量。
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的⼀种数据冗余⽅式。
- ⾼可⽤性:提⾼了服务的可⽤性,多个节点同时提供服务,当前其中⼀台节点宕机后,其他节点仍然可以提供服务。
- 故障恢复:master宕机后,快速升级slave为master。
缺点: - master宕机后,slave节点升级成新的master节点后,需要⼿动切换主机,同时会有部分数据不能及时同步从服务器,造成数据不⼀致。
- slave宕机后,多个slave恢复后,⼤量的SYNC同步会造成master IO压⼒倍增。
- 主从模式只要⼀个maste节点,所以master节点的写数据的能⼒会受到单机的限制。
3.3 哨兵模式
哨兵模式主要是在主从复制模式基础上,增加了⾃动化的故障恢复功能。
因为主从复制模式下,当master节点宕机后,虽然slave节点会升级成新的master节点,但是升级后的slave节点的ip顺其⾃然的就称为了新的master节点ip,原先其他的slave节点配置的master节点的ip也是需要变更的,在主从复制模式下,这种变更是需要⼈⼯⼿动去修改配置⽂件的。⽽哨兵模式则完美的解决了这⼀缺陷,实现了快速的⾃动恢复,不再需要⼈⼯修改。
主要功能:
- 集群监控:负责监控 master 和 slave 进程是否正常⼯作。
- 消息通知:如果某个 Redis 实例宕机,那么哨兵负责向(哨兵间,客户端)发送消息。
- ⾃动故障转移:当master宕机后,由哨兵负责重新在slave节点中选举出新的master节点,并将其他slave连接到新的master,以及告知客户端新的服务器地址。更好的为客户端提供⾼可⽤服务。
缺点:
哨兵的部署会占⽤额外的服务器资源,且不提供数据的读取服务。哨兵模式除了解决了主从模式⼿动切换主从节点的问题外,其他主从模式存在的问题,哨兵模式基本也都存在。
3.4 集群模式
主从模式实现了数据的热备份,哨兵模式实现了redis的⾼可⽤。但是这两种模式存在两个问题:
(1)写并发:这两种都只能有⼀个master节点负责写操作,在⾼并发的写操作场景,master节点就会成为性能瓶颈。⽽redis集群则可以实现多个节点同时提供写操作,redis集群模式采⽤⽆中⼼结构,每个节点都可以看做是⼀个主从模式,节点之间互相连接从⽽知道整个集群状态。
(2)海量数据的存储压⼒:⽆论是哨兵模式还是主从模式,每台机器上存储的数据都是⼀样的,都是从主节点上复制过去的,本质上只有⼀台Master作为存储。所以⽆论增加多少slave节点都⽆法解决单台机器存储的上限问题。但是集群模式就解决了这以问题,因为Redis Cluster是⼀种服务器 Sharding 技术,采⽤数据分⽚的⽅式,将不同的数据存储在不同的master节点上⾯,因为我们可以通过不断的增加集群中的节点,从⽽达到存储海量数据。
redis集群的实现原理
Redis集群采⽤去中⼼化的思想,没有中⼼节点的说法,对于客户端来说,整个集群可以看成⼀个整体,可以连接任意⼀个节点进⾏操作,就像操作单⼀Redis实例⼀样,不需要任何代理中间件,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node。Redis也内置了⾼可⽤机制,⽀持N个master节点,每个master节点都可以挂载多个slave节点,当master节点挂掉时,集群会提升它的某个slave节点作为新的master节点。Redis集群可以看成多个主从架构组合起来的,每⼀个主从架构可以看成⼀个节点(其中,只有master节点具有处理请求的能⼒,slave节点主要是⽤于节点的⾼可⽤)。
集群的扩容与收缩
集群主要是采⽤hash slot 算法进⾏寻址的,由于集群hash槽的数⽬是固定的,所以随着集群中节点数⽬的增减,每个节点所负责的hash槽的数⽬也会随之发⽣变化,因此对应槽和数据都会在节点之间移动。
1.扩容步骤:
(1)启动新节点;
(2)刚启动的新节点是没有和其他节点进⾏通讯的,因此需要在集群中任意节点执⾏ clustermeet 命令让新节点加⼊到集群中;
(3)新的节点加⼊到集群后,迁移槽和数据,将⼀些槽和数据从旧节点迁移到新节点;
(4)槽和数据迁移到新加⼊的节点后,新的节点会向集群中的各个主节点⼴播通知迁移过来的槽,并更新⾃身的槽节点对应表。
2. 收缩步骤:
(1)迁移槽,⾸先判断要下线的节点是否有负责的槽,如果有,则先将该节点下的槽全部迁移到其他节点,否则直接删除该节点。
(2)通知集群的各个节点忘记⾃⼰。
5 修改RedisServer配置解决
提示语ERR This instance has cluster support disabled说明RedisServer不支持集群。
修改配置文件redis.conf
中的cluster-enabled
参数的值为yes
并把参数前#
去除,重启Redis服务器。
注意:不能通过命令config set cluster-enable yes来解决,因为config命令里面没有cluster-enable配置项。
6 修改RedisClient配置解决
如果无法修改RedisServer权限,并且RedisServer不是集群部署,而是单机模式,那就只能从代码配置上修改一下了,Configuration从Cluster变成Standalone即可。以下代码兼容不同配置的redis集群:
@Configuration
public class RedisConfiguration{//加载配置@AutowiredRedisProperty redisProperty@Bean("myRedisConfig")public Config myRedisConfig(){Conifg config = new Config();if("single".equalsIgnoreCase(RedisProperty.getRedisMode)){// 单机模式conifg.userSingleServer().........}else if("cluster".equalsIgnoreCase(RedisProperty.getRedisMode)){// 集群模式conifg.userClusterServer().........}return config;}
}@Configuration
@ConfigurationProperties(prefix="my.redis")
public class RedisProperty{...redisMode="";...
}//配置.property文件
# 单机模式,可以根据实际情况进行配置
# my.redis.single
# 集群模式
my.redis.cluster
参考:
https://www.cnblogs.com/laityguanguan/p/17473862.html
相关文章:

连接Redis不支持集群错误,ERR This instance has cluster support disabled,解决方案
1. 问题背景 调整redis的配置后,启动程序时, 会报如下错误: [redis://172.16.0.8xxx]: ERR This instance has cluster support disabledSuppressed: io.lettuce.core.RedisCommandExecutionException: ERR This instance has cluster supp…...
什么是json?json可以存放哪几种数据类型
JSON指的是JavaScript对象表示法(avaScript Object Notation),是轻量级的文本数据交换格式,独立于语言: JSON使用JavaScript语法来描述数据对象,但是JSON仍然独立于语言和平台,JSON解析器和JSON库支持许多不同的编程语言ÿ…...

网络编程套接字应用分享【Linux C/C++ 】【UDP应用 | TCP应用 | TCP线程池小项目】
目录 前提知识 1. 理解源ip,目的ip和Macip 2. 端口号 3. 初识TCP,UDP协议 4. 网络字节序 5. socket 编程 sockaddr类型 一,基于udp协议编程 1. socket——创建套接字 2. bind——将套接字强绑定 3. recvfrom——接受数据 4. s…...
有关数据开发项目中使用HIVE由于无法update和delete的场景下,如何解决数据增量的思路
解决数据增量问题的思路在Hive中 在数据开发项目中,使用Hive进行数据处理时,由于Hive不支持update和delete语句,处理数据增量可能会变得有些棘手。然而,有几种策略和技术可以帮助我们解决这个问题,并确保数据增量的高…...

两数之和-考察哈希表的运用
题目 给定一个整数数组 n u m s nums nums和一个整数目标值 t a r g e t target target,请你在该数组中找出和为目标值 t a r g e t target target的那 两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同…...

视觉检测系统,外观细节无可挑剔
在传统行业中,利用人工检测来检测产品外观缺陷依然是主流,但由于竞争的加剧,对企业生产效率的要求也越来越高。传统的检测产品外观缺陷问题的方法就是透过人工目检,或者工人采用游标卡尺等工具检测,此种方式检测速度慢…...
C++中string容器的字符串操作
目录 1.c_str() 返回C常量字符串 2.date() 返回C常量字符串 3.substr() 构造子串 4.find() 正向查找(查找失败返回npos) 5.rfind() 逆向查找(查找失败返回npos) 6.find_first_of() 正向查找匹配的字符 7.find_last_of() 逆向…...

Java编程使用CGLIB动态代理介绍与实战演示
文章目录 前言技术积累核心概念主要功能适用场景与JDK动态代理的对比 实战演示定义待代理的目标类实现MethodInterceptor接口使用代理对象 测试结果写在最后 前言 在Java编程中,CGLIB (Code Generation Library) 是一个强大的高性能代码生成库,它通过生…...

vue3 渲染一个后端返回的图片字段渲染、table表格内放置图片
一、后端直接返回图片url 当图片字段接口直接返回的是图片url,可以直接放到img标签上 <img v-if"thumbLoader" class"r-image-loader-thumb" :src"resUrl" /> 二、当图片字段接口直接返回的是图片Id 那么就需要去拼一下图片…...

iOS开发进阶(十三):脚手架创建iOS项目
文章目录 一、前言二、xcode-select 命令三、拓展阅读 一、前言 项目初期,需要搭建项目基本框架,为此离不开辅助工具,即脚手架。当然,IDE也可以实现新建空白项目,但是其新建后的项目结构可能不符合预期设计࿰…...

手机无线投屏到windows11电脑
1 安装无线投影组件 2 电脑端打开允许其他设备投影的开关 3 手机找到投屏选项 4 手机搜索可用设备连接即可 这里的官方文档给的不太好,给了一些让人眼花撩乱的信息,以下是经过整合的有效信息...

linux 环境安装配置
安装java17 1.下载安装包 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 2.解压到自定义目录/usr/local/java mkdir /usr/local/java tar zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/java 3.配置环境变量 echo export PATH$PATH:/…...

Git常用语句
设置用户名 git config --global user.name "用户名" git config --global user.email "邮箱"查看git用户信息 cat ~/.gitconfig初始化本地库 git initclone指定分支的代码 git clone -b my_branch gitgitlabxxxxxxxxxxxxxxxxxxxxxx.gitpush三件套 gi…...

坦克大战_java源码_swing界面_带毕业论文
一. 演示视频 坦克大战_java源码_swing界面_带毕业论文 二. 实现步骤 完整项目获取 https://githubs.xyz/y22.html 部分截图 启动类是 TankClinet.java,内置碰撞检测算法,线程,安全集合,一切皆对象思想等,是java进阶…...

JVM 记录
记录 工具 https://gceasy.io 资料 尚硅谷宋红康JVM全套教程(详解java虚拟机) https://www.bilibili.com/video/BV1PJ411n7xZ?p361 全套课程分为《内存与垃圾回收篇》《字节码与类的加载篇》《性能监控与调优篇》三个篇章。 上篇《内存与垃圾回收篇…...

Linux学习笔记————C 语言版 LED 灯实验
这里写目录标题 一、实验程序编写二、 汇编部分实验程序编写三、C 语言部分实验程序编写四、编译下载验证 汇编 LED 灯实验中,我们讲解了如何使用汇编来编写 LED 灯驱动,实际工作中是很少用到汇编去写嵌入式驱动的,毕竟汇编太难,而…...

Spring Boot 配置文件
1. 配置文件的作用 配置文件主要是为了解决硬件编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当我们启动某个程序时,程序从配置文件中读取一些数据,并加载运行。 硬编码是将数据直接放在源代码中&…...
IPKISS ------ 查看器件默认端口名称
IPKISS ------ 查看器件默认端口名称 正文正文 我们这里以 Grating Coupler 举例。 import si_fab.all as pdk import ipkiss3.all as i3class MyGratingCoupler(i3.circuit):gc = i3.childcellProperty(<...
uni-app踩坑记录
uni-app踩坑记录 Failed to load local image resource xxx the server responded with a status of 500 (HTTP/1.1 500 Internal Server Error) Failed to load local image resource xxx the server responded with a status of 500 (HTTP/1.1 500 Internal Server Error) 文…...

【嵌入式硬件】光耦
1.光耦作用 光耦一般用于信号的隔离。当两个电路的电源参考点不相关时,使用光耦可以保证在两边不共地的情况下,完成信号的传输。 2.光耦原理 光耦的原理图如下所示,其内部可以看做一个特殊的“三极管”; 一般的三极管是通过基极B和发射极E间的电流,去控制集电极C和发射极…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...