使用NimoFullCheck校验迁移数据的一致性

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

前提条件

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

背景信息

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

校验主要分为如下两个部分:

  • 轮廓校验:轮廓校验会对DynamoDB表以及MongoDB集合中数目的一致性进行校验,如果数目不一致则直接退出,终止后续的校验,并在屏幕上打印错误信息,便于您定位错误原因。

  • 精确校验:轮廓校验通过后会进入精确校验阶段。精确校验从源端拉取数据并解析,如果有唯一索引则根据唯一索引对比MongoDB数据的一致性。如果没有唯一索引则逐一对比两端所有数据(速度较慢)。

注意事项

  • NimoFullCheck仅支持针对全量数据迁移的校验。如果在增量同步阶段使用NimoShake进行校验,那么得到的结果必然是不一致。

  • NimoFullCheck仅支持单向校验,即仅支持以MongoDB端的数据为基准对DynamoDB的数据进行一致性校验。

操作步骤

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

  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,详情请参见使用NimoShakeAmazon 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表示仅对C1C2表进行一致性校验,剩下的表全部过滤。

    --filterCollectionWhite=ci;c2

    filterCollectionBlack

    一致性校验黑名单。设置不需要通过一致性校验的表名。如--filterCollectionBlack = c1;c2表示除了C1C2表,剩下的表全部需要通过一致性校验。

    --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! ,如果中途出错导致校验终止,程序会自动关闭并在屏幕上打印对应的错误信息,便于您定位错误原因。