• Redis集群到集群迁移


    一.物理导入

    简介

    redis集群在存储数据时,是根据槽点进行存储。例如老集群A如下:
    都在一台机器,实际可以在多台机器上。
    主节点:7000(0-5460) 7001(5461-10922) 7002(10923-16383)
    从节点:7003 7004 7005

    那如果有10万数据,它们就会按照hash值进行计算,按槽点存储。每个槽点将存储一些数据,那槽点的拥有者也将拥有和存储那些数据。

    实际操作

    老集群:1.1.1.1
    主节点:7000(0-5460) 7001(5461-10922) 7002(10923-16383)
    从节点:7003 7004 7005

    新集群:1.1.1.2
    主节点:6000(0-3000) 6001(3001-5460) 6002(5461-10922) 6003(10923-16383)
    从节点:6004 6005 6006 6007

    可以发现新集群的节点多了一个,他把6000节点的曹点分了一些过去,承担压力。

    将老集群的7000节点的appendonly.aof用pipe方法导入到6000节点上。再将同文件导入到6001节点上。肯定会有一半左右报错,因为那些值在hash后,槽点为3555,但你要导入到6000节点里,那是不接受的,其他对应的会导入进去。所以不用管报错,效验数据总数即可。

    cat /redis/7000/appendonly.aof | redis-cli -c -p 6000 -h 1.1.1.2 --pipe
    cat /redis/7000/appendonly.aof | redis-cli -c -p 6001 -h 1.1.1.2 --pipe

    aof文件里就是写入的命令语句,再利用pipe批量导入,是非常快捷而稳定的。

    像上面,槽点是分开的,就都导入,多余的自然是没法写入的,只导入固定部分即可。然后用dbsize命令去对比一下所有节点总数据量,也要考虑数据中可能有过期策略的值,会导致数据总数一直减少。

    本文版权归作者所有,欢迎转载,请务必添加原文链接
    https://www.cnblogs.com/rxysg/p/15688634.html

    https://github.com/twitter/twemproxy


    https://github.com/vipshop/redis-migrate-tool

  • 相关阅读:
    API文档大集合
    jenkins 构建 job 并获取其状态的实现
    jenkins 插件乱码处理与文件上传
    更优雅的配置:docker/运维/业务中的环境变量
    部署仓库中 nginx 下游依赖配置改进
    dotnet core 在 MIPS64 下的移值进度:EA 版本已经发布
    tmux 编译安装过程
    各数据源的时间/日期的提取能力对比
    关于若干性能指标的阐述
    为缓存、外部接口调用添加超时处理
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15774827.html
Copyright © 2020-2023  润新知