1、删除错误节点,带有 fail,noaddr , 这种需要用 cluster forget

redis集群迁移之后,由于之前的误操作,导致pod日志里面出现这样的错误,出现一会好一会不好的情况,就是由于这个错误节点导致
[uts-node-0] [12:22:48:102] [ERROR] - org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:113) - Unable to decode data. channel: [id: 0x2770e76d, L:/172.17.246.215:45564 - R:/10.129.51.30:7733] message: $879
f0e5d3d17babbce85a9290e679a626bc0bbacc93 10.129.51.30:7735@17735 slave 91b7f8c79c91c7edd77458c332f0b9299bdb94d4 0 1646366975000 63 connected
91b7f8c79c91c7edd77458c332f0b9299bdb94d4 10.129.51.30:7732@17732 master - 0 1646366976611 63 connected 5461-10922
c3c7ba2d0709121e69c2881724a0c5be903a4a6a 10.129.51.30:7736@17736 slave d1c7d99e13a2d7317baf883dffa906470a606641 0 1646366975000 62 connected
d1c7d99e13a2d7317baf883dffa906470a606641 10.129.51.30:7733@17733 myself,master - 0 1646366969000 62 connected 10923-16383
27f7e8dede5b68581486ce8cefdd656032baed70 :0@0 master,fail,noaddr - 1646366063257 1646366063257 4 disconnected
421ccd9a53168359272b733869fcb8ad827aa655 10.129.51.30:7734@17734 slave d46f032ea50763de8353fd530535412df6ffdc00 0 1646366976000 60 connected
d46f032ea50763de8353fd530535412df6ffdc00 10.129.51.30:7731@17731 master - 0 1646366977611 60 connected 0-5460
红色的一条就是我之前在迁移中失误操作造成的

pod启动后还会报错信息为:

java.lang.IllegalArgumentException: Illegal character in scheme name at index 0: []r[]e[]d[]i[]s[]:[]/[]/[]:[]0[]
红色的一条节点信息,是由于之前redis失误命令为:

[root@ht20 redis]#./redis-trib.rb del-node 10.129.51.30:7735 10.129.51.30
  
  正确命令应该为: 后面是 node_id
  [root@ht20 redis]#./redis-trib.rb del-node 10.129.51.30:7735 10.129.51.30 32ee19af1f6a534c4014b9c41d387666f049354b

  2、cluster forget命令操作,中间影响信息的部分处理掉了。

[root@ht20 data]# vi /data/redis_fpmai1/redis/data/nodes.conf   //查看master1的集群配置文件
d46f032ea50763de8353fd530535412df6ffdc00 10.129.51.30:7731@17731 slave
c3c7ba2d0709121e69c2881724a0c5be903a4a6a 10.129.51.30:7736@17736 slave
91b7f8c79c91c7edd77458c332f0b9299bdb94d4 10.129.51.30:7732@17732 myself,master - 5461-10922
d1c7d99e13a2d7317baf883dffa906470a606641 10.129.51.30:7733@17733 master - 10923-16383
27f7e8dede5b68581486ce8cefdd656032baed70 :0@0 master,fail,noaddr - 1646368054015 1646368054015 4 disconnected
421ccd9a53168359272b733869fcb8ad827aa655 10.129.51.30:7734@17734 master - 0-5460
f0e5d3d17babbce85a9290e679a626bc0bbacc93 10.129.51.30:7735@17735 slave
vars currentEpoch 64 lastVoteEpoch 64 [root@ht20 redis]# ./redis-cli -c -h 10.129.51.30 -p 7732 cluster forget 27f7e8dede5b68581486ce8cefdd656032baed70
OK
[root@ht20 data]# vi /data/redis_fpmai2/redis/data/nodes.conf //查看master2的集群配置文件
c3c7ba2d0709121e69c2881724a0c5be903a4a6a 10.129.51.30:7736@17736 slave
421ccd9a53168359272b733869fcb8ad827aa655 10.129.51.30:7734@17734 master 0-5460
f0e5d3d17babbce85a9290e679a626bc0bbacc93 10.129.51.30:7735@17735 slave
d46f032ea50763de8353fd530535412df6ffdc00 10.129.51.30:7731@17731 slave
91b7f8c79c91c7edd77458c332f0b9299bdb94d4 10.129.51.30:7732@17732 myself,master 5461-10922
d1c7d99e13a2d7317baf883dffa906470a606641 10.129.51.30:7733@17733 master 10923-16383
vars currentEpoch 64 lastVoteEpoch 64
###就会发现没有这一条了 27f7e8dede5b68581486ce8cefdd656032baed70 :0@0 master,fail,noaddr - 1646368054015 1646368054015 4 disconnected
1、注意cluster forget 只针对当前的主和当前的从起作用。
2、我依次处理掉其他master ,一共3个master
//对三个master都要进行处理,否则会有残留信息。
[root@ht20 redis]# ./redis-cli -c -h 10.129.51.30 -p 7733 cluster forget 27f7e8dede5b68581486ce8cefdd656032baed70
OK
[root@ht20 redis]# ./redis-cli -c -h 10.129.51.30 -p 7732 cluster forget 27f7e8dede5b68581486ce8cefdd656032baed70 
OK
[root@ht20 redis]# ./redis-cli -c -h 10.129.51.30 -p 7733 cluster forget 27f7e8dede5b68581486ce8cefdd656032baed70
OK

