前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis Cluster 4.0.X版本reshard报错

Redis Cluster 4.0.X版本reshard报错

原创
作者头像
夜半钟鸣
修改2021-02-09 16:43:38
1.1K1
修改2021-02-09 16:43:38
举报
文章被收录于专栏:小树洞

错误信息

代码语言:javascript
复制
 Do you want to proceed with the proposed reshard plan (yes/no)? yes
 ......
 Moving slot 5796 from redis02:7003 to 170.101.103.4:7010: 
 Moving slot 5797 from redis02:7003 to 170.101.103.4:7010: 
 Moving slot 5798 from redis02:7003 to 170.101.103.4:7010: 
 [ERR] Calling MIGRATE: ERR Syntax error, try CLIENT (LIST | KILL | GETNAME | SETNAME | PAUSE | REPLY)

背景

Redis 版本 :4.0.1 ruby gem redis 版本:4.0.1

原因

版本bug,官方已确认 https://github.com/antirez/redis/issues/5029

解决方案

  • 查看redis插件版本,卸载4.0.X版本的
代码语言:javascript
复制
 gem list|grep redis
 gem uninstall redis
  • 安装3.X版本的,例如
代码语言:javascript
复制
 gem install redis -v 3.3.5 

slots migrating importing状态消除

错误信息

代码语言:javascript
复制
 [WARNING] Node redis01:7010 has slots in importing state (5798).
 [WARNING] Node 170.101.103.70:7003 has slots in migrating state (5798).
 [WARNING] The following slots are open: 5798

解决办法 分别连入7010和7003节点,执行:

代码语言:javascript
复制
 cluster setslot 5798 stable

之后遇到的问题

[ERR] Sorry, can't connect to node

执行gem list|grep redis 发现redis插件有2个版本为3.0.0和4.0.1,执行gem uninstall redis卸载4.0.1版本后,执行redis-trib.rb提示无法连接节点 报错信息

代码语言:javascript
复制
 $ redis-trib.rb reshard redis01:7004
 [ERR] Sorry, can't connect to node redis01:7004

原因 redis集群设置了密码,但3.x版本的不支持带密码验证的访问(不确定)

解决办法 修改如下文件,修改:password项为集群密码,这里为passwd1234。文件位置可能不太一样,通过find命令寻找。

代码语言:javascript
复制
 # vi /usr/local/lib/ruby/gems/2.5.0/gems/redis-3.0.0/lib/redis/client.rb
 ​
 require "redis/errors"
 ​
 class Redis
   class Client
 ​
     DEFAULTS = {
       :scheme => "redis",
       :host => "127.0.0.1",
       :port => 6379,
       :path => nil,
       :timeout => 5.0,
       :password => "passwd1234",
       :db => 0,
     }

:此办法不能避免下面的NOAUTH Authentication required报错

[ERR] NOAUTH Authentication required

执行redis-trib.rb reshard到5798槽的时候报错 报错信息

代码语言:javascript
复制
 [ERR] Calling MIGRATE: ERR Target instance replied with error: NOAUTH Authentication required.

原因 节点间存在密码验证,3.x版本密码兼容性不OK

解决办法 临时注释掉所有节点(主节点&从节点)的requirepassmasterauth,例如

代码语言:javascript
复制
 redis-cli -h redis01 -p 7005 -a passwd1234 -c config set requirepass ""
 redis-cli -h redis01 -p 7005 -a passwd1234 -c config set masterauth ""

可以编写脚本执行

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 错误信息
  • 背景
  • 原因
  • 解决方案
  • slots migrating importing状态消除
  • 之后遇到的问题
    • [ERR] Sorry, can't connect to node
      • [ERR] NOAUTH Authentication required
      相关产品与服务
      云数据库 Redis®
      腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档