精华内容
下载资源
问答
  • Redis集群迁移案例Grab 是东南亚的打车巨头,app 下载量已有 5500 万,司机有 120 万。app 与 server 通信时需要使用一个认证 token,Grab 使用 Redis 来缓存 token,使用 Mysql 来持久化备份。之前 Redis 是单节点...

    Redis集群迁移案例

    Grab 是东南亚的打车巨头,app 下载量已有 5500 万,司机有 120 万。

    app 与 server 通信时需要使用一个认证 token,Grab 使用 Redis 来缓存 token,使用 Mysql 来持久化备份。

    之前 Redis 是单节点结构,今年年初时 Grab 意识到这个结构很快就会支撑不住,因为用户增长太快。

    选择解决方案

    备选方案

    (1)使用多节点复制结构

    之前的单点结构是设计上的缺陷,容错性很差,现在正是个修补的机会,可以使用 Redis 复制结构来提升容错性。但这也点问题,当 master 出现问题时,选择 slave 提升为 master 这个过程需要时间,这段时间内的写操作会受到影响。

    (2)自建 Redis Cluster

    Redis Cluster 的确能够解决可用性问题,但会有其他麻烦:

    分片依赖客户端,所以客户端的复杂度增加了。

    添加新的分片时比较麻烦,需要自己设计迁移逻辑,选择好一批用户信息,从现有节点上移动到新的节点。

    (3)使用 AWS 的弹性缓存服务

    可以按需添加每个分片的复制节点,可以在服务端完成数据切分,AWS 来为我们操心分片策略,但不支持添加新的分片。

    选择

    Grab 最想要的是水平扩展能力,在请求压力加大时可以轻松的增加处理能力。

    AWS 的弹性缓存服务是最适合的,每个分片可以动态添加复制节点,很好的支持了读数据能力的水平扩展,但不能够添加分片,这就限制了写数据能力的扩展。

    读写能力都需要很好的扩展性吗?经过统计发现,主要压力是在读上。

    写负载:

    读负载:

    写负载并不太高,提前规划好容量就可以了,Grab 统计了过去6个月的增长率,对容量进行了评估,最后决定使用3个分片,每个分片2个复制节点,一共9个节点。

    迁移过程

    决定使用 AWS Redis Cluster 弹性缓存服务之后,就需要把现有的单点 Redis 中的数据迁移到 AWS,并把读写操作也转过去。

    Grab 把整个迁移过程拆分成了6步,来保证绝对的安全稳定

    第1步

    把数据从老的 Redis 节点迁移到 Redis Cluster,这个过程比较简单,因为 cluster 还没有开始处理线上流量。

    需要考虑的就是不要影响老节点的性能,Grab 使用了 scan,dump,restore这些高效的命令把影响降到最低。

    第2步

    应用开始向 cluster 中写数据,写入老节点的时候异步写入 cluster。

    这个过程对原有业务流程没有任何影响,可以验证是否出错、写入过程是否符合预期。

    第3步

    上一步没问题后,使用同步模式向 cluster 中写入,真正参与到业务流程中,如果出现问题,就会影响真实的 API 调用结果,在真实环境中检验。

    第4步

    读操作时,异步读取 cluster 中的数据,与老节点中的结果进行对比验证

    这个过程对原有流程也没有影响,就是用来验证新老数据源是否同步

    第5步

    把所有读操作完全转到 cluster,停止对老Redis的读取,至此,API 完全依赖于新的 redis-cluster

    第6步

    停止向老 Redis 写,彻底停掉与其的任何交互,迁移完成

    每个步骤都是使用配置进行控制,如果出现了不可预知的情况,便可以快速的回退到初始状态

    小结

    Grab 这次 Redis 迁移的过程并不复杂,但他们的分析思路和严谨的态度很值得借鉴

    本文翻译正自理 Grab 的技术文章

    http://engineering.grab.com/migrating-existing-datastores

    展开全文
  • Redis集群迁移

    2018-07-30 10:19:00
    3:将各个主节点的AOF文件拷贝到新的redis集群的主节点,新的redis必须关系AOF而且关闭所有集群 scp appendonly.aof root @host_ip : / tmp /   用这个AOF文件覆盖新的redis集群主节点的AOF文件 4:依次...
    1:开发中断程序,登录各个主节点查看key信息
    INFO
    
    
    # Keyspace
    db0:keys=573153,expires=23977,avg_ttl=6721214720
    # Keyspace
    db0:keys=574792,expires=24263,avg_ttl=6741152890
    # Keyspace
    db0:keys=574647,expires=24500,avg_ttl=6733187087

     

    2:在各个主节点进行AOF的写入
    [root@YC-ss1 ~]# redis-cli -h ****** -p 7014 -a *******
    10.144.128.242:7014> BGREWRITEAOF
    Background append only file rewriting started

     

    3:将各个主节点的AOF文件拷贝到新的redis集群的主节点,新的redis必须关系AOF而且关闭所有集群
    scp appendonly.aof root@host_ip:/tmp/

     

    用这个AOF文件覆盖新的redis集群主节点的AOF文件

    4:依次提起新redis集群的主节点。启动完毕,启动从节点
    redis-server /home/redis/redis7013/redis7013.conf 

     

    5:重启新的redis集群,打开新的集群的AOF

    重启修改怕配置文件即可,停的时候先停从节点,启动的时候先启动主节点

    6:迁移完毕

    转载于:https://www.cnblogs.com/shengdimaya/p/9389170.html

    展开全文
  • Redis集群迁移工具,基于redis复制,快速,稳定。 特点 快速 多线程 基于redis复制 实时迁移 迁移过程中,源集群不影响对外提供服务 异构迁移 支持Twemproxy集群,redis cluster集群,rdb文件 和 aof...
    导读 Redis集群迁移工具,基于redis复制,快速,稳定。

    大神推荐Redis集群迁移工具:redis-migrate-tool大神推荐Redis集群迁移工具:redis-migrate-tool

    特点

    快速

    多线程

    基于redis复制

    实时迁移

    迁移过程中,源集群不影响对外提供服务

    异构迁移

    支持Twemproxy集群,redis cluster集群,rdb文件 和 aof文件

    过滤功能

    当目标集群是Twemproxy,数据会跳过Twemproxy直接导入到后端的redis

    迁移状态显示

    完善的数据抽样校验

    迁移工具的来源可以是:单独的redis实例,twemproxy集群,redis cluster,rdb文件,aof文件。

    迁移工具的目标可以是:单独的redis实例,twemproxy集群,redis cluster,rdb文件。

    版本说明

    https://github.com/vipshop/redis-migrate-tool #仅支持redis3及以下版本

    https://github.com/tanruixing88/redis-migrate-tool #基于上述版本修改,支持redis4及以上版本

    依赖

    yum -y install automake libtool autoconf bzip2
    

    安装

    git clone https://github.com/tanruixing88/redis-migrate-tool.git
    redis-migrate-tool
    autoreconf -fvi
    ./configure
    make
    cp src/redis-migrate-tool /usr/local/bin/redis-migrate-tool
    

    配置文件rmt.conf

    配置文件示例:从redis cluster集群迁移数据到twemproxy集群

    [source]
    type: redis cluster
    servers:
     - 127.0.0.1:6379
     - 127.0.0.1:6380
     - 127.0.0.1:6381
     - 127.0.0.1:6382
    [target]
    type: twemproxy
    hash: fnv1a_64
    hash_tag: "{}"
    distribution: ketama
    servers:
     - 127.0.0.1:6380:1 server1
     - 127.0.0.1:6381:1 server2
     - 127.0.0.1:6382:1 server3
     - 127.0.0.1:6383:1 server4
    [common]
    listen: 0.0.0.0:8888
    threads: 2
    step: 1
    mbuf_size: 1024
    source_safe: true
    

    配置文件示例:从redis cluster集群迁移数据到另外一个cluster集群

    [source]
    type: redis cluster
    servers:
     - 127.0.0.1:8379
    [target]
    type: redis cluster
    servers:
     - 127.0.0.1:7379
    [common]
    listen: 0.0.0.0:8888
    

    配置文件示例:从rdb文件恢复数据到redis cluster集群

    [source]
    type: rdb file
    servers:
     - /data/redis/dump1.rdb
     - /data/redis/dump2.rdb
     - /data/redis/dump3.rdb
    [target]
    type: redis cluster
    servers:
     - 127.0.0.1:7379
    [common]
    listen: 0.0.0.0:8888
    

    运行

    /usr/local/bin/redis-migrate-tool -c rmt.conf -o log -d
    

    状态

    通过redis-cli连接redis-migrate-tool监控的端口,运行info命令

    redis-cli -h 127.0.0.1 -p 8888
    127.0.0.1:8888> info
    # Server
    version:0.1.0
    os:Linux 2.6.32-573.12.1.el6.x86_64 x86_64
    multiplexing_api:epoll
    gcc_version:4.4.7
    process_id:9199
    tcp_port:8888
    uptime_in_seconds:1662
    uptime_in_days:0
    config_file:/ect/rmt.conf
    # Clients
    connected_clients:1
    max_clients_limit:100
    total_connections_received:3
    # Memory
    mem_allocator:jemalloc-4.0.4
    # Group
    source_nodes_count:32
    target_nodes_count:48
    # Stats
    all_rdb_received:1
    all_rdb_parsed:1
    all_aof_loaded:0
    rdb_received_count:32
    rdb_parsed_count:32
    aof_loaded_count:0
    total_msgs_recv:7753587
    total_msgs_sent:7753587
    total_net_input_bytes:234636318
    total_net_output_bytes:255384129
    total_net_input_bytes_human:223.77M
    total_net_output_bytes_human:243.55M
    total_mbufs_inqueue:0
    total_msgs_outqueue:0
    127.0.0.1:8888>
    

    数据校验

    /usr/local/bin/redis-migrate-tool -c rmt.conf -o log -C redis_check
    Check job is running...
    Checked keys: 1000
    Inconsistent value keys: 0
    Inconsistent expire keys : 0
    Other check error keys: 0
    Checked OK keys: 1000
    All keys checked OK!
    Check job finished, used 1.041s
    展开全文
  • 生产Redis集群是使用虚拟机搭建,三主三从,每个实例8G内存,现在需要将其迁移至单节点物理机之上 操作步骤简录: 1° 停业务,使用Redis的相关tomcat停机 2° 定位Redis集群的三个主实例: redis-trib.rb ...

    简单说明:

    生产Redis集群是使用虚拟机搭建,三主三从,每个实例8G内存,现在需要将其迁移至单节点物理机之上

    操作步骤简录:

    1° 停业务,使用Redis的相关tomcat停机

    2° 定位Redis集群的三个主实例:

    redis-trib.rb check 10.75.21.101:7000

    3° 定位三个主实例的aof文件目录

    4° 数据迁移:

    # redis1:
    cd /usr/local/redis/run/data/7000/
    cat appendonly.aof|redis-cli -h 10.75.50.170 -p 7000 --pipe
    
    # redis2:
    cd /usr/local/redis/run/data/7002/
    cat appendonly.aof|redis-cli -h 10.75.50.170 -p 7000 --pipe
    
    # redis3:
    cd /usr/local/redis/run/data/7005/
    cat appendonly.aof|redis-cli -h 10.75.50.170 -p 7000 --pipe

    5° 迁移验证:
    对比原集群环境的所有key和单机环境的所有key,看是否是一致的即可完成验证

    cd /tmp
    echo 'keys *'|redis-cli -h 10.75.21.101 -p 7000 > 101_7000_keys.txt
    echo 'keys *'|redis-cli -h 10.75.21.102 -p 7002 > 102_7002_keys.txt
    echo 'keys *'|redis-cli -h 10.75.21.103 -p 7005 > 103_7005_keys.txt
    
    cat 101_7000_keys.txt 102_7002_keys.txt 103_7005_keys.txt > source.txt
    cat source.txt|sort|uniq>fin_source.txt
    
    echo 'keys *'|redis-cli -h 10.75.50.170 -p 7000 > 170_7000_keys.txt
    cat 170_7000_keys.txt|sort|uniq>fin_target.txt
    
    comm -3 fin_source.txt fin_target.txt
    # 剔除掉公共的key,如果没有信息输出,则表示验证通过

    [TOC]

    展开全文
  • redis迁移,redis集群迁移$yuminstallautomakelibtoolautoconfbzip2-y$gitclonehttps://github.com/vipshop/redis-migrate-tool$cdredis-migrate-tool$autoreconf-fvi$./configure$make2、配置文件从redis cluste...
  • 往常大家对数据的迁移可能会想到mysql、mongodb、oracle等数据库的迁移,对redis数据的迁移可能比较少,因为...对于redis数据迁移常见的手段有开启持久化直接copy文件,还有就是使用redis-dump,对于集群迁移这种...
  • k8s中创建redis集群,卡槽迁移redis集群卡槽迁移reshard、rebalance时,报错ERR syntax error,Calling MIGRATE: ERR Target instance replied with error: NOAUTH Authentication required详细说明与验证
  • 往常大家对数据的迁移可能会想到mysql、mongodb、oracle等数据库的迁移,对redis数据的迁移可能比较少,因为...对于redis数据迁移常见的手段有开启持久化直接copy文件,还有就是使用redis-dump,对于集群迁移这种...
  • 随着公司项目的发展,单台redis的性能逐渐达到瓶颈,为了保证业务的正常运行,必须对单...具体的codis集群搭建的过程就不在此赘述,本文主要记录线上redis数据迁移到codis中的过程。在迁移数据前,我们对redis中现有...
  • redis集群间迁移的数据方式有很多,假如现在只是想把部分数据从A集群迁移到B集群有什么好办法?当然方法也有很多啦,不过有没有很廉价、很便捷、高度复用的方法?当然有啦。那就是bash这个利器。我抽空写了一个,...
  • redis集群在线迁移

    2019-05-14 23:52:55
    redis集群在线迁移(注意部署以后是单实例,不用创建成集群) 旧环境: IP 端口 角色 192.168.3.5 7000 M 192.168.3.5 7001 M 192.168.3.5 7002 M 192.168.3.5 7003 S 192.168.3.5 7004 S 192.168.3.5 7005 S 新...
  • redis集群数据迁移

    2018-06-27 10:42:00
    redis集群数据备份迁移方案 n 迁移环境描述及分析 当前我们面临的数据迁移环境是:集群->集群。 源集群: 源集群为6节点,3主3备 主 备 192.168.112.33:8001 192.168....
  • redis集群间迁移的数据方式有很多,假如现在只是想把部分数据从A集群迁移到B集群有什么好办法?当然方法也有很多啦,不过有没有很廉价、很便捷、高度复用的方法?当然有啦。那就是bash这个利器。【最新完整脚本:...
  • redis5.0.0之前操作redis集群用的是ruby写的脚本redis-trib.rb,这样带来的弊端就是需要安装ruby,gems环境,官方拉取的docker镜像里是没有redis-trib.rb等ruby环境的,需要自己安装,在国内网络环境下还是比较费时...
  • redis 集群在线迁移

    2019-05-08 11:38:39
    迁移方案步骤 部署新节点redis 实例。(注意部署以后是单实例,不用创建成集群)例如:旧环境:192.168.3.5:7000 M192.168.3.5:7001 M192.168.3.5:7002 M192.168.3.5:7003 S192.168.3.5:7004 S192.168.3.5:7005 S 新...
  • 问题,面试官:两个Redis集群 如何平滑数据迁移?由于生产环境的各种原因,我们需要对现有服务器进行迁移,包括线上正在运行的 redis 集群环境 如何去做?涉及到数据源变动,原有数据如何平滑迁移到新实例,从而可以...
  • 银行方面要求生产环境上所有软件的安装都要用普通用户安装,将会收回之前给的root用户的权限,于是我就开始了重装redis集群. 二、准备工作 配置各个端口配置文件主要配置项,这里用7001端口的配置文件为例子: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 817
精华内容 326
关键字:

redis集群迁移

redis 订阅