redis集群环境的搭建和错误分析

Redis 集群环境 Redis集群概述与操作指南 Redis集群通过数据分片和主从复制实现高可用分布式存储。集群采用哈希槽(16384个槽位)进行数据分区,支持动态扩容缩容。每个主节点配备从节点,故障时自动切换。搭建集群需配置多个节点,使用redis-cli创建集群并分配槽位。集群支持故障转移,但存在多键操作限制和潜在数据丢失风险。操作指南包括集群搭建、节点管理(添加/删除)、数据迁移等步骤,并提供了批量操作脚本示例。Redis集群适合需要水平扩展和高可用的场景,但需权衡性能与一致性。 (字数:147) 阅读详情


原文: http://blog.youkuaiyun.com/jaryle/article/details/51757874



安装Redis集群需要版本号在3.0以上

redis-cluster安装前需要安装ruby环境

搭建集群需要使用到官方提供的ruby脚本。

需要安装ruby的环境。

yum -y install ruby

yum -y install rubygems

redis集群管理工具redis-trib.rb

[root@bogon ~]# cd redis-3.0.0

[root@bogon redis-3.0.0]# cd src

[root@bogon src]# ll *.rb

-rwxrwxr-x.1 root root 48141 Apr  1 07:01  redis-trib.rb


脚本需要的ruby包:redis-3.0.0.gem

安装 gem install  redis-3.0.0.gem

[root@bogon ~]# gem install redis-3.0.0.gem

Successfully installed redis-3.0.0

1 gem installed

Installing ri documentation forredis-3.0.0...

Installing RDoc documentation forredis-3.0.0...


集群的搭建

需求,创建6台redis服务器,虚拟机模拟端口号为7001-7006

第二步:修改redis的配置文件

1、修改端口号
第三步:把创建集群的ruby脚本复制到redis-cluster目录下。
第四步:启动6个redis实例

第五步:创建集群。

./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005  192.168.25.153:7006

错误一

创建过程中会遇到错误

[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some  key in database 0.
解决办法:

解决方法:

1)、将需要新增的节点下aof、rdb等本地备份文件删除;

2)、同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;

3)、再次添加新节点如果还是报错,则登录新Node,./redis-cli–h x –p对数据库进行清除:

172.168.63.201:7001>  flushdb      #清空当前数据库

错误二

redis.clients.jedis.exceptions.JedisClusterException:CLUSTERDOWN The cluster is down
at redis.clients.jedis.Protocol.processError(Protocol.Java:115)
at redis.clients.jedis.Protocol.process(Protocol.java:142)
at redis.clients.jedis.Protocol.read(Protocol.java:196)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:288)
at redis.clients.jedis.Connection.getBinaryBulkReply(Connection.java:207)
at redis.clients.jedis.Connection.getBulkReply(Connection.java:196)
at redis.clients.jedis.Jedis.get(Jedis.java:98)
at JedisTest.testJedisPool(JedisTest.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    
错误至今没有找到什么原因

使用redis-3.0.0目录下src下的redis-trib.rb check 192.168.218.128:6379进行检查和进行redis-trib.rb fix 127.0.0.1:6380进行修复时

The folowing uncovered slots have no keys across the cluster:
./redis-trib.rb:412:in `fix_slots_coverage': undefined method `keys' for #<Array:0xb76ec21c> (NoMethodError)
        from ./redis-trib.rb:354:in `check_slots_coverage'
        from ./redis-trib.rb:333:in `check_cluster'
        from ./redis-trib.rb:847:in `fix_cluster_cmd'
        from ./redis-trib.rb:1373:in `send'
        from ./redis-trib.rb:1373

在用check检查集群运行状态时,遇到错误;最终我知道那里错了,是我把单机版的redis.conf配置文件开启了cluster-enable

所以总是提示CLUSTERDOWN The cluster is down的错误,修改单机版redis配置文件,关闭cluster-enable后正常。

错误三

[root@node01 src]# ./redis-trib.rb check 172.168.63.202:7000

Connecting to node 172.168.63.202:7000: OK

Connecting to node 172.168.63.203:7000: OK

Connecting to node 172.168.63.201:7000: OK

>>> Performing Cluster Check(using node 172.168.63.202:7000)

M: 449de2d2a4b799ceb858501b5b78ab91504c72e0172.168.63.202:7000

  slots: (0 slots) master

   0additional replica(s)

M: db9d26b1d15889ad2950382f4f32639606f9a94b172.168.63.203:7000

  slots: (0 slots) master

   0additional replica(s)

M: f90924f71308eb434038fc8a5f481d3661324792172.168.63.201:7000

  slots: (0 slots) master

   0additional replica(s)

[OK] All nodes agree about slotsconfiguration.

>>> Check for open slots...

>>> Check slots coverage...

[ERR] Not all 16384 slots are covered by nodes.

原因:

这个往往是由于主node移除了,但是并没有移除node上面的slot,从而导致了slot总数没有达到16384,其实也就是slots分布不正确。所以在删除节点的时候一定要注意删除的是否是Master主节点。

1)、官方是推荐使用redis-trib.rb fix 来修复集群…. ….  通过cluster nodes看到7001这个节点被干掉了… 那么

