阿里云 Redis 2.8 迁移到 5.0 的坑与解决方案

本文讲述了作者在将阿里云2.8版本的Redis实例迁移到5.0版本过程中遇到的问题,包括使用redis-port和RedisShake工具导入rdb文件的挑战,如内存限制、版本不兼容和服务器配置差异。最后,通过添加swap解决了导入问题并提出了工具性能优化的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是对 redis 2.8 迁移到 redis 5.0 的操作实践,主要用到了下面两个工具

缘起

我们很多服务使用了阿里云的云数据库 Redis 产品,当时是 2.8 版本,使用后一直没有动过。2024年1月31日阿里云发送了一封邮件,告知用户从 2024年7月31日 起,对 2.8 版本的云数据库 Redis 停止全面支持 EOFS (End of Full Support):

尊敬的阿里云Redis用户,
云数据库 Redis 版2.8版本实计划于2024年07月31日起停止全面支持,进入EOFS(End of Ful Support) 阶段,此阶段我们将停止功能送代升级、停止续费、停止升降配和扩容、停止售后服务,请尽快升级实例至高版本。详情请看公告https://click.aliyun.com/m/1000389479/

在阿里云的文档里关于如何进行兼容性测试的环节里说:“您可以在原实例中,通过数据恢复功能,将当前Redis实例的备份数据克隆至一个新的高版本实例中,并进行测试、验证,更多信息请参见从备份集恢复至新实例。”。于是我们开始尝试对线上 Redis 实例进行升级测试。

问题

  • 阿里云官方的 Redis 2.8 实例已经不能再购买了,所以不能买个新的 2.8 实例做测试
  • 阿里云官方的数据导出任务,从 2.8 到 5.0 实例,尝试失败,报不支持的版本错误
  • 从 2.8 的落盘备份 rdb 文件导入到阿里云 5.0 实例,使用阿里云推荐的 redis-shake 导入失败,redis-shake 进程在没导入完成就自杀掉了……

尝试

本地导入

我在本地的一台服务器上搭建了 redis 5.0.13 服务器(注:阿里云上的 5.0 实例小版本为 5.2.6,为阿里云自行基于官方 5.0.13 修改后的版本),将 2.8 实例上的备份 rdb 文件下载(约 3 GB)后,使用 redis-port 导入。第一次导入失败,报超出 maxmemory 限制。于是修改了 redis.conf ,设定 5G 最大内存 maxmemory 5368709120

daemonize yes
pidfile /var/run/redisi_6379.pid
port 6379
bind 0.0.0.0
timeout 600
loglevel verbose
logfile /var/log/redis/redis_6379.log
databases 16
appendonly yes
appendfsync everysec
appendfilename appendonly.aof
dir /home/redisdata
maxclients 1000
maxmemory 5368709120
slowlog-log-slower-than 20000
slowlog-max-len 500
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
requirepass password

再次使用 redis-port 导入成功:

#!/bin/bash

REDIS_INSTANCE=r-abcdef1234567
DATE=$(date -d "yesterday" '+%Y-%m-%d')
LOG=$(pwd)/logs/redis_sync_$DATE.log

# Download yesterday's backup file
#cd /root/aliyun_client
#python3 -u alibabacloud_sample/sample.py $REDIS_INSTANCE $DATE true |& tee -a $LOG 2>&1

cd /root
./redis-port restore -i /root/aliyun_client/$REDIS_INSTANCE.rdb -t 127.0.0.1:6379 -A 'password' --redis |& tee -a $LOG 2>&1

echo "Restore to local redis instance DONE!"

尝试使用 redis-shake 导入报错,错误信息乱码,也就没有再尝试。

阿里云服上尝试

因为使用阿里云内网速度更快,所以在一台测试用的阿里云服务器上尝试使用同样的办法将 2.8 的 rdb 备份导入到新购买的一个 5.0 实例(r-1234567abcdef.redis.rds.aliyuncs.com:6379)上。

redis-port

这次尝试 redis-port 执行到了 60% 到 85% 就会中断。

./redis-port restore -i ./r-abcdef1234567.rdb 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值