讲到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
redis-cli -p  cluster replicate e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea
redis-cli -p  cluster meet
redis-cli -p  cluster replicate f63f0d52372ad8b5c414c47e9318717b6aa113cc
redis-cli -p  cluster meet
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  master -    connected -
f63f0d52372ad8b5c414c47e9318717b6aa113cc  master -    connected -
e39a73c30dfff3139242e66f8e0a41178b39e280  myself,master -    connected -
1f552bdea453caeaa64b4b33a05e4eedeb3f3dd2  slave f63f0d52372ad8b5c414c47e9318717b6aa113cc    connected
6a70a82c6f07dc4e61a97b6aee7a2994365642cc  slave fdeb68f696290a91f08a5da3b8a3c585aaa35856    connected
e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea  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  master -    connected -
f63f0d52372ad8b5c414c47e9318717b6aa113cc  master -    connected -
e39a73c30dfff3139242e66f8e0a41178b39e280  myself,master -    connected -
1f552bdea453caeaa64b4b33a05e4eedeb3f3dd2  slave f63f0d52372ad8b5c414c47e9318717b6aa113cc    connected
6a70a82c6f07dc4e61a97b6aee7a2994365642cc  slave fdeb68f696290a91f08a5da3b8a3c585aaa35856    connected

redis-cli -p  cluster nodes
e39a73c30dfff3139242e66f8e0a41178b39e280  myself,master -    connected -
1f552bdea453caeaa64b4b33a05e4eedeb3f3dd2  slave -    connected
6a70a82c6f07dc4e61a97b6aee7a2994365642cc  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的安装

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

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

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

  6. linux系统centOS7下搭建redis集群中ruby版本过低问题的解决方法

    问题描述: 在Centos7中,通过yum安装ruby的版本是2.0.0,但是如果有些应用需要高版本的ruby环境,比如2.2,2.3,2.4... 那就有点麻烦了,譬如:我准备使用redis官方给的 ...

  7. Bash实践:抽样检测数据迁移至Redis集群后的数据一致性

    熟悉了一段时间的Bash编程,因此借此任务操作一把bash编程,主要涉及到Redis单节点与Redis集群的操作 1. 任务背景 近日有个任务需要将历史的Redis(主从节点)中的数据迁移至Redis ...

  8. [个人翻译]Redis 集群教程(上)

    官方原文地址:https://redis.io/topics/cluster-tutorial  水平有限,如果您在阅读过程中发现有翻译的不合理的地方,请留言,我会尽快修改,谢谢.        这是 ...

  9. redis集群之REDIS CLUSTER

    redis集群之REDIS CLUSTER 时间 2016-04-11 17:05:00  NoSQL_博客园 原文  http://www.cnblogs.com/zhanchenjin/p/537 ...

随机推荐

  1. Javascript中event.srcElement和event.target的区别

    event.srcElement 可以捕获当前事件作用的对象,如event.srcElement.tagName可以捕获活动标记名称.注意获取的标记都以大写表示,如"TD",&qu ...

  2. 国外程序员整理的 C++ 资源大全(转)

    原文:http://www.csdn.net/article/2014-10-24/2822269-c 关于 C++ 框架.库和资源的一些汇总列表,由 fffaraz发起和维护. 内容包括:标准库.W ...

  3. 打造强大的BaseModel(2):让Model实现自动映射,将字典转化成Model

    打造强大的BaseModel(1):让Model自我描述 这篇文章将讲述Model一项更高级也最常用的功能,让Model实现自动映射–将字典转化成Model(所有代码全由Swift实现) 将JSON转 ...

  4. (转载)关于ArrayList的5道面试题

    我以面试官的身份参加过很多Java的面试,以下是五个比较有技巧的问题,我发现有些初级到中级的Java研发人员在这些问题上没有完全弄明白,似懂非懂.所以我写了一篇相关的文章,帮助初级Java研发人员弄清 ...

  5. 利用CSP探测网站登陆状态

    0x00 背景 今天看到zone里有同学发帖说了探测支付宝登录状态的帖子:http://zone.wooyun.org/content/17665 由此我想到了我们parsec的@/fd 半年前提到的 ...

  6. nginx配置之深入理解

    继上一篇<debian+nginx配置初探--php环境.反向代理和负载均衡>成功之后,有点小兴奋,终于不用整lvs那么复杂来搞定负载,但还是有很多概念没弄清楚. 什么是CGI.FastC ...

  7. java画按钮的边框

    import javax.swing.*;import java.awt.*;public class demo_4{    public static void main(String [] arg ...

  8. C/C++结构体成员偏移量获取

    分析代码节选自muduo. 以下代码通过offsetof获取sin_family在sockaddr_in6中的字段偏移量. static_assert(offsetof(sockaddr_in6, s ...

  9. zepto.min.js

    /* Zepto v1.1.3 - zepto event ajax form ie - zeptojs.com/license */var Zepto=function(){function L(t ...

  10. Windows 10 替换 cmd 的命令行工具

    最近找 Windows 10 的命令行工具,发现了 Windows 自带的 PowerShell ,确实功能强大.推荐. 查找方法:搜索,PowserShell, 打开就能用. https://www ...