3、程序执行正常,但是会出现 No reachable node in cluster(这个意思很怪异,如果你刚接触redis,会蒙的,怎么会是不能到达节点,集群中的)
  经过多方查找这个错误,最终确定是由于在程序中jredis没有改配置中心的配置文件的ip信息,开发人员只修改了redisson即连接池的信息,
但是没有修改jredis的ip端口信息导致jredis连接不上redis集群,报错为: No reachable node in cluster 详细说下排查过程
 我们配置中心采用config-->eureka-->应用-->redis集群

[root@master-web-38 src]# kubectl exec -ti us-node-0 -- /bin/bash  //进入master ping 外网也没有问题

[root@uts-node-0:/# kubectl cp us-node-0:/app.jar /usr/local/src    //把程序包app.jar下载之后,改成app.zip,查看里面内容
里面lib下的java jar包进行破解,利用工具为 http://java-decompiler.github.io/#jd-gui-download 
破解lib包里面的redission-redisson-3.6.5.jar和spring-data-redis-2.0.6.RELEASE.jar后跟踪到提示信息。

说明如下
1、程序端采用了redission连接池和spring支持的jredis客户端
2、redisson-3.6.5.jar //java客户端连接池,检查没有问题。
3、spring-data-redis-2.0.6.RELEASE.jar  //客户端的jredis支持。

最终跟踪pod日志报错,发现提示set错误,跟踪连接池一直到jredis显示报错

public Jedis getConnection() {
List<JedisPool> pools = this.cache.getShuffledNodesPool();
for (JedisPool pool : pools) {
Jedis jedis = null;
try {
jedis = pool.getResource();
if (jedis == null)
continue;
String result = jedis.ping();
if (result.equalsIgnoreCase("pong"))
return jedis;
jedis.close();
} catch (JedisException ex) {
if (jedis != null)
jedis.close();
}
}
 throw new JedisNoReachableClusterNodeException("No reachable node in cluster"); 
 //查到这里基本问题就确定了,明显是连接jredis连接不上,从而确定问题来自 jredis,访问集群问题.
}

//这里jredis用了集群的ping命令

登录集群服务器客户端,执行ping,演示下jredis的机制。

[root@ht20 redis]# ./redis-cli -c -h 10.129.51.30 -p 7733
10.129.51.30:7733> ping
PONG

附日志错误

org.springframework.data.redis.RedisConnectionFailureException: No reachable node in cluster; nested exception is
 redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster at redis.clients.jedis.BinaryJedisCluster.set(BinaryJedisCluster.java:77)
at org.springframework.data.redis.connection.jedis.JedisClusterStringCommands.set(JedisClusterStringCommands.java:113)
... 80 more
org.springframework.data.redis.RedisConnectionFailureException: No reachable node in cluster; nested exception
is redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
at org.springframework.data.redis.connection.jedis.JedisExceptionConverter.convert(JedisExceptionConverter.java:67)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnection(JedisSlotBasedConnectionHandler.java:57) at org.springframework.data.redis.connection.jedis.JedisClusterStringCommands.set(JedisClusterStringCommands.java:113)
... 80 more
org.springframework.data.redis.RedisConnectionFailureException: No reachable node in cluster; nested exception is
redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
at org.springframework.data.redis.connection.jedis.JedisExceptionConverter.convert(JedisExceptionConverter.java:67)
at org.springframework.data.redis.connection.jedis.JedisExceptionConverter.convert(JedisExceptionConverter.java:41)
at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44)