[root@node01 src]#  ./redis-trib.rb fix 172.168.63.201:7001


修复完成后再用check命令检查下是否正确

[root@node01 src]# ./redis-trib.rb check172.168.63.202:7000

只要输入任意集群中节点即可,会自动检查所有相关节点。可以查看相应的输出看下是否是每个Master都有了slots,如果分布不均匀那可以使用下面的方式重新分配slot:

[root@node01 src]#  ./redis-trib.rb reshard 172.168.63.201:7001


树莓派4B之OpenCV人脸识别实战:从Haar Cascade到实时检测(保姆级教程) 本教程详细介绍了如何在树莓派4B上部署OpenCV,并利用Haar Cascade算法实现实时人脸识别。内容涵盖从系统环境搭建、算法原理解析到代码逐行讲解与实战调优,为嵌入式AI和计算机视觉初学者提供了一份完整的保姆级实践指南。 阅读详情

相关推荐

AutoSAR实战:手把手教你配置PNC(Partial Network Cluster)实现精准休眠与唤醒

本文详细介绍了如何在AutoSAR中配置PNC(Partial Network Cluster)实现精准休眠与唤醒,通过DaVinci Configurator工具逐步指导,结合ComM模块的协同调试,优化车载电子系统的能耗管理。文章包含实战步骤、常见错误排查及功耗优化数据,适合汽车电子开发工程师参考。

weixin_33725239的博客 466

Redis集群搭建的三种方式

Redis集群搭建的三种方式@

weixin_45935673的博客 4090

MIPI video mode 和 command mode 的区别

1、何为LCD RAM? LCD 是指字面意思是液晶显示屏(Liquid Crystal Display), 而RAM: 随机存取存储器(Random-Access Memory),两者完全是风马牛不相及的东西。 下图是一个标准的LCD的爆炸图(不含TP),请注意图中红色mark的地方:控制IC-- LCD的大脑。所谓的LCD RAM自然是指此大脑是否包含RAM. 题外话<不感兴趣的...

精诚所至 4689

linux redis-trib.rb,redis集群配置 执行 redis-trib.rb 报错解决方法

edis-trib.rb是Redis Cluster的一个常用工具。下面记录了执行此命令时遇到的一系列错误。redis-trib.rb create --replicas 1 127.0.0.1:7379 127.0.0.1:7380 127.0.0.1:7381 127.0.0.1:7382 127.0.0.1:7383 127.0.0.1:7384 /usr/bin/env: ruby: 没...

weixin_29579377的博客 487

RT-Thread新手必看:FMT飞控移植中的5个常见坑及解决方案

本文针对RT-Thread新手在移植FMT开源飞控时遇到的5大核心挑战,提供了深度解决方案。内容涵盖SCons构建系统配置、RT-Thread版本API兼容性处理、BSP与设备驱动适配、TOML系统配置解析以及算法模块集成调试,帮助开发者高效避坑,成功完成飞控移植。

gin88的博客 250

Win10局域网内文件共享+远程桌面控制保姆级教程(含常见问题解决)

本文提供Win10局域网内文件共享和远程桌面控制的详细教程,包括环境检查、共享文件夹设置、远程桌面连接步骤及常见问题解决方案。通过内置功能实现高效办公协作,提升多设备协同工作效率,特别适合需要频繁传输文件或远程控制场景的专业人士。

rose2的博客 777

Redis集群手把手教程

Redis 集群实现了对 Redi s的水平扩容,即启动 N 个 Redis 节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。 Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。 主从复制的目的是为了减轻 Redis 服务器的 CPU 压力, 可以保证数据同步, 为了可以保证 Redis 的高可用, 容灾能力, 一般在每个节点使用主从 + 哨兵

。。。。 3702

浙政钉H5应用上架实战:从环境配置到发布避坑指南

本文详细解析浙政钉H5应用上架全流程,从环境配置到发布避坑指南。重点介绍Vue 2.6 + Node 14.21.3的稳定开发环境搭建、项目结构规范及常见报错解决方案,帮助开发者高效完成浙政钉H5应用上架流程。

weixin_27943395的博客 286

Redis集群搭建----(超详细过程)

