热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RedisCluster数据迁移之redisshake(集群到集群)

1、背景-在项目的实施过程中,由于有dev环境和pro环境,这时会有两个redis集群,但是部分数据从甲方的三方数据库中获取存入生产环境的redis集群中,为了方便测试和数据校验,



1、背景
- 在项目的实施过程中,由于有dev环境和pro环境,这时会有两个redis集群,但是部分数据从甲方的三方数据库中获取存入生产环境的redis集群中,为了方便测试和数据校验,需要将生产redis集群的各节点数据同步到测试环境的redis集群中,最好能实时的同步增量数据。
2、方案


  • 写一个多数据源的redis项目,从一个redis集群读出来写到另外一个redis集群。PASS(太蠢了)
  • AOF,RDB直接COPY。PASS(增量数据呢?)
  • 本文介绍的redis-shake https://github.com/alibaba/RedisShake

3、条件准备


  • 首先我们必须有两个redis集群(source:master[192.168.18.129:7001;192.168.18.130:7003;192.168.18.130:7005] target:master[192.168.1.71:4001;192.168.1.71:4002;192.168.1.71:4003])为什么只要master呢?后面会解释~
  • 根据上面的路径下载最新版本的redis-shake

4、疑虑


  • 要将生产数据迁移到测试环境,我生产redis集群里的数据肯定是不能丢失的。丢失了就完了。
  • 我当前的redis集群内的数据会被覆盖吗?
  • 是否能将生产环境更新的数据也增量同步到测试环境?

