讲到redis的迁移,一般会使用rdb或者aof在主库做自动重载到目标库方法。但该方法有个问题就是无法保证源节点数据和目标节点数据保持一致,一般线上环境也不允许源库停机,所以要在迁移过程后还要实现同步达到数据的一致性。公司线上环境使用的是redis自己的cluster,每个节点都拥有多个rdb和aof文件,使用原始方法无疑是难上加难。本文主要讨论两种方法来实现不停机源库前提下,实现源库(redis cluster)到目标库(cluster或者单实例)的迁移:
  • 采用redis replication实现
  • 使用开源同步开源工具
方法一:通过redis复制机制,将目标节点作为源节点的从节点,然后关闭源节点,进行主从自动fail over,最后再关闭并删除源节点实例
1.运行环境:
源节点实例:127.0.0.1:12000/127.0.0.1:12001/127.0.0.1:12002
[root@10_86_30_37_10.86.30.37 mycluster_export1]# redis-cli -p 12000 cluster nodes
e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea 127.0.0.1:12000 myself,master - 0 0 1 connected 0-5000
f63f0d52372ad8b5c414c47e9318717b6aa113cc 127.0.0.1:12001 master - 0 1463025774035 2 connected 5001-10000
fdeb68f696290a91f08a5da3b8a3c585aaa35856 127.0.0.1:12002 master - 0 1463025775037 0 connected 10001-16383
迁移目标节点实例:
127.0.0.1:13000/127.0.0.1:13001/127.0.0.1:13002
2.迁移过程
  • 启动三个目标节点,配置了redis集群模式的实例
redis-server redis13000.conf
redis-server redis13001.conf
redis-server redis13002.conf
  • 将这三个节点做已有集群实例的slave
redis-cli -p  cluster meet 127.0.0.1
redis-cli -p cluster replicate e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea
redis-cli -p cluster meet 127.0.0.1
redis-cli -p cluster replicate f63f0d52372ad8b5c414c47e9318717b6aa113cc
redis-cli -p cluster meet 127.0.0.1
redis-cli -p cluster replicate fdeb68f696290a91f08a5da3b8a3c585aaa35856
  • 查看集群情况:
redis-cli -p  cluster slots
) ) (integer)
) (integer)
) ) "127.0.0.1"
) (integer)
) ) "127.0.0.1"
) (integer)
) ) (integer)
) (integer)
) ) "127.0.0.1"
) (integer)
) ) "127.0.0.1"
) (integer)
) ) (integer)
) (integer)
) ) "127.0.0.1"
) (integer)
) ) "127.0.0.1"
) (integer)
  • 将其中一个主节点下线,10s后观察情况:
redis-cli -p  shutdown
redis-cli -p cluster nodes
fdeb68f696290a91f08a5da3b8a3c585aaa35856 127.0.0.1: master - connected -
f63f0d52372ad8b5c414c47e9318717b6aa113cc 127.0.0.1: master - connected -
e39a73c30dfff3139242e66f8e0a41178b39e280 127.0.0.1: myself,master - connected -
1f552bdea453caeaa64b4b33a05e4eedeb3f3dd2 127.0.0.1: slave f63f0d52372ad8b5c414c47e9318717b6aa113cc connected
6a70a82c6f07dc4e61a97b6aee7a2994365642cc 127.0.0.1: slave fdeb68f696290a91f08a5da3b8a3c585aaa35856 connected
e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea 127.0.0.1: master,fail - disconnected
  • 删除已经下线的主节点,一个一个操作,操作中间检查操作是否成功,因为留言协议和failover需要一段时间
redis-cli -p  cluster forget e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea
redis-cli -p cluster forget e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea
redis-cli -p cluster forget e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea
redis-cli -p cluster nodes
fdeb68f696290a91f08a5da3b8a3c585aaa35856 127.0.0.1: master - connected -
f63f0d52372ad8b5c414c47e9318717b6aa113cc 127.0.0.1: master - connected -
e39a73c30dfff3139242e66f8e0a41178b39e280 127.0.0.1: myself,master - connected -
1f552bdea453caeaa64b4b33a05e4eedeb3f3dd2 127.0.0.1: slave f63f0d52372ad8b5c414c47e9318717b6aa113cc connected
6a70a82c6f07dc4e61a97b6aee7a2994365642cc 127.0.0.1: slave fdeb68f696290a91f08a5da3b8a3c585aaa35856 connected redis-cli -p cluster nodes
e39a73c30dfff3139242e66f8e0a41178b39e280 127.0.0.1: myself,master - connected -
1f552bdea453caeaa64b4b33a05e4eedeb3f3dd2 127.0.0.1: slave - connected
6a70a82c6f07dc4e61a97b6aee7a2994365642cc 127.0.0.1: slave - connected
3.重点细节:
  • 删除的主节点,如果重新启动,他自身会重新加载集群配置文件,造成集群混乱,建议如果想重启该实例,删掉集群配置文件,进行重新配置。
  • 必须先关闭master节点后,再删除。一次不能将所有实例都关闭,逐个操作,否则会造成整个集群down掉
  • 删除forget节点时,要在所有其他节点上执行cluster forget 命令,貌似这个命令不会通过留言协议传播到所有节点

