Redis Cluster在线迁移

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

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

10.21.14.251:7000
10.21.14.251:7001
10.21.14.251:7002

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

10.21.10.120:7000
10.21.10.120:7001
10.21.10.120:7002

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

./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

./redis-trib.rb reshard 10.21.10.120:7000

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

[[email protected] 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. 可以使用下面命令进行集群检查

./redis-trib.rb check 10.21.10.120:7000

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

./redis-trib.rb fix 10.21.10.120:7000

8. 全部slot迁移完成

$ ./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.

确认一下状态

[[email protected] 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的话,开始删除节点

 ./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成功,

 [[email protected] 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.
[[email protected] 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.

状态检查

[[email protected] 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。

更多链接,请参考:

Redis Cluster集群部署搭建

Redis Cluster 添加/删除  完整折腾步骤

时间: 2024-11-06 07:52:18

Redis Cluster在线迁移的相关文章

安全稳定实现redis cluster自动化迁移

背景 目前redis集群最火的是codis和redis cluster(官方),但官方自带工具并没有支持密码操作.那么需要密码认证使用redis cluster集群的同学要仔细看了哦. 相信大家很多人已经使用了redis cluster,而且也肯定会用到核心应用,你是否考虑过如下问题? redis cluster无密码,被改数据 redis cluster无密码,被flushall (你是否有要哭的冲动哈哈) redis cluster无密码,数据在光天化日(你对用户不负责) redis clu

Redis Cluster 4.0高可用集群安装、在线迁移操作记录

之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑到是线上生产环境,决定在线迁移,迁移过程,不中断服务.操作过程如下: 一.机器环境 1 2 3 4 5 6 7 8 9 10 11 12 13 迁移前机器环境 ----------------------------------------------------------------------

redis cluster 集群畅谈(三) 之 水平扩容、slave自动化迁移

上一篇http://www.cnblogs.com/qinyujie/p/9029522.html, 主要讲解 实验多master写入.读写分离.实验自动故障切换(高可用性),那么本篇我们就来聊了聊redis cluster 水平扩容以及自动化 slave 迁移. redis repliction 主从架构,一主多从更多的是为了提高 读QPS .而 redis cluster 集群中不建议或者没有说做物理的读写分离了,redis cluster 集群更强调的是通过master的水平扩容,来横向扩

redis cluster异地数据迁移,扩容,缩容

由于项目的服务器分布在重庆,上海,台北,休斯顿,所以需要做异地容灾需求.当前的mysql,redis cluster,elastic search都在重庆的如果重庆停电了,整个应用都不能用了. 现在考虑第一步做重庆和上海的异地容灾,大概测试了一下重庆的几台服务器之间大概是13m/s的传输速度也就是说100M的局域网带宽,重庆到上海只有1.2m/s的传输速度,大概10M的局域网带宽. 第一个方案先考虑简单的  mysql 重庆上海主主同步  redis cluster的master节点默认都设置在

全面剖析Redis Cluster原理和应用 (转)

1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式.异步复制.客户端重定向等设计,而牺牲了部分的一致性.使用性. 水平扩展:集群的最重要能力当然是扩展,文档中称可以线性扩展到1000结点. 可用性:在Cluster推出之前,可用性要靠Sentinel

全面剖析Redis Cluster原理和应用

全面剖析Redis Cluster原理和应用 1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式.异步复制.客户端重定向等设计,而牺牲了部分的一致性.使用性. 水平扩展:集群的最重要能力当然是扩展,文档中称可以线性扩展到1000结点. 可用性:在Cl

Redis中国用户组|唯品会Redis cluster大规模生产实践

嘉宾:陈群 很高兴有机会在Redis中国用户组给大家分享redis cluster的生产实践.目前在唯品会主要负责redis/hbase的运维和开发支持工作,也参与工具开发工作 Outline 一.生产应用场景 二.存储架构演变 三.应用最佳实践 四.运维经验总结 第1.2节:介绍redis cluster在唯品会的生产应用场景,以及存储架构的演变.第3节:redis cluster的稳定性,应用成熟度,踩到过那些坑,如何解决这些问题?这部分是大家比较关心的内容.第4节:简单介绍大规模运营的一些

Redis Cluster(Redis 3.X)设计要点

Redis 3.0.0 RC1版本10.9号发布,Release Note这个版本支持Redis Cluster,相信很多同学期待已久,不过这个版本只是RC版本,要应用到生产环境,还得等等 Redis Cluster设计要点: 架构:无中心 Redis Cluster采用无中心结构,每个节点都保存数据和整个集群的状态每个节点都和其他所有节点连接,这些连接保持活跃使用gossip协议传播信息以及发现新节点node不作为client请求的代理,client根据node返回的错误信息重定向请求 数据分

redis cluster官方集群的搭建笔记

参考文档: https://www.zybuluo.com/phper/note/195558 http://www.cnblogs.com/shihaiming/p/5949772.html http://redis.io/topics/cluster-tutorial http://xiaorui.cc 系统环境: CentOS6.7 X86_64 双机6节点: node1: 192.168.2.11 node2: 192.168.2.12 node3:192.168.2.13 redis