之前的业务没有使用 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 逻辑是不一样的, 所以对于这种方式, 俺想问一个
二 搭建新的集群, 将现有实例中数据导过去
如果方式一不可行, 俺就新搭建一个集群, 然后停服, 把现有数据再 hash 到新的集群中.
关于这种方式, 俺的疑问是
希望有经验的铁子给予指导点拨
1
hyq 2021-03-02 17:46:00 +08:00
可以用 reshard 慢慢折腾 slot,但是不建议这么做
hash 函数不能改,唯一能做的时指定 hash 的参数,如 hash(role{12345}) == hash(12345),强制 12345 作为 hash 的 key 。 |
2
hyq 2021-03-02 17:49:17 +08:00
重新去找了下资料,你这种情况,在官方的文档中有提到
https://redis.io/topics/cluster-tutorial 文中的 Migrating to Redis Cluster |