ディスクが不足している場合は、明らかに大きなディスクを入手する必要があります。
データを移行する方法はいくつかありますが、実際には必要な稼働時間の種類によって異なります。もちろん、最初のステップには、マシンをバンドルして新しいボリュームを作成することが含まれます。
これらのヒントは、最も簡単なものから最も難しいものへと進みます。
データベースを数分間完全にオフラインにすることはできますか?
もしそうなら、これを行います(コピーによる移行):
- サーバーに新しいEBSをマウントします。
- アプリがMongoに接続するのを停止します。
- mongodをシャットダウンし、すべてが書き込まれるのを待ちます(ログを確認します)
- すべてのデータファイル(およびおそらくログ)を新しいEBSボリュームにコピーします。
- コピーの実行中に、mongod開始スクリプト(または構成ファイル)を更新して、新しいボリュームを指すようにします。
- mongodを起動し、接続を確認します
- アプリを再起動します。
データベースをほんの数分間オフラインにすることはできますか?
その場合は、これを行います(スレーブ と切り替え):
- 新しいインスタンスを起動し、そのサーバーに新しいEBSをマウントします。
- mongodを現在のデータベースを指す--slaveとしてインストール/開始します。 (現在を--masterとして再起動する必要がある場合があります)
- スレーブは新しい同期を実行します。スレーブが最新になったら、「切り替え」を行います(次のステップ)。
- システムからの書き込みをオフにします。
- 元のmongodプロセスをシャットダウンします。
- 「新しい」モンゴッドをスレーブではなくマスターとして再起動します。
- 新しいマスターを指すシステム書き込みを再度アクティブにします。
これらの最後の3つのステップは、数分または数秒で正しく実行されます。
ダウンタイムを許容できませんか?
その場合は、これを実行します( master-master ):
- 新しいインスタンスを起動し、そのサーバーに新しいEBSをマウントします。
- 現在のデータベースに対してマスターおよびスレーブとしてmongodをインストール/起動します。 (マスターとして現在を再起動する必要があるかもしれません、最小限のダウンタイム?)
- 新しいコンピューターは新しい同期を実行する必要があります。
- 新しいコンピューターが最新の状態になったら、システムを切り替えて新しいサーバーを指すようにします。
この最後のバージョンが実際に最高のように見えることは知っていますが、(この記事の執筆時点では)少し厄介なことがあります。その理由は、特に両方をアクティブにしていない場合は特に、「マスター-マスター」レプリケーションで多くの問題が発生したためです。
この方法を使用する場合は、最初に小さな練習を実行することを強くお勧めします。ここで何かが爆撃された場合、Mongoはすべてのデータファイルを単に消去する可能性があり、それにより、より多くのものを削除する効果があります。
これの良いバージョンを入手したら、コマンドを投稿してください。実際に動作することを確認したいと思います。