5、动手


  • 下载:https://github.com/alibaba/RedisShake/tree/release-v2.0.3-20200724 ,我当前最新的tags版本是release-v2.0.3-20200724。

  • 上传到liunx环境,当然也可以在windows上进行解压。

  • liunx环境使用tar -zxvf redis-shake-v2.0.3.tar.gz在这里插入图片描述

  • 进入redis-shake-v2.0.3文件夹找到redis-shake.conf修改配置文件

    # 阿里的这个配置文件的注释特别详细,我只摘出我们需要修改的项目来进行修改。
    # source redis configuration.
    # used in `dump`, `sync` and `rump`.
    # source redis type, e.g. "standalone" (default), "sentinel" or "cluster".
    # 1. "standalone": standalone db mode.
    # 2. "sentinel": the redis address is read from sentinel.
    # 3. "cluster": the source redis has several db.
    # 4. "proxy": the proxy address, currently, only used in "rump" mode.
    # 源端redis的类型,支持standalone,sentinel,cluster和proxy四种模式,注意:目前proxy只用于rump模式。
    source.type = cluster
    # ip:port
    # the source address can be the following:
    # 1. single db address. for "standalone" type.
    # 2. ${sentinel_master_name}:${master or slave}@sentinel single/cluster address, e.g., mymaster:master@127.0.0.1:26379;127.0.0.1:26380, or @127.0.0.1:26379;127.0.0.1:26380. for "sentinel" type.
    # 3. cluster that has several db nodes split by semicolon(;). for "cluster" type. e.g., 10.1.1.1:20331;10.1.1.2:20441.
    # 4. proxy address(used in "rump" mode only). for "proxy" type.
    # 源redis地址。对于sentinel或者开源cluster模式,输入格式为"master名字:拉取角色为master或者slave@sentinel的地址",别的cluster
    # 架构,比如codis, twemproxy, aliyun proxy等需要配置所有master或者slave的db地址。
    source.address = 192.168.18.129:7001;192.168.18.130:7003;192.168.18.130:7005
    # password of db/proxy. even if type is sentinel.
    source.password_raw = 123123yu
    # auth type, don't modify it
    source.auth_type = auth
    # target redis configuration. used in `restore`, `sync` and `rump`.
    # the type of target redis can be "standalone", "proxy" or "cluster".
    # 1. "standalone": standalone db mode.
    # 2. "sentinel": the redis address is read from sentinel.
    # 3. "cluster": open source cluster (not supported currently).
    # 4. "proxy": proxy layer ahead redis. Data will be inserted in a round-robin way if more than 1 proxy given.
    # 目的redis的类型,支持standalone,sentinel,cluster和proxy四种模式。
    target.type = cluster
    # ip:port
    # the target address can be the following:
    # 1. single db address. for "standalone" type.
    # 2. ${sentinel_master_name}:${master or slave}@sentinel single/cluster address, e.g., mymaster:master@127.0.0.1:26379;127.0.0.1:26380, or @127.0.0.1:26379;127.0.0.1:26380. for "sentinel" type.
    # 3. cluster that has several db nodes split by semicolon(;). for "cluster" type.
    # 4. proxy address. for "proxy" type.
    target.address = 192.168.1.71:4001;192.168.1.71:4002;192.168.1.71:4003
    # password of db/proxy. even if type is sentinel.
    target.password_raw = 123123yu
    target.auth_type = auth

  • 上面这部分是用户最困惑的地方,为了满足用户的灵活配置,除了集群版的迁移,redis-shake还有单节点/主从版迁移,RDB迁移,目前开放了较多的配置项,但是如果我提,我们关注的是集群版,那么集群版本的配置就如上所示,内容解释如下:


    • source.type: 源redis的类型,支持一下4种类型:
      standalone: 单db节点/主从版模式。如果源端是从多个db节点拉取就选择这个模式,即便是codis等开源的proxy-db架构。
      sentinel: sentinel模式。

      cluster: 集群模式。开源的cluster。对于阿里云来说,用户目前无法拉取db的地址,所以此处只能是proxy。
      proxy: proxy模式。如果是阿里云redis的集群版,从proxy拉取/写入请选择proxy,从db拉取请选择cluster。正常cluster到cluster同步源端请选择cluster模式,proxy模式目前只用于rump。

    • source.address: 源redis的地址,从1.6版本开始我们支持集群版,不同的类型对应不同的地址:
      standalone模式下,需要填写单个db节点的地址,主从版需要输入master或者slave的地址。
      sentinel模式下,需要填写sentinel_master_name:master_or_slave@sentinel_cluster_addresssentinel_master_name表示sentinel配置下master的名字,master_or_slave表示从sentinel中选择的db是master还是slave,sentinel_cluster_address表示sentinel的单节点或者集群地址,其中集群地址以分号(;)分割。例如:mymaster:master@127.0.0.1:26379;127.0.0.1:26380。注意,如果是sentinel模式,目前只能拉取一个master或者slave信息,如果需要拉取多个节点,需要启动多个shake。
      cluster模式下,需要填写集群地址,以分号(;)分割。例如:10.1.1.1:20331;10.1.1.2:20441。采用sync的时候只写master的IP和端口,参照我面的配置文件,否则启动redis-shake的时候会报错,让你修改。
      proxy模式下,需要填写单个proxy的地址,此模式目前仅用于rump

    • source.password_raw:源redis的密码。

    • target.type: 目的redis的类型,与source.type一致。注意,目的端如果是阿里云的集群版,类型请填写proxy,填写cluster只会同步db0。

    • target.address:目的redis的地址。从1.6版本开始我们支持集群版,不同的类型对应不同的地址。 standalone模式,参见source.address
      sentinel模式,需要填写sentinel_master_name@sentinel_cluster_addresssentinel_master_name表示sentinel配置下master的名字,sentinel_cluster_address表示sentinel的单节点或者集群地址,其中集群地址以分号(;)分割。例如:mymaster@127.0.0.1:26379;127.0.0.1:26380
      cluster模式,参见source.address
      proxy模式下,填写proxy的地址,如果是多个proxy,则round-robin循环负载均衡连接,保证一个源端db连接只会对应一个proxy。如果是阿里云的集群版请选择这种模式。

    • target.password_raw:目的redis的密码。

  • 用户配置完配置文件,然后以不同的模式启动即可:./redis-shake -cOnf=redis-shake.conf -type=sync

6、验证


  • source的数据没有被清空,同时target的数据没有被覆盖
  • 在source集群中set qhyu 123456789,在target中有实时增量更新在这里插入图片描述

在这里插入图片描述



推荐阅读
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • 随着Redis功能的不断增强和稳定性提升,其应用范围日益广泛,成为软件开发人员不可或缺的技能之一。本文将深入探讨Redis集群的部署与优化,包括主从备份机制、哨兵模式以及集群功能,帮助读者全面理解并掌握Redis集群的应用。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • Redis Hash 数据结构详解
    本文详细介绍了 Redis 中的 Hash 数据类型及其常用命令。Hash 类型用于存储键值对集合,支持多种操作如插入、查询、更新和删除字段值。此外,文章还探讨了 Hash 类型在实际业务场景中的应用,并提供了优化建议。 ... [详细]
author-avatar
morimodomasaaki
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有