• 请不要在回答技术问题时复制粘贴 AI 生成的内容
asanelder
V2EX  ›  程序员

关于 Redis 集群搭建和数据迁移

  •  
  •   asanelder · Mar 2, 2021 · 1507 views
    This topic created in 1900 days ago, the information mentioned may be changed or developed.

    背景

    之前的业务没有使用 redis 集群, 但使用了多个实例保存多个分片, 现在一共分了 4 片, 保存的数据是

    第一片: hash(key) = 0

    第二片: hash(key) = 1

    第三片: hash(key) = 2

    第四片: hash(key) = 3

    现在想搭建一个集群, 俺大概想到的思路有 2

    一 基于现有的实例来搭建集群

    但俺看网上的文章, redis 为自动为集群中的机器分配 0-16383 个 slot, 如果是四个主从的话,

    0-4xxxx 为第一片

    4xxx-8xxx 为第二片

    8xxx - 12xxx 为第三片

    12xxx - 16xxx 为第四片

    然后使用 HASH_SLOT=CRC16(key)mod16384 来计算某一个数据落到哪个片中.

    但这和俺现有的 hash 逻辑是不一样的, 所以对于这种方式, 俺想问一个

    1. 在创建集群时, 可不可以自定义为实例划分 slot 的逻辑?
    2. 计算 hash-slot 的 hash 函数可不可以自定义?

    二 搭建新的集群, 将现有实例中数据导过去

    如果方式一不可行, 俺就新搭建一个集群, 然后停服, 把现有数据再 hash 到新的集群中.

    关于这种方式, 俺的疑问是

    1. 这种导数据有没有相关的工具?
    2. 如果没有工具, 是不是需要自己写程序来导?

    希望有经验的铁子给予指导点拨

    3 replies    2021-03-08 12:46:47 +08:00
    hyq
        1
    hyq  
       Mar 2, 2021
    可以用 reshard 慢慢折腾 slot,但是不建议这么做
    hash 函数不能改,唯一能做的时指定 hash 的参数,如 hash(role{12345}) == hash(12345),强制 12345 作为 hash 的 key 。
    hyq
        2
    hyq  
       Mar 2, 2021
    重新去找了下资料,你这种情况,在官方的文档中有提到
    https://redis.io/topics/cluster-tutorial 文中的 Migrating to Redis Cluster
    asanelder
        3
    asanelder  
    OP
       Mar 8, 2021
    @hyq #2
    @hyq #1 感谢铁子的回复, 这两天忘记了, 俺好好看看这文档
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3034 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 06:45 · PVG 14:45 · LAX 23:45 · JFK 02:45
    ♥ Do have faith in what you're doing.