redis集群同步迁移方法(一):通过redis replication实现

讲到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

[[email protected]_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 13000 cluster meet 127.0.0.1 12000
redis-cli -p 13000 cluster replicate e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea
redis-cli -p 13001 cluster meet 127.0.0.1 12001
redis-cli -p 13001 cluster replicate f63f0d52372ad8b5c414c47e9318717b6aa113cc
redis-cli -p 13002 cluster meet 127.0.0.1 12002
redis-cli -p 13002 cluster replicate fdeb68f696290a91f08a5da3b8a3c585aaa35856
  • 查看集群情况:
redis-cli -p 13002 cluster slots
1) 1) (integer) 5001
   2) (integer) 10000
   3) 1) "127.0.0.1"
      2) (integer) 12001
   4) 1) "127.0.0.1"
      2) (integer) 13001
2) 1) (integer) 10001
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 12002
   4) 1) "127.0.0.1"
      2) (integer) 13002
3) 1) (integer) 0
   2) (integer) 5000
   3) 1) "127.0.0.1"
      2) (integer) 12000
   4) 1) "127.0.0.1"
      2) (integer) 13000
  • 将其中一个主节点下线,10s后观察情况:
redis-cli -p 12000 shutdown
redis-cli -p 13000 cluster nodes
fdeb68f696290a91f08a5da3b8a3c585aaa35856 127.0.0.1:12002 master - 0 1463042318423 0 connected 10001-16383
f63f0d52372ad8b5c414c47e9318717b6aa113cc 127.0.0.1:12001 master - 0 1463042319426 2 connected 5001-10000
e39a73c30dfff3139242e66f8e0a41178b39e280 127.0.0.1:13000 myself,master - 0 0 6 connected 0-5000
1f552bdea453caeaa64b4b33a05e4eedeb3f3dd2 127.0.0.1:13001 slave f63f0d52372ad8b5c414c47e9318717b6aa113cc 0 1463042317421 4 connected
6a70a82c6f07dc4e61a97b6aee7a2994365642cc 127.0.0.1:13002 slave fdeb68f696290a91f08a5da3b8a3c585aaa35856 0 1463042320429 5 connected
e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea 127.0.0.1:12000 master,fail - 1463042217663 1463042214056 1 disconnected
  • 删除已经下线的主节点,一个一个操作,操作中间检查操作是否成功,因为留言协议和failover需要一段时间
redis-cli -p 13000 cluster forget e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea
redis-cli -p 13001 cluster forget e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea
redis-cli -p 13002 cluster forget e5ce695f7c5745ca81b4239fb5666b6a71fbb4ea
redis-cli -p 13000 cluster nodes
fdeb68f696290a91f08a5da3b8a3c585aaa35856 127.0.0.1:12002 master - 0 1463043284365 0 connected 10001-16383
f63f0d52372ad8b5c414c47e9318717b6aa113cc 127.0.0.1:12001 master - 0 1463043283364 2 connected 5001-10000
e39a73c30dfff3139242e66f8e0a41178b39e280 127.0.0.1:13000 myself,master - 0 0 6 connected 0-5000
1f552bdea453caeaa64b4b33a05e4eedeb3f3dd2 127.0.0.1:13001 slave f63f0d52372ad8b5c414c47e9318717b6aa113cc 0 1463043286369 4 connected
6a70a82c6f07dc4e61a97b6aee7a2994365642cc 127.0.0.1:13002 slave fdeb68f696290a91f08a5da3b8a3c585aaa35856 0 1463043285368 5 connected

redis-cli -p 13000 cluster nodes
e39a73c30dfff3139242e66f8e0a41178b39e280 127.0.0.1:13000 myself,master - 0 0 6 connected 0-5000
1f552bdea453caeaa64b4b33a05e4eedeb3f3dd2 127.0.0.1:13001 slave - 0 1463043457854 4 connected
6a70a82c6f07dc4e61a97b6aee7a2994365642cc 127.0.0.1:13002 slave - 0 1463043458857 5 connected

3.重点细节:

  • 删除的主节点,如果重新启动,他自身会重新加载集群配置文件,造成集群混乱,建议如果想重启该实例,删掉集群配置文件,进行重新配置。
  • 必须先关闭master节点后,再删除。一次不能将所有实例都关闭,逐个操作,否则会造成整个集群down掉
  • 删除forget节点时,要在所有其他节点上执行cluster forget 命令,貌似这个命令不会通过留言协议传播到所有节点
