前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis的slot迁移

Redis的slot迁移

作者头像
一见
发布2020-08-13 11:20:31
2.9K0
发布2020-08-13 11:20:31
举报
文章被收录于专栏:蓝天蓝天

官方参考:https://redis.io/commands/cluster-setslot。示例:将值为8的slot从源节点A迁移到目标节点B。

1) 在目标节点B上执行,从节点A导入slot到节点B:

CLUSTER SETSLOT 8 IMPORTING src-A-node-id

对于迁移的slot,正常访问返回MOVED;但如果在正常访问之前先执行ASKING,则能正常处理该slot。

2) 在源节点A上执行,将节点A上的slot迁移到节点B

CLUSTER SETSLOT 8 MIGRATING dst-B-node-id

命令“SETSLOT slot MIGRATING”将slot标记为正在迁移(MIGRATING)状态。如果访问的key在源节点上存在,则正常访问;如果访问的key在源节点上不存在,则返回ASK重定向到目标节点。

如果是操作多个keys,则情况有些复杂。如果全不存在或者全存在,则和操作单key相同。但如果是部分存在,部分不存在,则返回错误“TRYAGAIN”。

注意,上列步骤1和2的执行顺序不能颠倒,目的是让目标节点先准备好接受ASK重定向命令(The order of step 1 and 2 is important. We want the destination node to be ready to accept ASK redirections when the source node is configured to redirect.)。

3) 迁移数据/数据迁移

如果是一个空集群,则这一步可以跳过省去,因为此时还没有任何需要迁移的数据。前面的步骤1和步骤2只影响新的keys,并不会自动迁移已有的keys。

已有的keys需用命令MIGRATE迁移,借助命令“CLUSTER GETKEYSINSLOT”可知道slot有哪些keys。

在源节点上执行获得需要迁移的keys(参数“count”指标一次返回多少个keys):

CLUSTER GETKEYSINSLOT slot count

源节点上执行命令MIGRATE迁移keys:

MIGRATE dest-host dest-port key|"" destination-db timeout [COPY] [REPLACE] [AUTH password] [KEYS key [key ...]]

命令“MIGRATE”的参数dest-host和dest-port为目标节点的IP和端口号,参数“REPLACE”表示迁移后删除源节点上的,而“COPY”不会删除源节点上的keys。

迁移单个key格式:

MIGRATE dest-host dest-port key destination-db timeout [COPY] [REPLACE] [AUTH password]

或者:

MIGRATE dest-host dest-port "" destination-db timeout [COPY] [REPLACE] [AUTH password] KEYS key

迁移多个keys格式:

MIGRATE dest-host dest-port "" destination-db timeout [COPY] [REPLACE] [AUTH password] [KEYS key [key ...]]

AUTH用于指定访问密码,从Redis-6.0开始,新增支持AUTH2。参数timeout用于指定超时时长,单位毫秒。

如果是一个集群对另一个集群,必须保证保证目标节点是key对应的节点。对于集群间迁移,如果多keys需保证对应的slots都在目标节点上,否则报错“CROSSSLOT Keys in request don't hash to the same slot”。

如果版本号不同,则还会遇到错误“ERR Target instance replied with error: ERR DUMP payload version or checksum are wrong”。

4) 完成迁移

上述操作只是将slot标记为迁移状态,完成迁移还需要执行(在源node和目标node上执行),将slot指派给dst-node-id指定的节点:

CLUSTER SETSLOT NODE

执行“NODE”会产生新的配置,实际上可在所有master节点上执行“NODE”,这样避免了新的配置在集群中传播,加快了配置的更新,官方说明可参见“Cluster live reconfiguration”一节。

重复执行“NODE”,会报错“ERR I'm already the owner of hash slot 1703”。

“NODE”命令中的dst-node-id为目标节点的Node ID,取消迁移和导入使用“CLUSTER SETSLOT STABLE”。

手动完成上列4步操作繁琐且容易出错,如有需要可直接使用现在的迁移工具https://github.com/eyjian/redis-tools/blob/master/move_redis_slot.sh

:跨集群的数据迁移可使用命令“redis-cli --cluster import”。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档