DynamoShakeとも呼ばれるNimoShakeは、Alibaba Cloudによって開発されたデータ同期ツールです。 このツールを使用して、Amazon DynamoDBデータベースからApsaraDB for MongoDBにデータを移行できます。
前提条件
ApsaraDB for MongoDB インスタンスを作成済み。 詳細は、レプリカセットインスタンスの作成 または シャードクラスターインスタンスの作成 をご参照ください。
背景情報
このトピックでは、NimoShakeの使用方法について説明します。
NimoShakeは、Amazon DynamoDBデータベースからデータを移行するために使用されます。 宛先はApsaraDB for MongoDBデータベースである必要があります。 詳細については、「NimoShakeの概要」をご参照ください。
使用上の注意
完全なデータ移行では、ソースデータベースとターゲットデータベースのリソースが消費され、データベースサーバーの負荷が増加する可能性があります。 大量のデータを移行したり、サーバーの仕様が制限されている場合、データベースサービスが利用できなくなることがあります。 データを移行する前に、移行元データベースと移行先データベースのパフォーマンスに対するデータ移行の影響を評価します。 オフピーク時にデータを移行することを推奨します。
用語
再開可能送信: 再開可能送信タスクにおいて、データは複数のチャンクに分割される。 ネットワーク障害または他の原因により送信が中断された場合、タスクは、最初から再開されるのではなく、中断された場所から再開され得る。
説明増分移行では再開可能な送信がサポートされますが、完全移行ではサポートされません。 増分移行タスクが切断により中断され、短い時間範囲で接続が回復した場合、タスクを再開できます。 しかしながら、長期の切断または前のチェックポイントの喪失などのいくつかの状況では、完全な移行が再開され得る。
チェックポイント: チェックポイントに基づいて再開可能な送信が行われます。 デフォルトのチェックポイントは、dynamo-shake-checkpointという名前のApsaraDB for MongoDBデータベースに書き込まれます。 各コレクションはチェックポイントリストを記録し、status_tableコレクションは現在のタスクが完全移行であるか増分移行であるかを記録します。
NimoShakeの特徴
NimoShakeは、最初に完全移行を実行し、次に増分移行を実行します。
完全移行: データ移行とインデックス移行で構成されます。 次の図は、完全移行の基本アーキテクチャを示しています。
データ移行: 次の図に示すように、NimoShakeは複数の同時スレッドを使用してソースデータをプルします。
スレッド
説明
Fetcher
Amazonが提供するプロトコル変換ドライバーを呼び出して、ソースコレクションのデータをバッチでプルし、すべてのソースデータがプルされるまでデータをキューに配置します。
説明1つのフェッチャースレッドのみが提供されます。
Parser
キューからデータを読み取り、データをBSON構造に解析します。 データが解析された後、パーサスレッドは、データを実行スレッドのキューにエントリとして書き込む。 複数のパーサスレッドを起動できます。
FullDocumentParser
パラメーターを設定して、パーサスレッドの数を指定できます。 このパラメーターのデフォルト値は2です。Executor
キューからデータを取得し、データを集約してターゲットApsaraDB for MongoDBデータベースに書き込みます。 1,024エントリで最大16 MBのデータを集約できます。 複数のエグゼキュータスレッドを起動できます。
FullDocumentConcurrency
パラメーターを設定して、エグゼキュータースレッドの数を指定できます。 このパラメーターのデフォルト値は4です。インデックス移行: データ移行が完了した後、NimoShakeはインデックスを書き込みます。 インデックスには、自動生成インデックスとユーザー作成インデックスが含まれます。
自動生成インデックス: パーティションキーとソートキーがある場合、NimoShakeは一意の複合インデックスを作成し、そのインデックスをターゲットApsaraDB for MongoDBデータベースに書き込みます。 また、NimoShakeはパーティションキーのハッシュインデックスを作成し、そのインデックスをApsaraDB for MongoDBデータベースに書き込みます。 パーティションキーしかない場合、NimoShakeはハッシュインデックスと一意のインデックスをターゲットApsaraDB for MongoDBデータベースに書き込みます。
ユーザー作成インデックス: ユーザー作成インデックスがある場合、NimoShakeはプライマリキーに基づいてハッシュインデックスを作成し、インデックスをターゲットApsaraDB for MongoDBデータベースに書き込みます。
増分移行: NimoShakeはデータを移行しますが、生成されたインデックスは移行しません。 次の図は、増分移行の基本アーキテクチャを示しています。
スレッド
説明
Fetcher
ストリーム内のシャードの変化を感知します。
Manager
メッセージを送信するか、メッセージを処理するディスパッチャを作成します。 1つのシャードは1つのディスパッチャに対応します。
Dispatcher
ソースから増分データを取得します。 再開可能な送信では、データは最初ではなく最後のチェックポイントからプルされます。
Batcher
ディスパッチャスレッドによってプルされた増分データを解析、パッケージ化、および集計します。
Executor
集約データを宛先ApsaraDB for MongoDBデータベースに書き込み、チェックポイントを更新します。
Amazon DynamoDBデータベースをApsaraDB for MongoDBに移行する
このセクションでは、Ubuntuを使用してNimoShakeを使用してAmazon DynamoDBデータベースをApsaraDB for MongoDBに移行する方法について説明します。
次のコマンドを実行して、NimoShakeパッケージをダウンロードします。
wget
https://github.com/alibaba/NimoShake/releases/download/release-v1.0.13-20220411/nimo-shake-v1.0.13.tar.gz
説明最新のNimoShakeパッケージをダウンロードすることを推奨します。 ダウンロードアドレスの詳細については、「NimoShake」をご参照ください。
次のコマンドを実行して、NimoShakeパッケージを解凍します。
tar zxvf nimo-shake-v1.0.13.tar.gz
解凍後、
cd nimo
nimoフォルダにアクセスするには、vi nimo-shake.conf
コマンドを実行して、NimoShake設定ファイルを開きます。NimoShakeの次の表のパラメーターを設定します。
パラメーター
説明
例
id
移行タスクのID。カスタマイズ可能です。 このIDは、pidファイルと、移行タスクのログ名、チェックポイントの詳細を格納するデータベースの名前、ターゲットデータベースの名前などのその他の情報を表示するために使用されます。
id = nimo-shake
log.file
ログファイルのパス。 このパラメーターが指定されていない場合、ログはstdoutで表示されます。
log.file = nimo-shake.log
log.level
生成されるログのレベル。 有効な値:
none: ログは生成されません。
error: エラーメッセージを含むログが生成されます。
warn: 警告情報を含むログが生成されます。
info: システムステータスを示すログが生成されます。
debug: デバッグ情報を含むログが生成されます。
デフォルト値: info
log.level = info
log.buffer
ログバッファリングを有効にするかどうかを指定します。 有効な値:
true: ログバッファリングが有効です。 ログバッファリングにより、高いパフォーマンスが保証されます。 ただし、移行タスクが終了または中断されると、いくつかの最新のログエントリが失われる可能性があります。
false: ログバッファリングは無効です。 ログバッファリングを無効にすると、パフォーマンスが低下する可能性があります。 ただし、移行タスクが終了または中断されると、すべてのログエントリが表示されます。
デフォルト値:true
log.buffer = true
system_profile
pprofポート。 これは、積み重ねたコルーチン情報のデバッグと表示に使用されます。
system_profile = 9330
http_profile
HTTPポート。 このポートを有効にすると、インターネット経由でNimoShakeの現在のステータスを表示できます。
http_profile = 9340
sync_mode
データ移行のタイプ。 有効な値:
all: 完全移行と増分移行が実行されます。
full: 完全移行のみが実行されます。
incr: 増分移行のみが実行されます。
デフォルト値: all。
説明完全移行と増分移行はデフォルトで実行されます。 完全移行または増分移行のみを実行する場合は、パラメーター値をfullまたはincrに変更します。
sync_mode=すべて
source.access_key_id
Amazon DynamoDBデータベースへのアクセスに使用されるAccessKey ID。
source.access_key_id = xxxxxxxxxxx
source.secret_access_key
Amazon DynamoDBデータベースへのアクセスに使用されるAccessKeyシークレット。
source.secret_access_key = xxxxxxxxxx
source.session_token
Amazon DynamoDBデータベースへのアクセスに使用される一時キー。 一時キーがない場合は、このパラメーターをスキップできます。
source.session_token = xxxxxxxxxx
source.region
Amazon DynamoDBデータベースが存在するリージョン。 使用可能なリージョンがない場合は、このパラメーターをスキップできます。
source.region = us-east-2
source.session.max_retries
セッション失敗後のリトライの最大回数。
source.session.max_retries = 3
source.session.timeout
セッションのタイムアウト。 値0は、セッションタイムアウトが無効であることを示します。 単位:ミリ秒。
source.session.timeout = 3000
filter.collection.white
移行するコレクションの名前。 たとえば、
filter.collection.white = c1;c2
は、c1コレクションとc2コレクションが移行され、他のコレクションが除外されることを示します。説明filter.collection.whiteおよびfilter.collection.blackパラメーターは指定できません。 それ以外の場合は、すべてのコレクションが移行されます。
filter.collection.white = c1;c2
filter.collection.black
除外するコレクションの名前。 たとえば、
filter.collection.black = c1;c2
は、c1コレクションとc2コレクションが除外され、他のコレクションが移行されることを示します。説明filter.collection.whiteおよびfilter.collection.blackパラメーターは指定できません。 それ以外の場合は、すべてのコレクションが移行されます。
filter.collection.black = c1;c2
qps.full
完全移行時の1秒あたりの
scan
コマンドの最大呼び出し回数。scan
コマンドの実行頻度を制限するために使用します。 デフォルト値は 1000 です。qps.full = 1000
qps.full.batch_num
完全移行で1秒あたりにプルされたデータエントリの数。 デフォルト値: 128
qps.full.batch_num = 128
qps.incr
増分移行の1秒あたりの
GetRecords
コマンドの最大呼び出し数。GetRecords
コマンドの実行頻度を制限するために使用します。 デフォルト値は 1000 です。qps.incr = 1000
qps.incr.batch_num
増分移行で1秒あたりにプルされるデータエントリの数。 デフォルト値: 128
qps.incr.batch_num = 128
target.type
ターゲットデータベースのカテゴリ。 有効な値:
mongodb: ApsaraDB for MongoDBデータベース。
target.type = mongodb
target.mongodb.type
ターゲットApsaraDB for MongoDBデータベースのカテゴリ。 有効な値:
replica: レプリカセットインスタンス。
sharding: シャードクラスタインスタンス。
target.mo ngodb.type=シャーディング
target.address
ターゲットApsaraDB for MongoDBデータベースの接続アドレス。ApsaraDB for MongoDBインスタンスの接続文字列にすることができます。.
ApsaraDB For MongoDBインスタンスの接続文字列を取得する方法の詳細については、「レプリカセットインスタンスへの接続」または「シャードクラスターインスタンスへの接続」をご参照ください。
target.address = mongodb:// username:password @ s-***** -pub.mongodb.rds.aliyuncs.com:3717
target.db.exist
コピー先の別のコレクションと同じ名前の既存のコレクションを処理する方法を指定します。 有効な値:
rename: NimoShakeは、名前にタイムスタンプサフィックスを追加することにより、別のコレクションと同じ名前の既存のコレクションの名前を変更します。 たとえば、NimoShakeはc1をc1.2019-07-01Z12:10:11に変更します。
警告この操作は、宛先コレクションの名前を変更し、ビジネスの中断を引き起こす可能性があります。 データ移行の前に準備をする必要があります。
drop: NimoShakeは、別のコレクションと同じ名前の既存のコレクションを削除します。
このパラメーターが指定されておらず、宛先に別のコレクションと同じ名前のコレクションがすでに含まれている場合、移行タスクは終了し、エラーメッセージが返されます。
target.db.exist = drop
full.concurrency
完全移行で同時に移行できるコレクションの最大数。 デフォルト値: 4。
full.concurrency = 4
full.document.concurrency
完全移行のパラメーター。 コレクション内のドキュメントを宛先に書き込むために同時に使用されるスレッドの最大数。 デフォルト値: 4。
full.doc ument.concurrency = 4
full.document.parser
完全移行のパラメーター。 Dynamoプロトコルを宛先の対応するプロトコルに変換するために同時に使用されるパーサスレッドの最大数。 デフォルト値:2
full.doc ument.parser = 2
full.enable_index.user
完全移行のパラメーター。 ユーザー作成インデックスを移行するかどうかを指定します。 有効な値:
true
false
full.enable_index.user = true
full.exe cutor.insert_on_dup_update
完全移行のパラメーター。 コピー先に同じキーが存在する場合、
INSERT
ステートメントをUPDATE
ステートメントに変更するかどうかを指定します。 有効な値:true
false
full.exe cutor.insert_on_dup_update = true
increase.exe cutor.insert_on_dup_update
増分移行のパラメーター。 コピー先に同じキーが存在する場合、
INSERT
ステートメントをUPDATE
ステートメントに変更するかどうかを指定します。 有効な値:true
false
increase.exe cutor.insert_on_dup_update = true
increase.executor.upsert
増分移行のパラメーター。 宛先にキーがない場合、
UPDATE
操作をUPSERT
操作に変更するかどうかを指定します。 有効な値:true
false
説明UPSERT
操作は、指定されたキーが存在するかどうかをチェックします。 キーが存在する場合、UPDATE
操作が実行されます。 そうでなければ、INSERT
操作が実行される。increase.exe cutor.upsert = true
convert.type
増分移行のパラメーター。 Dynamoプロトコルを変換するかどうかを指定します。 有効な値:
raw: Dynamoプロトコルを変換せずにデータを直接書き込みます。
change: Dynamoプロトコルを変換します。 たとえば、NimoShakeは
{"hello":"1"}
を{"hello": 1}
に変換します。
convert.type = change
increase.concurrency
増分移行のパラメーター。 同時にキャプチャできるシャードの最大数。 デフォルト値: 16。
increase.concurrency = 16
checkpoint.type
チェックポイント情報を格納するストレージのタイプ。 有効な値:
mongodb: チェックポイント情報はApsaraDB for MongoDBデータベースに保存されます。 この値は、
target.type
パラメーターがmongodb
に設定されている場合にのみ使用できます。file: チェックポイント情報はコンピュータに保存されています。
checkpoint.type = mongodb
checkpoint.address
チェックポイント情報の格納に使用されるアドレス。
checkpoint.type
パラメーターがmongodb
に設定されている場合、ApsaraDB for MongoDBデータベースの接続文字列を入力します。 このパラメーターが指定されていない場合、チェックポイント情報はターゲットApsaraDB for MongoDBデータベースに保存されます。 ApsaraDB For MongoDBインスタンスの接続文字列を表示する方法の詳細については、「レプリカセットインスタンスへの接続」または「シャードクラスターインスタンスへの接続」をご参照ください。checkpoint.type
パラメーターがfile
に設定されている場合、NimoShakeファイルのパスに基づく相対パスを入力します。 例: checkpoint このパラメーターを指定しない場合、チェックポイント情報はチェックポイントフォルダーに保存されます。
checkpoint.address = mongodb:// username:password @ s-***** -pub.mongodb.rds.aliyuncs.com:3717
checkpoint.db
チェックポイント情報が格納されているデータベースの名前。 このパラメーターを指定しない場合、データベース名は
<Task ID>-checkpoint
形式になります。 例: nimoshake-checkpoint。checkpoint.db = nimoshake-checkpoint
次のコマンドを実行して、設定されたnimo-shake.confファイルを使用してデータ移行を開始します。
. /nimo-shake.linux -conf=nimo-shake.conf
説明完全な移行が完了したら、
完全な同期が完了しました!
が画面に表示されます。 エラーにより移行が終了した場合、NimoShakeは自動的に停止し、エラーのトラブルシューティングを行うための対応するエラーメッセージが画面に表示されます。