AWS Dynamodb 跨区域迁移数据方案(cross-region replication)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37263637/article/details/85112323

最近实在受不了中国访问AWS首尔区域了 ,决定把整个环境迁移到新加坡,服务器迁移倒是比较简单,但数据库迁移遇到很大的麻烦。

原以为DynamoDB 全局表可以很容解决跨区域数据同步的问题,结果发现DynamoDB全局表只能在为空表的前提下使用,即必须是新建的表。而不能说 用到中途把普通表改成支持多区域的全局表。


这里介绍迁移过程中找到的三种方案:

1 AWS Data Pipeline 方案

您可以使用 AWS Data Pipeline 将 DynamoDB 表中的数据导出到 Amazon S3 存储桶中的文件。也可以使用该控制台将 Amazon S3 中的数据导入到同一 AWS 区域或不同区域中的 DynamoDB 表中。

简单说就是AWS官方提供的DynamoDB数据导出方南,会涉及到3个服务 Datapipeline EMR S3,会开启3台EC2作为数据传输处理的服务器,注意费用,EMR开启的服务器都比较好。并没有使用这种方案,因为AWS 提供教程 按照Datapipe 中Dynamodb导出模板,EMR的申请EC2的AMI较低。连资源等申请不过,再加上权限要找主账号申请就没有采用这种方案。

文档地址:https://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBPipeline.html

2 git上AWS的迁移工具包dynamodb-cross-region-library

git地址:https://github.com/awslabs/dynamodb-cross-region-library

这是基于Java环境的lib,这个lib支持使用DynamoDB流来保证24两表同步更新,代码是2016年的,最近环境上的Java环境感觉都比较新 lib都编译不过,所以也没使用这种方案。

git clone 
mvn install
java -jar target/dynamodb-cross-region-replication-1.2.1.jar --sourceRegion <source_region> --sourceTable <source_table_name> --destinationRegion <destination_region> --destinationTable <destination_table_name>

3 Silvermine DynamoDB Table Sync

受到了第二种的启发,于是在万能npm上去找果然找到了想要的工具:Silvermine DynamoDB Table Sync

npm地址:https://www.npmjs.com/package/@silvermine/dynamodb-table-sync

这是一个完成度不高的工具,仅可以用于两区域表差异对比并同步。并不能做到上两种方案的支持实时流同步的问题,即最新的数据也会实时复制到新表。但因为本身数据量比较小,刚好满足需求。这里介绍下使用:

(1) 先确定你linux环境下配置有相应的AWS 根凭证,如ls ~/.aws/credentials (window环境也类似)因为该工具需要访问DynamoDB 就必须要要有凭证。

(2) 全局安装

npm install -g silvermine-dynamodb-table-sync

(3) 使用

dynamodb-table-sync -m us-east-1:my-dynamodb-table -s eu-west-1:my-dynamodb-table
-m参数 主区域DynamoDB 即数据源
-s参数 从区域DynamoDB 及目标区域
这里后面可以带两个参数
--write-missing 如果两区域间从区域缺少 则自动创建
--write-differing 如果两区域从区域有差异则自动同步 

4 总结

如果是生产环境必须使用第一种方案保证迁移安全可靠,遇到问题可以提交AWS support解决。如果开发或待上线环境可以使用2或3方案。主要是用的是子账号开权限太麻烦,导致第一种用出一堆坑。

猜你喜欢

转载自blog.csdn.net/m0_37263637/article/details/85112323
今日推荐