V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
asanelder
V2EX  ›  Redis

[求助!] Redis 集群搭建和数据迁移以及停机问题

  •  1
     
  •   asanelder · 2021-03-09 17:42:30 +08:00 · 1402 次点击
    这是一个创建于 1354 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    之前的业务没有使用 redis 集群, 但使用了 4 实例保存 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 逻辑是不一样的, 所以对于这种方式, 俺想问一下

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

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

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

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

    1. 这种导数据有没有相关的工具?
    2. 如果没有工具, 是不是需要自己写程序来导?
    3. 为了保证集群中的数据和原来 redis 中的数据一致, 需要停服来导, 有没有不停服的方案?

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

    4 条回复    2021-03-10 12:51:24 +08:00
    yc8332
        1
    yc8332  
       2021-03-10 09:45:08 +08:00
    应该只能导数据了。导数据应该不慢吧。。不一定停机吧,先有段时间双写,同时写到旧的和集群。基本上应该不会有什么漏的数据
    asanelder
        2
    asanelder  
    OP
       2021-03-10 09:48:22 +08:00
    @yc8332 #1 铁子, 那双写之前的旧数据呢? 怎么在不停机的情况下导到新的集群? 俺不太明白
    yc8332
        3
    yc8332  
       2021-03-10 10:26:08 +08:00
    @asanelder redis-shake
    VinllenChen
        4
    VinllenChen  
       2021-03-10 12:51:24 +08:00
    redis-shake
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2900 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:20 · PVG 16:20 · LAX 00:20 · JFK 03:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.