因为集群内的 单点redis消耗 内存达到了14个G,所以需要增加新的节点,并将数据迁移过去,使用 redis-trib reshard ip:port
A : 2105slot 14.5g, B: 0 slot 0g
我从A到B 迁移了 1000slot, A的slot数目减少了,但是内存消耗并没有减少,以下是迁移后的状态
A: 1105slot 14.5g B:1000slot 7.6g
不知道为什么,这个有知道的朋友留言帮我解答下。
我想着 那我再开一个C 把A的 剩余1105slot 迁移出来,迁移完 就把A干掉,就把内存释放了。
A->C的过程中,会频繁报错 ERR Target instance replied with error: CLUSTERDOWN The cluster is down( 可以使用 redis-trib fix ip:port 进行修复.)
寻找原因时候发现 有博文(点击跳转链接)可能存在较大key ,同步时候超时了。我按照他的查看方式,查了下 报错slot的 key(我用的是Set类型), 我的神,我的Set中44w个值。(之前有发现app里报错 too many redirection,一直没有找到原因,不知道和这个有关系没,有经验的朋友点明一下)。这个key对于我没有意义了,直接del。 fix后,继续reshard 就ok了。
迁移完成后
A: 0slot 58M C 1105slot 7.5g
经验: 以后使用数据库的时候,单个key还是不宜过大,这个应该在app层有控制。
时间: 2024-10-11 16:14:43