web-dev-qa-db-ja.com

初期同期なしにMongoDBレプリケーションを構成できません

本番サーバーに大きなMongoDBデータベースがあり、それをレプリカセットとして設定します。両方のサーバーでレプリカセットオプションを有効にすると、最初からデータの同期が自動的に開始されることを理解しています。ただし、最初から同期する必要はありません。代わりに、MySQLレプリケーションのように構成します。

次のプロセスを実行したいと思います。

  • プライマリからダンプを取る
  • セカンダリに復元します
  • 両方のサーバーで、構成ファイルのレプリカセットを有効にする
  • MongoDBを再起動します。
  • プライマリサーバーに移動し、セカンダリノードを追加します。

これは可能ですか?または、これに対する他の代替ソリューションはありますか?

2
Bhuvanesh

なぜ2組の重い物を持ち上げるのですか? MongoDBに任せてください。

この例では、SECONDARYのIPが10.30.50.70で、ホスト名myslaveであると仮定します。

ステップ01:プライマリでのみレプリカセットを有効にする

PRIMARYの/etc/mongodb.confに次の変更を加えます

  • /etc/mongodb.conf で認証を有効にする
    • セキュリティYAMLタグの下のauthorization: enabled(MongoDB 2.6以降)
    • auth=true(MongoDB 2.4を使用している場合)
  • レプリケーションを有効にします(自分の名前をレプリカセットmyreplica)と想定します。
    • レプリケーションYAMLタグの下にreplSetName: myreplicaを配置します(MongoDB 2.6以降)
    • Put replSet = myreplica(MongoDB 2.4)

ステップ02:PRIMARYでMongoDBを再起動します

service mongod restart

手順03:PRIMARYでレプリカセットを開始する

rs.initiate();

注:この時点で、1つのノードのレプリカセットがあります。

ステップ04:SECONDARYでステップ01および02を実行します

注:この時点で、SECONDARYはレプリカセットが有効になっていますが、複製されていません

ステップ05:今、SECONDARYPRIMARYに追加します

PRIMARYに移動して実行します

rs.add("10.30.50.70:27017")

または

rs.add("myslave:27017")

手順06:レプリカセットの状態を確認する

これを繰り返し実行します

rs.status()

このコマンドがフリーズしても心配する必要はありません。すべてのインデックスを再構築します。

SECONDARYで別のsshセッションを開き、tail -fファイルでmongodb.logを実行して、インデックスの再構築の進行状況を確認できます。

なぜこれがこの方法なのか???

MongoDBは基本的に、1回の操作でレプリケーションを開始し、データをコピーし、インデックスを再構築します。示されているように、このプロセスは、最初のレプリカセットを構築するときには決して自動ではありません。このようにすると、エラーが発生しにくくなります。

1
RolandoMySQLDBA

Rolandoに感謝します。

幸い、私は同じことをGoogleグループに投稿しています。MongoDBの誰かが私のシナリオを修正するのを手伝ってくれました。レプリケーションを直接ダンプ、復元、構成することはできません。大規模なデータベースのレプリケーションを有効にする手順に従ってください。

1. MongoDBディレクトリをセカンダリサーバーにコピーします。

2.プライマリ構成ファイルでレプリケーションを有効にし、プライマリmonogDBを再起動します。

3. rs.initiate()をプライマリで実行します。

4. MongoDBをセカンダリで停止し、データディレクトリをプライマリデータディレクトリに置き換えます。

5.設定ファイルでレプリケーションを有効にし、mongodサービスを開始します。

6. primaryおよびrs.add(secondary:port)に移動します。

  1. セカンダリサーバーがインデックスと更新されたデータを再構築していることがわかります。
0
Bhuvanesh