问题
不久前,我和我的团队被要求将几个弹性数据库(redis)迁移从ec2-classic(是的,我知道ðä·â-ââ€)到VPC。所有这些数据库都用于生产服务中,因此拍摄快照并在VPC上恢复它并不是一个好主意,因为时间需要整个过程。
使用AWS Online Migration也不是一种选择,因为在线迁移是为了从Amazon EC2上的Redis或本地自托管Redis到Redis的Elasticache而设计的数据迁移,而不是在redis clusters的Elasticache之间。
因此,我们一直在寻找替代方案,直到我们找到了一个不满意我们需求的脚本的不错的gist。唯一失败的是,在运输群集中加密无济于事。
解决方案
因此,我们对脚本进行了一些更改,以适合我们的用例和voila!我们最终得到了一个working version来移动数据。
演示
从可以访问两个Elasticache簇的终端(非常重要!):
- 克隆回购:
git clone git@github.com:joseapeinado/ElasticacheMigration.git
- 准备虚拟env并安装依赖项
cd ElasticacheMigration
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
- 利润!!!
SRC_CLUSTER=src_cluster.spznk9.ng.0001.use1.cache.amazonaws.com
DST_CLUSTER=dst_cluster.spznk9.ng.0001.use1.cache.amazonaws.com
python3 migrate-redis.py $SRC_CLUSTER --src_port=6379 $DST_CLUSTER --dst_port 6379 --src_db 2 --dst_db 2
Connecting to Redis instances...
Counting keys to migrate...
19222 keys: 100% |###############################################################################################################################################################################################################################################| Time: 0:00:05
('Keys disappeared on source during scan:', 0)
('Keys already existing on destination:', 19195)
用例
仅将一个数据库复制到另一个现有群集
脚本以每个数据库的基础复制群集之间的数据,因此可以在框外执行此迁移。
将所有数据库从一个集群复制到另一个集群
这里唯一需要注意的是每个数据库一次运行迁移脚本。
将数据库数据从一个DB复制到同一集群中的另一个DB。
有优势进行此迁移
我认为更明显的优势是可以使用脚本与:
使用的时间- 停止在redis群集上写入
- 拍快照
- 从快照启动一个新群集
- 恢复在新集群上写作
这个过程至少需要15分钟左右。
贡献
任何改进都将不仅受到欢迎ð
https://github.com/joseapeinado/ElasticacheMigration/
这是我的第一篇技术文章,因此任何建议都将不胜感激。
我希望迁移脚本能帮助您喜欢它帮助我ð