Redis Cluster在线迁移

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:

由于之前的redis cluster物理硬件性能不足。决定升级到更好的服务器上。
考虑到redis是核心生产数据库,决定在线迁移,迁移过程,不中断服务。

下面是测试环境的完成迁移步骤:
1. 原环境(测试环境,没有创建slave)

1
2
3
10.21.14.251:7000
10.21.14.251:7001
10.21.14.251:7002

2. 在新主机上,启动三个redis实例

1
2
3
10.21.10.120:7000
10.21.10.120:7001
10.21.10.120:7002

3. 将三个redis,都添加到集群中. 命令格式redis-trib.rb add-node <新增节点名> < 原集群节点名>

1
2
3
./redis-trib.rb  add -node  10.21.10.120:7000  10.21.14.251:7000
./redis-trib.rb  add -node  10.21.10.120:7001  10.21.14.251:7000
./redis-trib.rb  add -node  10.21.10.120:7002  10.21.14.251:7000

4. 确认添加成功之后,开始reshard slot

1
./redis-trib.rb reshard 10.21.10.120:7000

5. 遇到点问题,由于网络超时等原因,导致resharding中断。然后出现两边都有slot的情况,需要通过fix的方式来修复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[redis@ip-10-21-14-251 redis]$ ./redis-trib.rb reshard 10.21.10.120:7000
>>> Performing Cluster  Check  (using node 10.21.10.120:7000)
M: 4422ab38377fa8828e0f7884570b3b482a66496b 10.21.10.120:7000
    slots:5026-5460 (435 slots) master
    0 additional replica(s)
M: 5b38e63a1091baa3a871a52275489a2aa1d28bfb 10.21.10.120:7002
    slots:894-3397 (2504 slots) master
    0 additional replica(s)
M: bb1572074d41254e5b4d5aae5c52e54f5129d6d5 10.21.14.251:7001
    slots:3398-4999,5461-15922 (12064 slots) master
    0 additional replica(s)
M: 396a7fbd2ec61752f9e848a1d8cc7b405aef0356 10.21.14.251:7000
    slots: (0 slots) master
    0 additional replica(s)
M: 9f215e7e4b511f3d2bbf5d734731899b71a62a3b 10.21.10.120:7001
    slots:0-893,5000-5025,15923-15948 (946 slots) master
    0 additional replica(s)
M: 0c9b383f65ae4fefc5e02617fb76a845d7510a53 10.21.14.251:7002
    slots:15949-16383 (435 slots) master
    0 additional replica(s)
[OK]  All  nodes agree about slots configuration.
>>>  Check  for  open  slots...
[WARNING] Node 10.21.10.120:7002 has slots  in  importing state (3398).
[WARNING] Node 10.21.14.251:7001 has slots  in  migrating state (3398).
[WARNING] The following slots are  open : 3398
>>>  Check  slots coverage...
[OK]  All  16384 slots covered.
*** Please fix your cluster problems before resharding     <<<<<<<<<<<<<<<<<<<<<

6. 可以使用下面命令进行集群检查

1
./redis-trib.rb  check  10.21.10.120:7000

7. 执行下面命令进行修复,然后就可以继续reshard slot了

1
./redis-trib.rb fix 10.21.10.120:7000

8. 全部slot迁移完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ ./redis-trib.rb  check  10.21.10.120:7000
>>> Performing Cluster  Check  (using node 10.21.10.120:7000)
M: 4422ab38377fa8828e0f7884570b3b482a66496b 10.21.10.120:7000
    slots:3399-4999,5026-7332 (3908 slots) master
    0 additional replica(s)
M: 5b38e63a1091baa3a871a52275489a2aa1d28bfb 10.21.10.120:7002
    slots:894-3398,7333-15332,15949-16383 (10940 slots) master
    0 additional replica(s)
M: bb1572074d41254e5b4d5aae5c52e54f5129d6d5 10.21.14.251:7001
    slots: (0 slots) master
    0 additional replica(s)
M: 396a7fbd2ec61752f9e848a1d8cc7b405aef0356 10.21.14.251:7000
    slots: (0 slots) master
    0 additional replica(s)
M: 9f215e7e4b511f3d2bbf5d734731899b71a62a3b 10.21.10.120:7001
    slots:0-893,5000-5025,15333-15948 (1536 slots) master
    0 additional replica(s)
M: 0c9b383f65ae4fefc5e02617fb76a845d7510a53 10.21.14.251:7002
    slots: (0 slots) master
    0 additional replica(s)
[OK]  All  nodes agree about slots configuration.
>>>  Check  for  open  slots...
>>>  Check  slots coverage...
[OK]  All  16384 slots covered.

确认一下状态

1
2
3
4
5
6
7
[redis@ip-10-21-14-251 redis]$ ./redis-cli -p 7000 cluster nodes
bb1572074d41254e5b4d5aae5c52e54f5129d6d5 10.21.14.251:7001 master - 0 1509611814919 6 connected
9f215e7e4b511f3d2bbf5d734731899b71a62a3b 10.21.10.120:7001 master - 0 1509611811917 14 connected 0-893 5000-5025 15333-15948
5b38e63a1091baa3a871a52275489a2aa1d28bfb 10.21.10.120:7002 master - 0 1509611815923 13 connected 894-3398 7333-15332 15949-16383
396a7fbd2ec61752f9e848a1d8cc7b405aef0356 10.21.14.251:7000 myself,master - 0 0 1 connected
4422ab38377fa8828e0f7884570b3b482a66496b 10.21.10.120:7000 master - 0 1509611813919 12 connected 3399-4999 5026-7332
0c9b383f65ae4fefc5e02617fb76a845d7510a53 10.21.14.251:7002 master - 0 1509611812917 3 connected

