NimoFullCheck是阿里云自主研发的用于检验源端DynamoDB和目的端MongoDB数据一致性的工具。本文档介绍如何使用NimoFullCheck进行一致性校验。
前提条件
您已通过NimoShake将DynamoDB迁移到阿里云数据库。详情请参见使用NimoShake将Amazon DynamoDB迁移至阿里云。
背景信息
在通过NimoShake将DynamoDB迁移到阿里云数据库之后,您可以使用NimoFullCheck工具对两端的数据进行一致性校验。
校验主要分为如下两个部分:
轮廓校验:轮廓校验会对DynamoDB表以及MongoDB集合中数目的一致性进行校验,如果数目不一致则直接退出,终止后续的校验,并在屏幕上打印错误信息,便于您定位错误原因。
精确校验:轮廓校验通过后会进入精确校验阶段。精确校验从源端拉取数据并解析,如果有唯一索引则根据唯一索引对比MongoDB数据的一致性。如果没有唯一索引则逐一对比两端所有数据(速度较慢)。
注意事项
NimoFullCheck仅支持针对全量数据迁移的校验。如果在增量同步阶段使用NimoShake进行校验,那么得到的结果必然是不一致。
NimoFullCheck仅支持单向校验,即仅支持以MongoDB端的数据为基准对DynamoDB的数据进行一致性校验。
操作步骤
本步骤以Ubuntu系统为例,介绍如何使用NimoFullCheck校验DynamoDB和MongoDB的一致性。
在系统中执行如下命令下载NimoShake包,等待下载完成。
wget https://github.com/alibaba/NimoShake/releases/download/release-v1.0.0-20191015/nimo.tar.gz
说明建议下载最新版本的NimoShake包,下载地址请参见NimoShake。
执行如下命令解压NimoShake包。
tar zxvf nimo.tar.gz
解压完成后,输入
cd nimo
命令进入nimo文件夹。执行如下格式的命令对NimoFullCheck注入必要参数并开始校验。
./nimo-full-check.linux --<参数名>=<值> --<参数名>=<值>
各参数的说明如下所示:
参数名
说明
示例值
id
迁移任务ID。即您在使用NimoShake进行迁移的时候设置的ID,详情请参见使用NimoShake将Amazon DynamoDB迁移至阿里云。
--id=nimo-shake
logLevel
日志的等级,取值:
none:不打印日志。
error:包含错误级别信息的日志。
warn:包含警告级别信息的日志。
info:反馈当前系统状态的日志。
debug:包含调试信息的日志。
默认值:info。
--logLevel=info
sourceAccessKeyID
DynamoDB端的AccessKey ID。
--sourceAccessKeyID=xxxxxxxxxx
sourceSecretAccessKey
DynamoDB端的AccessKey。
--sourceSecretAccessKey=xxxxxxxxxx
sourceSessionToken
DynamoDB端的临时密钥,如没有可以不配置。
--sourceSessionToken=xxxxxxxxxx
sourceRegion
DynamoDB所属的地域,如没有可以不配置。
--sourceRegion=us-east-2
qpsFull
Scan
命令对表执行的频率,表示每秒钟最多调用多少次Scan
。默认值:10000。--qpsFull=10000
qpsFullBatchNum
每秒拉取多少条数据。默认值:128。
--qpsFullBatchNum=128
targetAddress
目的端MongoDB的连接地址。查看MongoDB的地址信息,请参见副本集实例连接说明或分片集群实例连接说明。
地址示例:mongodb://username:password@s-*****-pub.mongodb.rds.aliyuncs.com:3717
--targetAddress=mongodb://username:password@s-*****-pub.mongodb.rds.aliyuncs.com:3717
diffOutputFile
设置存储差异化结果的文件名。如不填写则默认为
nimo-full-check-diff
。--diffOutputFile=nimo-full-check-diff
parallel
使用多少条线程进行一致性校验。默认值:16。
--parallel=16
sample
设置校验时每个表采样的频率,0为对比表中所有内容。默认值:1000。(1000代表一个表中最多选取1000个文档进行对比)
--sample=1000
filterCollectionWhite
一致性校验白名单。设置需要通过一致性校验的表名。如
--filterCollectionWhite = c1;c2
表示仅对C1和C2表进行一致性校验,剩下的表全部过滤。--filterCollectionWhite=ci;c2
filterCollectionBlack
一致性校验黑名单。设置不需要通过一致性校验的表名。如
--filterCollectionBlack = c1;c2
表示除了C1和C2表,剩下的表全部需要通过一致性校验。--filterCollectionBlack=ci;c2
convertType
迁移阶段是否对Dynamo协议进行了转换。取值:
raw:不对Dynamo协议进行转换,直接写入。
change:对Dynamo协议进行转换。如:将
{"hello":"1"}
转换为{"hello": 1}
。
说明需要和迁移阶段中选择的结果保持一致,如果不一致则检验失败。
--convertType=change
version
打印当前NimoFullCheck的版本号。
说明此参数没有值,如需打印NimoFullCheck版本号,直接加上
--version
字段即可。--version
help
显示NimoFullCheck支持的所有参数信息。
--help
说明校验成功后,屏幕上会打印
full check done!
,如果中途出错导致校验终止,程序会自动关闭并在屏幕上打印对应的错误信息,便于您定位错误原因。