redis迁移第三篇(cluster forget)的更多相关文章

  1. redis介绍 (8) window 下redis的集群(cluster命令)

    前言: 前段时间我在centos上搭建过一次redis集群,那是借助ruby搭建,这次我介绍一种纯redis集群命令的方式去搭建[最后我会简单介绍ruby搭建]. redis集群搭建(三主三备): 准 ...

  2. redis集群在线迁移第二篇(redis迁移后调整主从关系,停掉14机器上的所有从节点)-实战二

    变更需求为: 1.调整主从关系,所有节点都调整到10.129.51.30机器上 2.停掉10.128.51.14上的所有redis,14机器关机 14机器下线迁移至新机房,这段时间将不能提供服务. 当 ...

  3. 【进阶之路】Redis基础知识两篇就满足(二)

    导言 大家好,我是南橘,一名练习时常两年半的java练习生,这是我在博客园的第二篇文章,当然,都是要从别处搬运过来的,不过以后新的文章也会在博客园同步发布,希望大家能多多支持^_^ 这篇文章的出现,首 ...

  4. redis —主从&&集群(CLUSTER)

    REDIS主从配置 为了节省资源,本实验在一台机器进行.即,在一台机器上启动两个端口,模拟两台机器. 机器准备: [root@adailinux ~]# cp /etc/redis.conf /etc ...

  5. SpringCloud核心教程 | 第三篇:服务注册与发现 Eureka篇

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  6. 支撑微博亿级社交平台,小白也能玩转Redis集群(实战篇)

    上篇文章<支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)>介绍了Redis集群相关原理,这篇文章将介绍Redis Cluster集群的搭建.配置,运维.扩容等具体操作 集群搭建 ...

  7. 【进阶之路】Redis基础知识两篇就满足(一)

    导言 大家好,我是南橘,一名练习时常两年半的java练习生,这是我在博客园的第一篇文章,当然,都是要从别处搬运过来的,不过以后新的文章也会在博客园同步发布,希望大家能多多支持^_^ 这篇文章的出现,首 ...

  8. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

  9. 二、Redis基本操作——String(实战篇)

    小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...

随机推荐

  1. 【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)

    问题描述 在Azure Key Vault中,我们可以从Azure门户中下载证书PEM文件到本地. 可以通过OpenSSL把PFX文件转换到PEM文件.然后用TXT方式查看内容,操作步骤如下图: Op ...

  2. LGP2891题解

    题目大意 有 \(n\) 只奶牛,\(q\) 种食物和 \(p\) 种饮料,每只奶牛喜欢一些饮料和食物,但只能那一种,求最小配对数量. 首先来看一下这道题的简化版:没有饮料,该怎么做呢? 我会!裸的二 ...

  3. 拉普拉斯特征映射(Laplacian Eigenmaps)

    1 介绍 拉普拉斯特征映射(Laplacian Eigenmaps)是一种不太常见的降维算法,它看问题的角度和常见的降维算法不太相同,是从局部的角度去构建数据之间的关系.也许这样讲有些抽象,具体来讲, ...

  4. 5月14日 python学习总结 视图、触发器、事务、存储过程、函数、流程控制、索引

    一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view t ...

  5. C#: .net序列化及反序列化 [XmlElement(“节点名称”)] [XmlAttribute(“节点属性”)] (上篇)

    .net序列化及反序列化 序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了.比如,一个计数器,数值为2,我们可以用字符串"2&qu ...

  6. leetcode210.拓扑排序

    拓扑排序能否成功,其实就是看有没有环 有环:说明环内结点互为前置,永远也不可能完成 无环:是线性的,可以完成 DFS方法 思路: 逆向思维,遍历到边界点(无邻接点相当于叶子),再不断回溯将结点加入到结 ...

  7. @RequestMapping 注解?

    该注解是用来映射一个URL到一个类或一个特定的方处理法上.

  8. 什么是 AQS ?

    AQS 是 AbustactQueuedSynchronizer 的简称,它是一个 Java 提高的底层同步工具类,用一个 int 类型的变量表示同步状态,并提供了一系列的 CAS 操作来管理这个同步 ...

  9. SpringBoot集成SpringBootDataElasticSearch

    先放出依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri ...

  10. park和unpark

    1 介绍 LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport提供的两个主要方法就是park和unpark. park译为&quo ...