redis集群同步迁移方法(一):通过redis replication实现的更多相关文章

  1. redis集群同步迁移方法(二):通过redis-migrate-tool实现

    前篇介绍的redis replication方法,操作步骤多,而且容易出错.在git上看到一些开源工具也能实现同步迁移功能,而且步骤简单,比如redis-port,redis-migrate-tool ...

  2. Spring集成Redis集群(含spring集成redis代码)

    代码地址如下:http://www.demodashi.com/demo/11458.html 一.准备工作 安装 Redis 集群 安装参考: http://blog.csdn.net/zk6738 ...

  3. Redis集群迁移

    1:开发中断程序,登录各个主节点查看key信息 INFO # Keyspace db0:keys,expires,avg_ttl # Keyspace db0:keys,expires,avg_ttl ...

  4. Redis集群同步问题

    之前被面试官问到:Redis集群中主从数据同步是从库异步读取主库,那么Redis集群其他主与主之间的数据是怎么共享的呢?或者说是怎么同步的? emmmm……当时我就懵逼了,这不是考试范围啊卧槽~只能老 ...

  5. springBoot2.*使用redis集群/单机方法

    在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce. 此处springboot2.x,所以使用的是Lettuce.关于jedis跟 ...

  6. Redis集群(二):Redis的安装

    官方网站:http://redis.io/ 本系列撒使用的版本是:3.0.0 一.安装必要包 yum -yinstall gcc 二.linux下安装及使用(wget下载到当前目录) redis-3. ...

  7. <正则吃饺子> :关于redis集群的搭建、集群测试、搭建中遇到的问题总结

    项目中使用了redis ,对于其基本的使用,相对简单些,根据项目中已经提供的工具就可以实现基本的功能,但是只是这样的话,对于redis还是太肤浅,甚至刚开始时候,集群.多节点.主从是什么,他们之间是什 ...

  8. Redis集群搭建的三种方式

    一.Redis主从 1.1 Redis主从原理 和MySQL需要主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生性能瓶颈,特别是在读压力上,为了分担压力,Redis支持主从复制. ...

  9. redis集群数据迁移

    redis集群数据备份迁移方案 n  迁移环境描述及分析 当前我们面临的数据迁移环境是:集群->集群. 源集群: 源集群为6节点,3主3备 主 备 192.168.112.33:8001 192 ...

随机推荐

  1. IO:File类(java.io.File)

    public class File extends Object implements Serializable, Comparable<File> 构造方法: public File(S ...

  2. Python 常用函数

    字符串->数字: float(str) int(str) 十六进制字符串转int: 不带0x前缀: x = int('dead',16) 带0x前缀: x = int('0xff', 0) 其中 ...

  3. 深入浅出SQL Server中的死锁

    简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的.理解死锁首先需要对死锁所涉及的相关观念有一个理解. 一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理 ...

  4. myeclipse编译、输出

    在项目上点右键:run--run configuration, 选择左边的“compile GWT Application”,新建一个编译配置,然后选右下角的run.

  5. 关于使用TP-Link桥接小米路由器

    家里因为有个小卧室,小卧室的写字台上面放了一台台式电脑,而我又不想用台式电脑牵一条长线到客厅的网口或者路由器上面,因为太麻烦,所以我使用了TPLink的无线USB插在了我的主机USB上,略去TPLIN ...

  6. ElasticSearch优化配置

    ################################################################### /etc/elasticsearch/elasticsearch ...

  7. OAF_开发系列22_实现OAF条形码BarCode

    20150717 Created By BaoXinjian

  8. 主席树入门(区间第k大)

    主席树入门 时隔5个月,我又来填主席树的坑了,现在才发现学算法真的要懂了之后,再自己调试,慢慢写出来,如果不懂,就只会按照代码敲,是不会有任何提升的,都不如不照着敲. 所以搞算法一定要弄清原理,和代码 ...

  9. 关于Failed to install helloworld.apk on device 'emulator-5554!的一个解决办法

    好不容易架好了android环境,把该安得都安好了,结果发现在安装过程中创建一个虚拟设备映象就占用了c盘34g的空间,我的系统盘差点瘫了,看来以后就只能先用这一个虚拟设备调试了, 接着说上边这个问题, ...

  10. PCB设计中的20H原则

    20H原则是指电源层相对地层内缩20H的距离,当然也是为抑制边缘辐射效应.在板的边缘会向外辐射电磁干扰.将电源层内缩,使得电场只在接地层的范围内传导.有效的提高了EMC.若内缩20H则可以将70%的电 ...