9. 确认状态OK的话,开始删除节点

1
2
3
  ./redis-trib.rb del-node 10.21.14.251:7000 396a7fbd2ec61752f9e848a1d8cc7b405aef0356
  ./redis-trib.rb del-node 10.21.14.251:7001 bb1572074d41254e5b4d5aae5c52e54f5129d6d5
  ./redis-trib.rb del-node 10.21.14.251:7002 0c9b383f65ae4fefc5e02617fb76a845d7510a53

10. 干掉10.21.14.251:7002成功,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  [redis@ip-10-21-14-251 redis]$ ./redis-trib.rb del-node 10.21.14.251:7002 0c9b383f65ae4fefc5e02617fb76a845d7510a53
>>> Removing node 0c9b383f65ae4fefc5e02617fb76a845d7510a53  from  cluster 10.21.14.251:7002
>>> Sending CLUSTER FORGET messages  to  the cluster...
>>> SHUTDOWN the node.
[envuser@ip-10-21-14-251 redis]$ ./redis-trib.rb  check  10.21.10.120:7000
>>> Performing Cluster  Check  (using node 10.21.10.120:7000)
M: 4422ab38377fa8828e0f7884570b3b482a66496b 10.21.10.120:7000
    slots:3399-4999,5026-7332 (3908 slots) master
    0 additional replica(s)
M: 5b38e63a1091baa3a871a52275489a2aa1d28bfb 10.21.10.120:7002
    slots:894-3398,7333-15332,15949-16383 (10940 slots) master
    0 additional replica(s)
M: bb1572074d41254e5b4d5aae5c52e54f5129d6d5 10.21.14.251:7001
    slots: (0 slots) master
    0 additional replica(s)
M: 396a7fbd2ec61752f9e848a1d8cc7b405aef0356 10.21.14.251:7000
    slots: (0 slots) master
    0 additional replica(s)
M: 9f215e7e4b511f3d2bbf5d734731899b71a62a3b 10.21.10.120:7001
    slots:0-893,5000-5025,15333-15948 (1536 slots) master
    0 additional replica(s)
[OK]  All  nodes agree about slots configuration.
>>>  Check  for  open  slots...
>>>  Check  slots coverage...
[OK]  All  16384 slots covered.

状态检查

1
2
3
4
5
6
[redis@ip-10-21-14-251 redis]$ ./redis-cli -p 7000 cluster nodes
bb1572074d41254e5b4d5aae5c52e54f5129d6d5 10.21.14.251:7001 master - 0 1509611900094 6 connected
9f215e7e4b511f3d2bbf5d734731899b71a62a3b 10.21.10.120:7001 master - 0 1509611902100 14 connected 0-893 5000-5025 15333-15948
5b38e63a1091baa3a871a52275489a2aa1d28bfb 10.21.10.120:7002 master - 0 1509611901098 13 connected 894-3398 7333-15332 15949-16383
396a7fbd2ec61752f9e848a1d8cc7b405aef0356 10.21.14.251:7000 myself,master - 0 0 1 connected
4422ab38377fa8828e0f7884570b3b482a66496b 10.21.10.120:7000 master - 0 1509611899093 12 connected 3399-4999 5026-7332

根据上面步骤,删除剩余节点即可。
经过测试,应用在迁移过程中,没有受到任何影响。但是应用连接池的IP需要找机会增加10.21.10.120。










本文转自 hsbxxl 51CTO博客,原文链接:http://blog.51cto.com/hsbxxl/1978491,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
326 2
|
1月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
204 5
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
238 4
|
存储 NoSQL 算法
深入理解Redis分片Cluster原理
本文深入探讨了Redis Cluster的分片原理,作为Redis官方提供的高可用性和高性能解决方案,Redis Cluster通过数据分片和横向扩展能力,有效降低单个主节点的压力。
深入理解Redis分片Cluster原理
|
NoSQL 安全 容灾
阿里云DTS踩坑经验分享系列|Redis迁移、同步
阿里云数据传输服务DTS在帮助用户迁移Redis数据、同步数据时,在某些复杂场景下会出现报错,或者源库与目标库数据不一致的问题,给用户带来困扰。本文介绍了DTS Redis到Redis迁移、同步过程中的典型问题,以帮助用户更好地使用DTS。
1244 2
|
NoSQL 安全 Redis
AWS迁移教程,Redis迁移到Elasticache
AWS迁移教程,Redis迁移到Elasticache
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Azure Redis Cluster 在增加分片数时失败分析
【Azure Redis 缓存】Azure Redis Cluster 在增加分片数时失败分析
124 0
|
缓存 开发框架 NoSQL
【Azure Redis 缓存】VM 里的 Redis 能直接迁移到 Azure Cache for Redis ? 需要改动代码吗?
【Azure Redis 缓存】VM 里的 Redis 能直接迁移到 Azure Cache for Redis ? 需要改动代码吗?
152 0
|
缓存 NoSQL Redis
【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)
【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)
128 0
|
缓存 NoSQL Redis
【Azure Redis 缓存】Azure Cache for Redis 如何迁移
【Azure Redis 缓存】Azure Cache for Redis 如何迁移
111 0