NimoFullCheck是阿里云自主研发的用于检验源端DynamoDB和目的端MongoDB数据一致性的工具。本文档介绍如何使用NimoFullCheck进行一致性校验。

前提条件

您已通过NimoShake将DynamoDB迁移到阿里云数据库。详情请参见使用NimoShake将Amazon DynamoDB迁移至阿里云

背景信息

在通过NimoShake将DynamoDB迁移到阿里云数据库之后,您可以使用NimoFullCheck工具对两端的数据进行一致性校验。

校验主要分为如下两个部分:
  • 轮廓校验:轮廓校验会对DynamoDB表以及MongoDB集合中数目的一致性进行校验,如果数目不一致则直接退出,终止后续的校验,并在屏幕上打印错误信息,便于您定位错误原因。
  • 精确校验:轮廓校验通过后会进入精确校验阶段。精确校验从源端拉取数据并解析,如果有唯一索引则根据唯一索引对比MongoDB数据的一致性。如果没有唯一索引则逐一对比两端所有数据(速度较慢)。

注意事项

  • NimoFullCheck仅支持针对全量数据迁移的校验。如果在增量同步阶段使用NimoShake进行校验,那么得到的结果必然是不一致。
  • NimoFullCheck仅支持单向校验,即仅支持以MongoDB端的数据为基准对DynamoDB的数据进行一致性校验。

操作步骤

本步骤以Ubuntu系统为例,介绍如何使用NimoFullCheck校验DynamoDB和MongoDB的一致性。

  1. 在系统中执行如下命令下载NimoShake包,等待下载完成。
    wget https://github.com/alibaba/NimoShake/releases/download/release-v1.0.0-20191015/nimo.tar.gz
    说明 建议下载最新版本的NimoShake包,下载地址请参见NimoShake
  2. 执行如下命令解压NimoShake包。
    tar zxvf nimo.tar.gz
  3. 解压完成后,输入cd nimo命令进入nimo文件夹。
  4. 执行如下格式的命令对NimoFullCheck注入必要参数并开始校验。
    ./nimo-full-check.linux --<参数名>=<值> --<参数名>=<值>
    各参数的说明如下所示:NimoFullCheck参数
    参数名 说明 示例值
    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! ,如果中途出错导致校验终止,程序会自动关闭并在屏幕上打印对应的错误信息,便于您定位错误原因。