は、既存の MongoDB レプリカセットから MongoDB Atlas レプリカセットにデータを手動で移行するためのツールです。「mongomirror のダウンロード」を参照してください。
では、既存のレプリカセットまたはアプリケーションをシャットダウンする必要はなく、ユーザーまたはロール データをインポートせず、configデータベース をコピーしません。
以下の場合は を使用します。
MongoDB Atlas の外部でホストされている MongoDB デプロイから MongoDB Atlas クラスターへのデータセットの 1 回限りの移行の実行。
ある Atlas クラスターから別の Atlas クラスターへのデータセットの 1 回限りの移行の実行。
「データのインポートおよび移行ツールの選択」も参照してください。
前提条件
ソース MongoDB の配置
ソースMongoDBデプロイはレプリカセットである必要があります。ソースがスタンドアロンのMongoDBデプロイである場合は、を実行中前に、スタンドアロンをレプリカセットに変換します。
ソース レプリカセットでは MongoDB バージョン 2.6 以降を実行する必要があります。
ソースMongoDBレプリカセットは、無料クラスター(以前は
M0)または Flex クラスターにすることはできません。手順中はいつでも
featureCompatibilityVersionフラグを変更しないでください。MongoDB 4.4以前のバージョンから MongoDB 7.0以降のバージョンを実行する Atlas クラスターに移行する場合は、コレクションからgeoHaystack インデックスをすべて削除します。
TTL インデックスとは互換性がありません。既存の TTL インデックスをすべて削除し、移行プロセスが完了した後に再度ビルドします。既存のインデックスがクエリ パフォーマンスにとって重要で、削除を避けたい場合は、別の方法についてサポートにお問い合わせください 。
移行プロセスの実行中は、
renameCollectionコマンドの使用や、$out集計ステージを含む集計パイプラインの実行など、名前空間の変更を行わないでください。プロセスの一部として実行される最初の同期の一部として、
renameCollectionコマンドまたは$out集計ステージは使用できません。移行の初期同期段階では、プライマリを再起動しないでください。
お使いの MongoDB 配置に、インデックス キー制限を超えるキーを持つインデックスが含まれている場合は、ライブ移行を開始する前に、インデックスを変更して、大きすぎるキーが含まれないようにします。
ソース レプリカ セットで必要なアクセス
には、 ソースレプリカセットへのネットワーク アクセス権が必要です。ソースレプリカセットに認証が必要な場合は、を実行中ときにユーザー認証情報を含めます。少なくとも次の特権を持つデータベースユーザーを指定します。
すべてのデータベースとコレクションを読み取ります。
adminデータベースのreadAnyDatabaseロールがこの要件をカバーします。oplog を読みとります。「Oplog アクセス権限」を参照してください。
getParameterコマンドを実行します。
そのようなユーザーが存在しない場合は、ソースMongoDBレプリカセットにユーザーを作成します。 MongoDB Server のバージョンによって、組み込みロールが異なります。自分のMongoDB Serverバージョンに基づいて組み込みロールを選択し、 で適切なコマンドを実行します。mongosh
ソースクラスターの場合、ユーザーには
readAnyDatabase、clusterMonitor、およびbackupロールが必要です。ライブ移行プロセスを実行するデータベースユーザーがこれらのロールを持っていることを確認するには、
adminデータベースで db.getUser() コマンドを実行します。use admin db.getUser("admin") { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "roles" : [ { "role" : "backup", "db" : "admin" }, { "role" : "clusterMonitor", "db" : "admin" } { "role" : "readAnyDatabase", "db" : "admin" } ] } ... さらに、ソースクラスターのデータベースユーザーには、
adminデータベース上の oplog を読み取るロールが必要です。詳細については、「Oplog アクセス」を参照してください。MongoDB 3.4 を実行しているソースクラスターの場合、ユーザーには少なくとも
clusterMonitorとreadAnyDatabaseの両方のロールが必要です。以下に例を挙げます。use admin db.createUser( { user: "mySourceUser", pwd: "mySourceP@$$word", roles: [ "clusterMonitor", "readAnyDatabase" ] } ) MongoDB 3.2 を実行しているソースクラスターの場合、ユーザーには少なくとも
clusterManagerとreadAnyDatabaseの両方のロールと、localデータベースに対する読み取りアクセス権が必要です。これには、以下のコマンドで作成できるカスタムロールが必要です。use admin db.createRole( { role: "migrate", privileges: [ { resource: { db: "local", collection: "" }, actions: [ "find" ] } ], roles: ["readAnyDatabase", "clusterManager"] } ) db.createUser( { user: "mySourceUser", pwd: "mySourceP@$$word", roles: [ "migrate" ] } ) MongoDB 2.6 または 3.0 を実行しているソースクラスターの場合、ユーザーには少なくとも
readAnyDatabaseロールが必要です。以下に例を挙げます。use admin db.createUser( { user: "mySourceUser", pwd: "mySourceP@$$word", roles: [ "readAnyDatabase" ] } )
宛先 Atlas の配置
宛先 Atlas の配置:
無料クラスターまたは Flex クラスターにすることはできません。
レプリカセットでなくてはなりません。
ソースクラスターのMongoDB のバージョンと同じかそれ以降のバージョンが必要です。アップグレード パス を参照してください。
ソースクラスターと重複する名前空間を含めることはできません。が宛先クラスター上で重複する名前空間を検出すると、プロセスを開始する前に失敗します。宛先クラスターに重複する名前空間が含まれている場合は、
--dropを使用して宛先クラスターからすべてのデータを削除するか、--includeNamespaceを使用してソースクラスターからインポートする名前空間を一覧表示します。そのIP アクセス リストには、以下のいずれかを含めなければなりません。
が実行中いるサーバーのパブリックIPアドレス、または
VPC ピアリング用に設定されている場合は、ピアリングの VPC CIDR ブロック(またはそのサブセット)、あるいはピア VPC のセキュリティ グループのいずれか。
注意
クラスター内の任意のノードのパブリック IP アドレスを確認するには、コマンドラインから
nslookupツールを使用します。詳しくは、「Atlas クラスターのパブリック IP の変更」を参照してください。
宛先クラスターで必要なアクセス
には、宛先クラスターへのネットワーク アクセス権が必要です。
実行するには、Atlas admin ロールを持つデータベースユーザーを指定する必要があります。詳細については、 「データベースユーザーの設定」 を参照してください。
アップグレード パス
重要
は、次の移行パスをサポートします。
ソース レプリカセット MongoDBバージョン | ターゲット Atlas レプリカセット MongoDBバージョン |
|---|---|
5.0 | 6.0 |
4.4 | 6.0 |
4.2 | 6.0 |
4.0 | 6.0 |
3.6 | 6.0 |
3.4 | 6.0 |
3.2 | 6.0 |
3.0 | 6.0 |
2.6 | 6.0 |
ダウンロード mongomirror
注意
macOS 64 ビットでは、mongomirrorファイルをダウンロードした後、初めて開こうとするとセキュリティアラートが表示されます。続行するには、「 セキュリティ設定を無効にしてアプリを開く 」を参照してください。
オペレーティング システム | ダウンロード |
|---|---|
Amazon Linux 1 | |
Amazon Linux 2 | |
Debian 9.2 | |
Debian 10 | |
macOS 64 ビット | |
RHEL 7.0 | |
RHEL 7.1 PPC64LE | |
RHEL 7.2 s390x | |
RHEL 8.0 | |
RHEL 8.1 PPC64LE | |
SLES 12 | |
SLES 15 | |
Ubuntu 16.04 | |
Ubuntu 16.04 ARM | |
Ubuntu 18.04 | |
Ubuntu 18.04 ARM | |
Ubuntu 20.04 | |
Ubuntu 20.04 ARM | |
Windows |
mongomirror プロセス
を起動すると、次のことを行います。
TLS 経由で Atlas に接続します。
最初の同期を実行し、コレクションを既存の MongoDB レプリカセットから MongoDB Atlas の宛先クラスターにコピーします。
最初の同期後、レプリカセットのoplogで受信変更を継続的に追跡し、Atlas の宛先クラスターで再生します。は
configデータベースをコピーしません。ソース クラスターまたは宛先クラスターのいずれかで有効にし、--compressorsを使用して許可される圧縮ライブラリを指定すると、 はワイヤ圧縮を使用します。では、宛先クラスター上のすべてのインデックスは、ソースクラスターでインデックスがどのようにビルドされたかに関係なくフォアグラウンドで作成されます。フォアグラウンドインデックス構築は、データベース上の他のすべての操作をブロックします。詳しくは、格納済みコレクションでのインデックス構築操作 を参照してください。
一度起動すると、 はシャットダウンされるまで継続的に次のことを実行します。
最初の同期段階でシャットダウンした場合は、再起動する前に、宛先クラスターが空であることを確認するか、
--dropを使用して実行してください。oplog のテーリング段階で をシャットダウンすると、このプロセスにより oplog のテーリングが停止します。 を再起動することで、
--bookmarkFileを使用して、最後に処理されたoplogレコードからテーリングを再開できます。
実行する mongomirror
ソースレプリカセットでデータベースユーザーを設定します。
ソースレプリカセットに認証が必要な場合は、を実行中ときにユーザー認証情報を含める必要があります。要件については、ソース レプリカセットで必要なアクセス権限 を参照してください。
mongomirror を実行するときにこれらの認証情報を指定する必要があるため、このユーザーのユーザー名とパスワードをメモしておきます。
Atlas で、プロジェクトの [Database & Network Access] ページに移動します。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Security見出しの下のDatabase & Network Accessをクリックします。
[ データベースとネットワーク アクセス ] ページが表示されます。
ターゲット Atlas クラスターに、データベースユーザーを設定します。
実行するには、Atlas admin ロールを持つデータベースユーザーを指定する必要があります。データベースデータベースユーザーの作成に関するドキュメントについては、データベースユーザーの構成を参照してください。
そのようなユーザーが存在しない場合は、ユーザーを作成します。
まだ表示されていない場合は Database Users タブをクリックします。
Add New Database User をクリックします。
Atlas admin ユーザーを追加します。
を実行中ときにこれらの認証情報を指定する必要があるため、新しいユーザーに選択したユーザー名とパスワードをメモしておきます。
IP アクセス リストを更新します。
実行するホストがクラスターのIPアクセス リストにない場合は、リストを更新します。次のいずれかを指定できます。
が実行されるサーバーのパブリックIPアドレス、または
VPCピアリング用に設定されている場合、ピアの VPC CIDR ブロック(またはサブネット)、あるいは、ピア VPC のセキュリティ グループのいずれか。
Atlas で、プロジェクトの [Clusters] ページに移動します。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
サイドバーで、 Database見出しの下のClustersをクリックします。
[ Clusters (クラスター) ] ページが表示されます。
ターゲット クラスター ホスト情報をコピーします。
Atlas クラスターのホスト名情報は、Atlas ユーザインターフェースから取得できます。
注意
を使用してデータを移行する場合、ドライバーを使用する必要はありません。
Connect ダイアログボックスから [Shell] をクリックします。
ドロップダウンリストから、[3.4 or earlier] を選択します。接続文字列は次の例のようになります。この例は、読みやすくするために複数行に分割されています。
mongodb://<db_username>:<db_password>@ 00.foo.mongodb.net:27017, 01.foo.mongodb.net:27017, 02.foo.mongodb.net:27017/test? ssl=true&replicaSet=myAtlasRS&authSource=admin テキスト エディターで、
replicaSetの値を貼り付け、フォワードスラッシュ(/)を追加し、次の例のようにホスト リストをカンマで区切った値として追加します。myAtlasRS/00.foo.mongodb.net:27017,01.foo.mongodb.net:27017,02.foo.mongodb.net:27017
この値を次のステップの --destination に使用します。
移行プロセスを完了するには、データ転送を確認して Atlas に切り替えます。
Atlas への切り替え
が最初の同期を完了し、レプリカセットのoplogを追跡したら、宛先 Atlas クラスターに切り替えられます。
データ転送を確認します。
次のいずれかの検証方法を使用して、データが宛先クラスターに転送されていることを確認します。次の検証方法は、ソースまたは宛先クラスターがデータを書き込んでいないことを確認した後にのみ使用してください。
ドキュメント数を取得し、クラスター間で比較するためには、ソースクラスターと宛先クラスターの各コレクションで db.collection.countDocuments() メソッドを使用します。
ソースクラスターのコレクションをクエリし、正しいドキュメント、インデックス、コレクション、メタデータ、およびビューが宛先クラスターに同じ値で存在することを確認するスクリプトを書きます。スクリプト内で、ソースクラスターおよび宛先クラスターに次のコマンドを使用します。
インデックスの転送を確認し、結果を比較するには、ddb.collection.getIndexes() メソッドを使用します。
メタデータの転送を確認し、結果を比較するには、db.getCollectionInfos() メソッドを使用します。
クライアント アプリケーションを更新すると Atlas クラスターを使用できます。
クラスター パネルの [Connect] ボタンから提供される Atlas 接続文字列を使用して、クライアント アプリケーションを更新します。
Atlas への接続の詳細については、「クライアント ライブラリ経由でクラスターに接続する」を参照してください。
モニタリング
は進行状況をターミナルの標準出力にログします。最初の同期中に、 はコピーしたコレクションごとにプログレス バーをログします。(例: )。
2024-08-09T16:35:50.227-0000 [#....................] park.events 2179/34184 (6.4%) 2024-08-09T16:35:50.227-0000 [#############........] zoo.animals 29000/49778 (58.3%)
oplog を追跡する場合、 はソースクラスターの最新のoplogエントリーとデスティネーション クラスターで最後に処理されたoplogエントリーとの間の遅延時間を秒単位で記録します。(例: )。
2024-12-12T16:22:17.027-0800 Current lag from source: 6s
6 秒の遅延時間は、処理された最後のoplogエントリー は、ソースクラスターで使用可能な最新エントリーより 6 秒前に発生したということを示します。
注意
が追いつくのにかかる時間は、1 秒あたりに到着するエントリー数に応じて、6 秒より長くなるか短くなる場合があります。
遅延時間が 0 秒であれば、 は、最新のoplogエントリーの 1 秒未満前に到着したエントリーを処理しているということになります。
ソースクラスターにインデックスがある場合、 はデスティネーションクラスターに同じインデックスをビルドします。進行ログは、インデックス作成プロセスの開始時刻と終了時刻を示します。インデックス構築の進捗状況を見るには、次の方法があります。
宛先クラスターのプライマリ ノードで currentOp コマンドを使用します。
commandフィールドには実行中の操作に関する情報が表示されます。インデックス構築エントリーは、次のようになります。"command" : { "createIndexes" : "perfs", "indexes" : [ { "key" : { "animal" : "text" }, "name" : "animal_text" } ]... 宛先クラスターの mongodb ログ をダウンロードし、インデックス関連の行の最近のエントリーを検索します。インデックスの構築に関連するログ メッセージは次のようになります。
{"t":{"$date":"2024-08-09T16:35:50.227+00:00"},"s":"I", "c":"INDEX", "id":20447, "ctx":"conn1080","msg":"Index build: completed","attr":{"buildUUID":{"uuid":{"$uuid":"c4a62739-bf19-456d-bbd6-7baa29f1063b"}}}}
パフォーマンス
ネットワークと CPU リソースの競合を回避するには、レプリカセットの mongod インスタンスホスト以外のホストで 実行する。
は、セカンダリがある場合と同様に、ソース レプリカセットのパフォーマンスに影響します。
最初の同期段階では、負荷はデータセットのサイズに応じて増加します。
最初の同期が完了すると、負荷は 1 時間あたりに使用される oplog ギガバイトに応じて増えます。
コマンド構文、オプション、および例
の構文、オプション、および例については、 mongomirror参照ページ をご覧ください。