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!
,如果中途出錯導致校驗終止,程序會自動關閉并在屏幕上打印對應的錯誤信息,便于您定位錯誤原因。