时间: 2025-01-02 18:47:09

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

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

前篇介绍的redis replication方法,操作步骤多,而且容易出错.在git上看到一些开源工具也能实现同步迁移功能,而且步骤简单,比如redis-port,redis-migrate-tool等工具.实验演示使用redis-migrate-tool,将redis cluster 迁移到一个单实例redis中. 1.redis-migrate-tool的安装 见https://github.com/vipshop/redis-migrate-tool 需要注意的是安装redis-migra

1.22 redis集群介绍21.23/21.24 redis集群搭建配置21.25 redis集群

21.22 redis集群介绍多个redis节点网络互联,数据共享所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为.支持在线增加.删除节点客户端可以连任何一个主节点进行读写 21.23/21.24 redis集群搭建配置场景设置:两台机器,分别开启三个Redis服务(端口)A机器上三个端口7000,7002,7004,全部为主B

redis集群搭建方法

概念 首先有个概念: Redis需要半数以上投票某个节点挂掉才算挂掉,所以至少需要3个master节点,然后又需要3个slave备份节点,所以共6个.只有主备机才会同步数据,平行的三个节点数据是不一样的,只是你连接任意一点,然后根据hash算法选择跳转到那一台. 以上是在使用了哨兵的情况下,本文不存在哨兵,只是集群,当master节点挂掉后,还是需要手动切换 推荐阅读:https://blog.csdn.net/qq_42815754/article/details/82912130 原文地址:

codis/redis数据数据迁移至阿里云redis服务器

本次迁移采用了唯品会的开源工具RMT 1.阿里云redis服务器的购买 注:要和生产上数据的内存大小一致 不然有些key会迁移失败 很明显的OOM报错 2.迁移机器的cpu要足够  迁移会有一段时间的负载上升 对迁移机器的IOPS有要求 rmt_redis.c:1474 Error: I/O error reading bulk count from MASTER 这种报错你就需要查看一下 迁移codis服务器的性能了 3.RMT(redis-migrate-tool)工具的安装 git clo

Redis集群(二):Redis的安装

官方网站:http://redis.io/ 本系列撒使用的版本是:3.0.0 一.安装必要包 yum install gcc 二.linux下安装及使用(wget下载到当前目录) redis-3.2.4.tar.gz有问题(什么不支持64位CPU),使用3.0.0没问题 1.下载安装redis #下载 wget http://download.redis.io/releases/redis-3.0.0.tar.gz tar zxvf redis-3.0.0.tar.gz cd redis-3.0

Redis的安装和使用之四------Redis集群

一.Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误. Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势: 自动分割数据到不同的节点上: 整个集群的部分节点失败或者不可达的情况下能够继续处理命令. Redis集群的数据分片

Redis集群知识解析

redis集群在启动的时候就自动在多个节点间分好片.同时提供了分片之间的可用性:当一部分redis节点故障或网络中断,集群也能继续工作.但是,当大面积的节点故障或网络中断(比如大部分的主节点都不可用了),集群就不能使用. 所以,从实用性的角度,Redis集群提供以下功能: 自动把数据切分到多个redis节点中 当一部分节点挂了或不可达,集群依然能继续工作 Redis集群的TCP端口 redis集群中的每个节点都需要建立2个tcp连接,监听这2个端口:一个端口称之为“客户端端口”,用于接受客户端指

Redis集群~StackExchange.redis连接Twemproxy代理服务器

回到目录 本文是Redis集群系列的一篇文章,主要介绍使用StackExchange.Redis进行Twemproxy(文中简称TW)代理服务的连接过程,事务上,对于TW来说,我们需要理解一下它的物理架构,它类似于Nugix,主要实现的是请求转发,但它还有一个重要的功能,那就是自动分片,这对于大数据是很必要的,你的服务器需要横向扩展时,不需要告诉客户端,这是一种很理解化的设计模式,当然,也对于Redis来说,在配置TW之后,是可以被全美支持的! 关于tw和Redis集群的设计图 关于StackE

Redis集群部署(一)

一.Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误. Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势: 自动分割数据到不同的节点上. 整个集群的部分节点失败或者不可达的情况下能够继续处理命令. Redis 集群的数据分