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!
,如果中途出錯導致校正終止,程式會自動關閉並在螢幕上列印對應的錯誤資訊,便於您定位錯誤原因。