讲到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. Redis集群(二):Redis的安装

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

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

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

  4. redis集群之REDIS CLUSTER

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

  5. redis集群配置

    客户端分片 程序端实现 代理proxy,访问proxy,proxy指定redis保存位置. Twemproxy Redis cluster ,会造成一部分数据丢失,无中心化1.将数据自动切分(spli ...

  6. Redis集群知识解析

    redis集群在启动的时候就自动在多个节点间分好片.同时提供了分片之间的可用性:当一部分redis节点故障或网络中断,集群也能继续工作.但是,当大面积的节点故障或网络中断(比如大部分的主节点都不可用了 ...

  7. Redis集群教程(Redis cluster tutorial)

    本博文翻译自Redis官网:http://redis.io/topics/cluster-tutorial        本文档以温和的方式介绍Redis集群,不使用复杂的方式来理解分布式系统的概念. ...

  8. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  9. 打不死的redis集群

    导读 最近遇到部分系统因为redis服务挂掉,导致部分服务不可用.所以希望搭建一个redis集群镜像,把原先散落各处的redis服务器统一管理起来,并且保障高可用和故障自动迁移. 最近遇到部分系统因为 ...

随机推荐

  1. Python字符串输入输出简述

    字符串输入 Python用到的输入一般有两种方式,input() 和 raw_input() ,区别是,前者只能输入数字,后者输入的是字符串,使用如下: In [226]: help(input) H ...

  2. Java json串生成及转bean

      package com; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import j ...

  3. iOS开发-UI 从入门到精通(二)

    iOS开发-UI 从入门到精通(二)是对 iOS开发-UI 从入门到精通(一)知识点的巩固,主要以习题练习为主,增强实战经验,为以后做开发打下坚实的基础! ※开发环境和注意事项: 1.前期iOS-UI ...

  4. 了解了下 Google 最新的 Fuchsia OS

    就是看到篇报道,有点好奇,就去FQ挖了点东西回来. 我似乎已开始就抓到了重点,没错,就是 LK . LK 是 Travis Geiselbrecht 写的一个针对 ARM 的嵌入式操作系统,开源的.点 ...

  5. linux操作oracle

    1.su - oracle 2.sqlplus / as sysdba; 1.登录linux,以oracle用户登录(如果是root用户登录的,登录后用 su - oracle命令切换成oracle用 ...

  6. Lnux 16.04 VM下安装与汉化

    参考linux-公社: http://www.linuxidc.com/Linux/2016-04/130520.htm  U盘安装linux16.04 http://www.linuxidc.com ...

  7. zabbix3.0.4 部署之一 (简介)

    官方网站:http://www.zabbix.com/ 下载地址:http://www.zabbix.com/download.php zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视 ...

  8. Android入门

    在学Android,摘自<第一行代码——Android> 布局管理 通过xml文件进行布局管理. android:id="@+id/button_1" 为当前的元素定义 ...

  9. [新概念51单片机C语言教程&#183;郭天祥] 1、 基础知识必备

    目录: 单片机的大致介绍         1-1.通俗定义         1-2.51系列产品         1-3.标号意思         1-4.引脚介绍         1-5.用C语言开 ...

  10. javascript继承(六)—实现多继承

    在上一篇javascript继承—prototype最优两种继承(空函数和循环拷贝)(3) ,介绍了js较完美继承的两种实现方案,那么下面来探讨一下js里是否有多继承,如何实现多继承.在这里可以看看j ...