将AWS上两个Redis实例合并至单个实例的可行性咨询
解决方案:Redis跨实例分DB合并数据
Redis原生主从复制是全实例级同步,切换主节点时会清空目标实例的所有数据库(包括已同步的db0),所以无法直接实现你想要的分DB定向复制。以下是可行的替代方案:
方法一:使用RDB文件导出导入
1. 导出旧实例指定DB的RDB
- 导出oldhost1的db0:
# 非阻塞导出指定DB的RDB文件 redis-cli -h oldhost1 -n 0 bgsave # 等待bgsave完成后,从oldhost1的data目录拷贝生成的dump.rdb,重命名为oldhost1-db0.rdb # 或者直接用redis-cli的--rdb参数导出 redis-cli -h oldhost1 -n 0 --rdb oldhost1-db0.rdb - 导出oldhost2的db1:
redis-cli -h oldhost2 -n 1 --rdb oldhost2-db1.rdb
2. 导入到新实例对应DB
- 导入oldhost1-db0到newhost1的db0:
- 停止newhost1的Redis服务;
- 将
oldhost1-db0.rdb替换newhost1数据目录下的dump.rdb; - 启动newhost1,数据会自动加载到db0;
- 停止newhost1,将
oldhost2-db1.rdb替换dump.rdb,确保newhost1的redis.conf中databases配置值≥2,启动服务后执行SELECT 1,数据会加载到db1; - 最后恢复newhost1的原始
dump.rdb和配置(可选,若后续需要正常持久化)。
方法二:使用redis-dump/redis-load工具(更灵活)
如果环境允许安装第三方工具,redis-dump和redis-load可以精准导出导入指定DB的数据:
1. 导出数据
# 导出oldhost1 db0 redis-dump -h oldhost1 -d 0 > oldhost1-db0.json # 导出oldhost2 db1 redis-dump -h oldhost2 -d 1 > oldhost2-db1.json
2. 导入数据
# 导入到newhost1 db0 redis-load -h newhost1 -d 0 < oldhost1-db0.json # 导入到newhost1 db1 redis-load -h newhost1 -d 1 < oldhost2-db1.json
关键注意事项
- 操作前务必备份newhost1的所有数据,防止意外丢失;
- 若使用AWS ElastiCache Redis,可通过导出RDB到S3,再从S3导入到新实例的方式操作,无需手动拷贝文件;
- 导入过程中禁止对newhost1执行写入操作,避免数据冲突;
- 大体积数据建议在业务低峰期操作,减少对业务的影响。
内容的提问来源于stack exchange,提问作者jsharpe
相关产品推荐
相关产品推荐

