Redis集群在线迁移

一、redis集群迁移的几种方式

  • 离线迁移:通过rdb或者aof文件的方式,实现离线迁移
    缺点:版本限制,不同版本启动时,可能会出现覆盖数据文件的情况(也可能是集群模式的限制);需要停机,会造成数据不一致问题。
  • 使用shell脚本,单库对单库,性能极低,生产环境不能使用。
  • 主从同步:成为从节点slaveof ip port,然后再断开slavof no one
    缺点:需要停止写入数据,否则也会造成数据不一致;集群模式下,操作复杂。
  • 使用阿里开源redis-shake工具,推荐,下面重点讲解。

二、redis-shake官方百科

官方wiki文档:https://github.com/alibaba/RedisShake/wiki/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%BD%BF%E7%94%A8%EF%BC%8C%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE%EF%BC%9F
本次迁移重点关注章节3.2、章节4、章节5。

本次集群版cluster到集群版cluster配置说明

修改redis-shake.conf内容如下:

# 日志输出配置
log.file = /weblogic/var/redis-shake.log
# 源集群配置
source.type = cluster
source.address = 127.0.0.1:20441;127.0.0.1:20441;127.0.0.1:20441
source.password_raw =
# 目标集群配置
target.type = cluster
target.address = 127.0.0.1:6379;127.0.0.1:6379;127.0.0.1:6379
target.password_raw =
# 当源目的有重复 key 时是否进行覆写
key_exists = rewrite

执行命令:

./redis-shake.linux -conf=redis-shake.conf -type=sync &
tail -f redis-shake.log

三、全能宝redis集群本次迁移中遇到的一些问题和经验

1.部署redis-shake的机器,要对源集群和目标集群都有网络权限
2.内存、读写io及内网带宽占用:

redis-shake的sync模式同步效率默认为32线程,效率非常高,但是非常占用源集群的内存以及内网带宽,一方面是因为,sync同步模式分为以下三步:
a. 等待源端save rdb完毕
b. 全量同步阶段,显示百分比
c. 增量同步,出现字样sync rdb done后,当前dbSyncer进入增量同步
本次全能宝迁移的数据体量如下图:

可以看出,内存占用平均在1gb左右,所以执行bgsave至少需要1gb的空闲内存。
rdb文件的大小,大约在300-400mb左右,所以同步rdb文件的读写io占用也很高。
所以,生产环境尽量选择夜深人静的时候迁移。

3.集群模式下,尽量使用源集群的从节点进行数据同步,减少对源集群的性能影响
4.redis-shake截至2022.8.17最新版本为3.0.0,但是3版本为重构版,目前功能不全,所以本次使用的2.1.1版本。

 

posted @ 2024-02-27 15:03  噗噗噗i丶  阅读(84)  评论(0编辑  收藏  举报