4

Redis 版本:3.2.10

ioredis 版本:3.1.4

最近我测试了在redis集群上运行resharding操作,同时集群处于相当高的负载下,客户端使用ioredis node.js库,偶尔在客户端上我们在reshard操作期间看到以下错误。

Too many Cluster redirections. Last error: ReplyError: MOVED 8155 172.31.37.232:6379.
Error: Too many Cluster redirections. Last error: ReplyError: MOVED 8155 172.31.37.232:6379
at Cluster.handleError (/data/api/node_modules/ioredis/lib/cluster/index.js:554:30)
at Command.command.reject (/data/api/node_modules/ioredis/lib/cluster/index.js:444:13)
at Redis.exports.returnError (/data/api/node_modules/ioredis/lib/redis/parser.js:75:18)
at JavascriptReplyParser.returnError (/data/api/node_modules/ioredis/lib/redis/parser.js:25:13)
at JavascriptReplyParser.run (/data/api/node_modules/redis-parser/lib/javascript.js:135:18)
at JavascriptReplyParser.execute (/data/api/node_modules/redis-parser/lib/javascript.js:112:10)
at Socket.<anonymous> (/data/api/node_modules/ioredis/lib/redis/event_handler.js:107:22)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:548:20)

我目前对 ioredis 的以下选项使用默认值: maxRedirections 16 retryDelayOnFailover 100ms

这是否意味着在重新分片期间,插槽数据的传输时间超过 1600 毫秒?

我大致知道迁移插槽的过程如下:

  1. 使用 CLUSTER SETSLOT IMPORTING 将目标节点槽设置为导入状态。
  2. 使用 CLUSTER SETSLOT MIGRATING 将源节点槽设置为迁移状态。
  3. 使用 CLUSTER GETKEYSINSLOT 命令从源节点获取密钥,并使用 MIGRATE 命令将它们移动到目标节点。
  4. 在源或目标中使用 CLUSTER SETSLOT NODE。

但是在上述哪些步骤中,客户端将无法获取或设置关键数据?

对于上下文,在此测试期间,每个节点的操作速度高达 100k 操作/秒。

4

0 回答 0