迁移数据库分片
如何将数据库分片迁移到Redis软件集群中的其他节点。
要将数据库分片迁移到集群中的其他节点,您可以使用rladmin migrate
命令或REST API请求。
分片迁移的使用案例
在以下情况下将数据库分片迁移到不同的节点:
-
节点移除之前。
-
在出现延迟问题或节点间负载分布不均的情况下,手动平衡数据库。
-
管理节点资源,例如内存使用情况。
分片迁移的注意事项
对于具有复制的数据库:
-
迁移分片不会造成中断,因为主分片仍然可用。
-
如果您尝试迁移主分片,它将被降级为副本分片,并且在迁移之前,一个副本分片将被提升为主分片。如果您在请求中设置
"preserve_roles": true
,迁移完成后将发生第二次故障转移,以将迁移的分片的角色更改回主分片。
对于没有复制的数据库,迁移的分片在迁移完成之前将不可用。
在任何情况下,连接的客户端都不应断开。
如果在同一节点上放置了太多主分片,可能会影响数据库性能。
迁移特定分片
要迁移特定的数据库分片,请使用以下方法之一:
-
rladmin migrate shard
target_node -
迁移分片 REST API 请求:
在请求路径中指定要迁移的分片的ID,并在请求体中指定目标节点的ID作为
target_node_uid
。有关更多选项,请参阅请求参考。POST /v1/shards/
/actions/migrate { "target_node_uid":示例 JSON 响应体:
{ "action_uid": "
" , "description": "迁移已触发" }您可以通过
GET /v1/actions/
请求跟踪操作的进度。
迁移多个分片
要迁移多个数据库分片,请使用以下方法之一:
-
rladmin migrate shard
target_node -
迁移多个分片 REST API 请求:
在请求体中指定要迁移的分片的ID在
shard_uids
列表中,并将目标节点的ID指定为target_node_uid
。查看请求参考以获取更多选项。POST /v1/shards/actions/migrate { "shard_uids": ["
" ,"" ,"" ], "target_node_uid":示例 JSON 响应体:
{ "action_uid": "
" , "description": "迁移已触发" }您可以通过
GET /v1/actions/
请求跟踪操作的进度。
从节点迁移所有分片
要将所有分片从特定节点迁移到另一个节点,请运行rladmin migrate all_shards
:
rladmin migrate node <origin_node_id> all_shards target_node <node_id>
迁移主分片
您可以使用rladmin migrate all_master_shards
命令将特定数据库或节点的所有主分片迁移到集群中的另一个节点。
迁移特定数据库的主分片:
rladmin migrate db db:<id> all_master_shards target_node <node_id>
要将所有主分片从特定节点迁移:
rladmin migrate node <origin_node_id> all_master_shards target_node <node_id>
迁移副本分片
你可以使用rladmin migrate all_slave_shards
命令将特定数据库或节点的所有副本分片迁移到集群中的另一个节点。
迁移特定数据库的副本分片:
rladmin migrate db db:<id> all_slave_shards target_node <node_id>
要从特定节点迁移所有副本分片:
rladmin migrate node <origin_node_id> all_slave_shards target_node <node_id>