初学者一枚,有不对的地方还请指出来,谢谢喽 ^-^ (一)redis集群的原理  1、redis-cluster (redis集群) 架构图  2、redis-cluster投票:容错   架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (PING就是用来检测redis节点的健康状态,在终端输入ping命令出来pon...

qq_42129399的博客 637

Python 爬虫实战:爬取 BOSS 直聘职位,实现岗位要求关键词提取

摘要:本文基于BOSS直聘数据分析师岗位信息,采用Python爬虫技术获取职位数据,通过文本分析和可视化方法研究岗位技能需求特征。研究首先设计爬虫程序获取职位基本信息和岗位要求文本,经数据清洗后运用jieba分词和词频统计提取关键词。结果显示SQL、Python为最核心技能,不同级别岗位需求差异明显:初级重基础数据处理,高级需建模和管理能力;行业间亦存在差异,互联网关注用户增长,金融侧重风控。研究为求职者技能提升提供了数据支持,同时展示了从非结构化文本中挖掘有价值信息的完整流程。

2503_91057718的博客 1765

DDD系列 - 第6讲 仓库Repository - Mybatis篇

书接上回,之前通过一个关于拆解、微服务、面向对象的故事,向大家介绍了如何从微服务、面向对象一步步演进到DDD的,整个演进过程如下图:其中在领域层,我们定义了富血模型的领域模型,包括聚合、聚合根、实体、值对象等。聚合在代码层面中的表现形式即是一个包Package,起到了边界的作用,聚合内的对象间高内聚,而聚合间低耦合。聚合中放着实体、值对象、仓库等,实体相较于值对象的一个典型区别就是实体存在唯一标识,并且可通过该唯一标识查询到该实体并对其进行相关操作,值对象不存在唯一标识且通常作为实体。

罗小爬的技术宝书 1783

Redis集群环境搭建实践

**Redis集群(Redis Cluster)** 是Redis提供的分布式数据库方案,通过 **分片(sharding)** 来进行数据共享,并提供复制和故障转移功能。相比于主从复制、哨兵模式,Redis集群实现了较为完善的高可用方案,解决了存储能力受到单机限制,写操作无法负载均衡的问题。

zhaowen_boss的博客 1015

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的生活垃圾检测与分类系统(Python+PySide6界面+训练代码)

随着城市化进程的加速和人口增长,生活垃圾管理已成为现代城市面临的重要挑战。传统的垃圾处理方法效率低下且成本高昂,急需智能化解决方案。本文详细介绍了基于YOLO系列算法(特别是YOLOv8)的智能生活垃圾检测与分类系统,该系统能够实时识别和分类多种生活垃圾,为智能垃圾处理和回收提供技术支持。系统包含完整的数据集构建、模型训练、评估和可视化界面,并提供了完整的实现代码。

YOLO 117

Redis之集群环境搭建

前面文章介绍了Redis的主从复制,虽然该模式能够在一定程度上提高系统的稳定性,但是在数据访问量比较大的情况下,单个master应付起来还是比较吃力的,这时我们可以考虑将redis集群部署,本文就来重点给大家介绍下Redis的集群部署操作。 Redis之主从复制2 Redis之主从复制1 Redis集群 一、Redis集群相关概念 1.Redis集群介绍 Redis 集群是一个提供在多个Red...

波波烤鸭的博客 4147

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redis集群环境搭建

集群环境搭建集群相关概念Redis集群介绍Redis分片策略Redis的主从复制模型Redis集群搭建集群的结构集群的环境准备 集群相关概念 Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。 Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误。 Redis...

JustinNeil的博客 256

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【redis】 linux 下redis 集群环境搭建

Redis集群 (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 127.0.0.1:6379127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 1:下载redis。官...

a84480766的博客 170

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Redis集群介绍以及Redis-Cluster集群环境搭建

1 Redis集群 1.1 什么是集群 集群就是很多服务器组成的一个网络。指的是将多台服务器集中在一起,实现同一业务。 1.2 为什么需要集群 一台服务器不能满足开发需要的时候,需要多台服务器来支持。这个时候就需要做集群,但是集群往往伴随着分布式。 1.3 集群的特性及能力 1、集群的两大关键特性: 可扩展性----集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的...

weixin_44248000的博客 396

集群环境下_redis 集群搭建,小白也能搭三主三从的集群环境

redis集群简介:Redis集群是一个程序集,它提供在多个 Redis节点之间共享数据。一个 Redis集群不支持同时处理多个键的 Redis命令,因为这要求将数据移动到多个节点之间,这会降低 redis集群的性能,并且在高负载时可能导致意想不到的错误。Redis集群通过分区提供一定程度的可用性,即使集群的一部分节点失效或不能通信,集群仍可以继续处理命令请求。Redis 集群的优势:1、缓存不会...

weixin_39851261的博客 106

centos7搭建redis集群环境

centos7搭建redis集群环境 一、上次redis单机版安装已经在http://blog.youkuaiyun.com/u013144287/article/details/78486530说明,现在搭建redis集群换将安装,首先来了解一下redis集群的架构和原理。redis主要是用来作缓存而使用。 (1)Redis集群架构图        架构细节:

诗雨远方的博客 1151

java redis 集群_Java开发Redis之集群环境搭建

Redis集群一、Redis集群相关概念1.Redis集群介绍Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Red...

weixin_28787801的博客 828

集群搭建_Redis之集群环境搭建

Redis集群一、Redis集群相关概念1.Redis集群介绍Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Red...

weixin_36080842的博客 117
上一篇: Python学习教程
下一篇: redis-cluster研究和使用
还不够
博客等级 码龄16年 113粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值