以下を用いた移行: mongomirror
項目一覧
mongomirror
は、既存の MongoDB レプリカセットから MongoDB Atlas レプリカセットにデータを手動で移行するためのツールです。mongomirror
では、既存のレプリカセットまたはアプリケーションをシャットダウンする必要はなく、ユーザーまたはロール データをインポートしたり、 config
データベースをコピーしたりしません。
mongomirror
を次の場合に使用します:
MongoDB Atlas の外部でホストされている MongoDB デプロイから MongoDB Atlas クラスターへのデータセットの 1 回限りの移行の実行。
ある Atlas クラスターから別の Atlas クラスターへのデータセットの 1 回限りの移行の実行。
「データのインポートおよび移行ツールの選択」も参照してください。
前提条件
ソース MongoDB の配置
ソース MongoDB の配置はレプリカセットである必要があります。ソースがスタンドアロンの MongoDBデプロイである場合は、
mongomirror
実行中、 を実行してスタンドアロンをレプリカセットに変換します。ソース レプリカセットでは MongoDB バージョン 2.6 以降を実行する必要があります。
ソースMongoDBレプリカセットは、
M0
無料クラスターまたはM2/M5
共有クラスターにはできません。手順中はいつでも
featureCompatibilityVersion
フラグを変更しないでください。MongoDB 4.4以前のバージョンから MongoDB 5.0以降のバージョンを実行する Atlas クラスターに移行する場合は、コレクションからgeoHaystack インデックスをすべて削除します。
mongomirror
は TTL インデックスと互換性がありません。既存の TTL インデックスをすべて削除し、移行プロセスが完了した後に再度ビルドします。既存のインデックスがクエリ パフォーマンスにとって重要で、削除を避けたい場合は、別の方法についてサポートにお問い合わせください。移行プロセスの実行中は、
renameCollection
コマンドの使用や、$out
集計ステージを含む集計パイプラインの実行など、名前空間の変更を行わないでください。最初の同期は
mongomirror
プロセスの一部として実行され、renameCollection
コマンドや$out
集約ステージは使用できません。最初の同期の段階でプライマリを再起動しないでください。
お使いの MongoDB 配置に、インデックス キー制限を超えるキーを持つインデックスが含まれている場合は、ライブ移行を開始する前に、インデックスを変更して、大きすぎるキーが含まれないようにします。
ソース レプリカ セットで必要なアクセス
mongomirror
には、ソース レプリカ セットへのネットワーク アクセス権が必要です。ソース レプリカ セットに認証が必要な場合は、mongomirror
を実行するときにユーザー認証情報を含める必要があります。少なくとも次の権限を持つデータベース ユーザーを指定する必要があります。
すべてのデータベースとコレクションを読み取ります。
admin
データベースのreadAnyDatabase
ロールがこの要件をカバーします。oplog を読みとります。「Oplog アクセス権限」を参照してください。
getParameter
コマンドを実行します。
そのようなユーザーが存在しない場合は、ソース MongoDB レプリカセットにユーザーを作成します。MongoDB サーバーのバージョンによって、組み込みロールが異なります。自分の 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 の配置:
M0
無料クラスター、M2
、またはM5
共有クラスターにすることはできません。サーバーレスインスタンスにすることはできません。
レプリカセットでなくてはなりません。
ソースクラスターの MongoDB のバージョンと同じかそれ以降のバージョンが必要です。アップグレード パスを参照してください。
ソース クラスターと重複する名前空間を含めることはできません。
mongomirror
が宛先クラスター上で重複する名前空間を検出すると、プロセスを開始する前に失敗します。宛先クラスターに重複する名前空間が含まれている場合は、--drop
を使用して宛先クラスターからすべてのデータを削除するか、--includeNamespace
を使用してソースクラスターからインポートする名前空間を一覧表示します。そのIP アクセス リストには、以下のいずれかを含めなければなりません。
mongomirror
が稼働しているサーバーのパブリック IP アドレス、またはVPC ピアリング用に設定されている場合は、ピアリングの VPC CIDR ブロック(またはそのサブセット)、あるいはピア VPC のセキュリティ グループのいずれか。
注意
クラスター内の任意のノードのパブリック IP アドレスを確認するには、コマンドラインから
nslookup
ツールを使用します。詳しくは、「Atlas クラスターのパブリック IP の変更」を参照してください。
宛先クラスターで必要なアクセス
mongomirror
には、宛先クラスターへのネットワーク アクセス権が必要です。
mongomirror
を実行するには、Atlas admin
ロールを持つデータベースユーザーを指定する必要があります。詳細については、「データベース ユーザーの追加」を参照してください。
アップグレード パス
mongomirror
は、次の移行パスをサポートします。
重要
6.0.x 以降のソース レプリカセットから 6.0.x 以降の宛先レプリカセットへの移行には、mongomirror
を使用できません。6.0.x 以降のレプリカセットを移行するには、MongoDB を 6.0.13 以上にアップグレードし、このライブ移行手順を使用します。
Source Replica Set MongoDB Version | Target Atlas Replica Set MongoDB Version |
---|---|
5.0 | 4.4, 5.0 |
4.4 | 4.4, 5.0 |
4.2 | 4.4, 5.0 |
4.0 | 4.4, 5.0 |
3.6 | 4.4, 5.0 |
3.4 | 4.4, 5.0 |
3.2 | 4.4, 5.0 |
3.0 | 4.4, 5.0 |
2.6 | 4.4, 5.0 |
注意
5.0 から 4.4にダウングレードするには、ソース FCV
が宛先と一致する必要があります。
ダウンロード mongomirror
注意
macOS 64ビットでは、 mongomirror
ファイルをダウンロードした後、初めて開こうとするとセキュリティ警告が表示されます。 続行するには、「 セキュリティ設定を無効にしてアプリを開く 」を参照してください。
オペレーティング システム | ダウンロード |
---|---|
Amazon Linux 1 | |
Amazon Linux 2 | |
Debian 9.2 | |
Debian 10 | |
macOS 64 ビット | |
RHEL 6.2 | |
RHEL 7.0 | |
RHEL 7.1 PPC64LE | |
RHEL 7.2 s390x | |
RHEL 8.0 | |
RHEL 8.1 PPC64LE | |
SLES 12 | |
SLES 15 | |
Ubuntu 14.04 | |
Ubuntu 16.04 | |
Ubuntu 16.04 ARM | |
Ubuntu 18.04 | |
Ubuntu 18.04 ARM | |
Ubuntu 20.04 | |
Ubuntu 20.04 ARM | |
Windows |
mongomirror
プロセス
mongomirror
を起動すると、次のことを行います。
TLS/SSL 経由で Atlas に接続します。
最初の同期を実行し、コレクションを既存の MongoDB レプリカセットから MongoDB Atlas の宛先クラスターにコピーします。
最初の同期後、レプリカセットの oplog で受信変更を継続的に追跡し、Atlas の宛先クラスターで再生します。
mongomirror
は、config
データベースをコピーしません。バージョン 0.9.0 以降、mongomirror
は、許可する圧縮ライブラリを指定するために--compressors
が使用されると、ソース クラスターまたは宛先クラスターのいずれかでワイヤ圧縮を有効にします注意
バージョン 0.5.0 以降、
mongomirror
では、宛先クラスター上のすべてのインデックスは、ソースクラスターでインデックスがどのように構築されたかに関係なくフォアグラウンドで作成されます。フォアグラウンドインデックスを構築すると、データベース上の他のすべての操作がブロックされます。詳しくは、「格納済みコレクションでのインデックス構築操作」を参照してください。
一度起動すると、mongomirror
はシャットダウンされるまで継続的に次のことを実行します。
最初の同期段階で
mongomirror
をシャットダウンした場合は、mongomirror
を再起動する前に、宛先クラスターが空であることを確認するか、--drop
でmongomirror
を実行します。oplog のテーリング段階で
mongomirror
をシャットダウンすると、このプロセスにより oplog のテーリングが停止します。mongomirror
を再起動することで、--bookmarkFile
を使用して、最後に処理された oplog レコードからテーリングを再開できます。
実行する mongomirror
ソースレプリカセットでデータベースユーザーを設定します。
ソース レプリカセットに認証が必要な場合は、実行中の mongomirror
にユーザー認証情報を含める必要があります。要件については、「ソース レプリカセットで必要なアクセス権限」を参照してください。
mongomirror
を実行するときにこれらの認証情報を指定する必要があるため、このユーザーのユーザー名とパスワードをメモしておきます。
AtlasDatabase Access で、プロジェクトの ページに移動します。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Security見出しの下のDatabase Accessをクリックします。
[データベース アクセス ]ページが表示されます。
ターゲット Atlas クラスターに、データベースユーザーを設定します。
mongomirror
を実行するには、Atlas admin
ロールを持つデータベースユーザーを指定する必要があります。データベースユーザーの作成に関するドキュメントについては、「データベースユーザーの追加」を参照してください。
そのようなユーザーが存在しない場合は、ユーザーを作成します。
まだ表示されていない場合は Database Users タブをクリックします。
Add New Database User をクリックします。
Atlas admin ユーザーを追加します。
mongomirror
を実行するときにこれらの認証情報を指定する必要があるため、新しいユーザーに選択したユーザー名とパスワードをメモしておきます。
IP アクセス リストを更新します。
mongomirror
を実行するホストがクラスターの IPアクセス リストにない場合は、リストをアップデートします。次のいずれかを指定できます。
mongomirror
が実行するサーバーのパブリック IP アドレス、またはVPCピアリング用に設定されている場合、ピアの VPC CIDR ブロック(またはサブネット)、あるいは、ピアVPC のセキュリティー グループのいずれか。
AtlasClusters で、プロジェクトの ページに移動します。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [ Clusters ] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
ターゲット クラスター ホスト情報をコピーします。
Atlas クラスターのホスト名情報は、Atlas ユーザインターフェースから取得できます。
注意
mongomirror
を使用してデータを移行する場合、ドライバーを使用する必要はありません。
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 への切り替え
mongomirror
が最初の同期を完了し、レプリカセットの oplog を追跡したら、宛先 Atlas クラスターに切り替えられます。
クライアント アプリケーションを更新すると Atlas クラスターを使用できます。
クラスター パネルの [Connect] ボタンから提供される Atlas 接続文字列を使用して、クライアント アプリケーションを更新します。
Atlas への接続の詳細については、「ドライバー経由で接続」を参照してください。
モニタリング
mongomirror
は進行状況をターミナルの標準出力にログします。最初の同期中、mongomirror
はコピーしたコレクションごとにプログレス バーをログします。以下に例を挙げます。
2021-08-09T16:35:50.227-0000 [#....................] park.events 2179/34184 (6.4%) 2021-08-09T16:35:50.227-0000 [#############........] zoo.animals 29000/49778 (58.3%)
oplog を追跡する場合、mongomirror
はソース クラスターの最新の oplog エントリーとデスティネーション クラスターで最後に処理された oplog エントリーとの間の遅延時間を秒単位で記録します。以下に例を挙げます。
2016-12-12T16:22:17.027-0800 Current lag from source: 6s
6 秒の遅延時間は、処理された最後の oplog エントリー mongomirror
は、ソースクラスターで使用可能な最新エントリーより 6 秒前に発生したということを示します。
注意
mongomirror
が追いつくのにかかる時間は、1 秒あたりに到着するエントリー数に応じて、6 秒より長くなるか短くなる場合があります。
遅延時間が 0 秒であれば、mongomirror
は、最新の oplog エントリーの 1 秒未満前に到着したエントリーを処理しているということになります。
ソースクラスターにインデックスがある場合、mongomirror
はデスティネーションクラスターに同じインデックスを構築します。進行ログは、インデックス構築プロセスの開始時刻と終了時刻を示します。インデックス構築の進捗状況を見るには、次の方法があります。
宛先クラスターのプライマリ ノードで currentOp コマンドを使用します。
command
フィールドには実行中の操作に関する情報が表示されます。インデックス構築エントリーは、次のようになります。"command" : { "createIndexes" : "perfs", "indexes" : [ { "key" : { "animal" : "text" }, "name" : "animal_text" } ]... 宛先クラスターの mongodb ログ をダウンロードし、インデックス関連の行の最近のエントリーを検索します。インデックスの構築に関連するログ メッセージは次のようになります。
{"t":{"$date":"2021-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
インスタンスが実行されているホスト以外のホストで mongomirror
を実行します。
mongomirror
は、セカンダリがある場合と同様に、ソース レプリカセットのパフォーマンスに影響します。最初の同期段階では、負荷はデータセットのサイズに応じて増加します。
最初の同期が完了すると、負荷は 1 時間あたりに使用される oplog ギガバイトに応じて増えます。
コマンド構文、オプション、および例
mongomirror
のシンタックス、オプション、および例については、mongomirror リファレンス ページをご覧ください。
トラブルシューティング
mongomirror
トラブルシューティングについては、「ライブ移行(プル)の一般的な検証後エラー」を参照してください。