問題タブ [mongodb-replica-set]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1527 参照

mongodb - MongoDB レプリカ セットの非投票メンバーはプライマリになることができますか?

プライマリに接続された mongo シェルを介してレプリカ セット メンバーの投票数を 0 に設定しようとしていますが、呼び出すとエラーが発生します。

私がすることは:

conf.members [0]SECONDARYのドキュメント conf です

このリンクで、MongoDB のドキュメントには次のように記載されています。

...

このシーケンスは、rs.conf() の出力のメンバー配列の順序に従って、セットの 4 番目、5 番目、および 6 番目のメンバーに 0 票を与えます。この設定により、セットはこれらのメンバーをプライマリとして選出できますが、選挙で投票することはできません。

...

しかし、返されたエラー メッセージには、non-votingの優先順位 = 0 を設定する必要があることが示されていますが、これはメンバーがプライマリになれないことを意味しています。

私が理解できなかったこと、またはどこが間違っているのでしょうか?

どうもありがとう

0 投票する
1 に答える
6047 参照

mongodb - 大規模データベースでの MongoDB の初期同期

3 つのノードを持つ MongoDB レプリカ セットを使用しています。データベースは 20 億以上のレコードを含む非常に大きなもので、ディスク (WiredTiger MongoDB エンジン) で 700 GB を占有します。ほとんどのドキュメントでは、挿入 (1 日あたり数百万件) が実行され、その後、読み取りと更新が行われます。

セカンダリ メンバーのディスクを交換した後、データ フォルダーが空になり、初期同期が開始されました。ログを見ると、レコードをコピーするのに約 7 時間、インデックスを作成するのに 30 時間かかりましたが、その間に挿入/更新されたすべてのレコードを oplog に含めるには長すぎました。

最初にこのメンバーを再起動し、再同期を開始しました:

データフォルダを見ると、すべてのファイルが消去され、ファイルが大きくなり始めていました。しかし、約 8 時間後、データベースの 5% がかろうじて再同期されました。

このような大規模な同期にはどのようなアプローチを使用しますか?

oplog のサイズを大きくしようと考えましたが、そうするとレプリカ セット全体のダウンタイムが必要になります。ダウンタイムなしで使用できるアプローチは何ですか?

0 投票する
2 に答える
681 参照

mongodb - 3 ノードのレプリカ セットでリモート ノードに到達できない

IP アドレスが 10.1.1.52 と 10.1.1.11 の 2 台の PC があります。10.1.1.52 で実行されている 1 つのプライマリ ノードと 1 つのセカンダリ ノード、および 10.1.1.11 で実行されている 1 つのセカンダリ ノードで mongo レプリケーション (シャーディングなし) を構成したいと考えています。

次の手順に従いました。

次のコマンドを使用して、10.1.1.11 PC で 3 つの構成サーバーを実行しました。

続いて、レプリカ セット ('a') を作成し、次のコマンドを使用して 3 つのノードを追加しました (最初は 10.1.1.11 で、残りの 2 つは 10.1.1.52 で)。

次のコマンドを使用して、10.1.1.11 でクエリ ルーターをセットアップしました。

その後、次のコマンドを入力して mongos から接続し、レプリカ セットを開始しました。

直面している問題は、ノードを追加した後です。

リモート PC で実行されているノード、つまり 10.1.1.52 に到達できず、異常です。ただし、私の PC で実行されているノード、つまり 10.1.1.11 は自動的に SECONDARY として宣言されます。

0 投票する
1 に答える
394 参照

mongodb - ローカルサーバーとパブリックサーバーの間に設定されたmongoレプリカ

これが私の状況です:

ユーザーがインターネットからアクセスできる公開サーバーがありますが、データはローカル コンピューターに保存されています。通常、このコンピュータはインターネットにも接続できますが、ローカル システムのインターネット接続がダウンしたときに、ローカル システムを正常に実行できるようにしたいと考えています。そこで、公開サーバーとローカル サーバーの間にレプリカ セットを構成したいと考えています。ただし、ローカル サーバーには固定のインターネット IP アドレスがありません。

これが私の質問です:

ローカル サーバーとパブリック サーバーに MongoDB をセットアップし、これらのサーバー間でデータを同期するという目標を達成するにはどうすればよいですか。

0 投票する
1 に答える
834 参照

mongodb - PRIMARY は再起動後に RECOVERING に移行中です

3 つの異なる Amazon サーバー インスタンスに 3 つのノードのレプリカ セット (プライマリ 1 つ、セカンダリ 1 つ、アービター 1 つ) があります。それらがホストされているサーバーではメモリのアップグレードが必要だったため、MongoDB インスタンスもシャットダウンする必要がありました。

次の順序で MongoDB インスタンスをシャットダウンします。

  1. セカンダリ
  2. アービタ
  3. 主要な

以下のプロセスを使用して、各サーバーをシャットダウンしました

すべての MongoDB インスタンスは問題なく適切にシャットダウンされました。これまでのところ、すべて問題ありません。

Amazon サーバーのアップグレード後、MongoDB インスタンスを次の順序で開始しました。

  1. アービタ
  2. セカンダリ
  3. 主要な

アービターはアービター モードで、セカンダリはセカンダリ モードですが、驚いたことに、プライマリ マシンは "RECOVERING" モードになりました。

プライマリ マシンが "RECOVERING" になった理由はわかりません。

ログを調べました。同期するメンバーが表示されていません...そのようなもの

私の基本的な疑問は、「レプリカセットで再構成が行われるまで、プライマリはプライマリでなければならない」ということです。

サーバーのシャットダウン中のステップが抜けていませんか? または、サーバーの再起動中のステップが抜けていますか?

どうすればこの問題を克服できるのでしょうか。Amazon サーバーでは多くのアップグレードが行われているため、MongoDB サーバーを頻繁にシャットダウンする必要があります。

0 投票する
1 に答える
79 参照

c++ - DLL のクラスの C++ レガシ ドライバー mongoDB Replicaset

mongoDB レプリカセット操作を実装するクラスを含む dll を作成しました。クラスのまとめはこちら。

上記のコードは機能しています。しかし、ここに私の質問があります:

1) 上記の設定では、dll を使用して通常の mongoDB 操作を実行できますが、アプリケーションが mongoDB データを常に更新する必要があるため (リアルタイムに近く、1 秒あたり最大数百回)、エラーが発生します (有効なレプリカセット インスタンス サーバーがありません)。見つかった) データを更新するとき。

2) サーバーのみが mongoDB データベースと通信する必要があります。したがって、基本的には、データベースへの接続が 1 つだけ必要です。したがって、mongo::DBClientReplicaSet con を静的グローバル変数として宣言し、クラス コンストラクト関数でそれに接続したいと考えています。しかし、私にはそれができないようでした。アプリケーションをまったく実行できません。それで、私は常に次のエラーを受け取ります。

アサーションに失敗しました: px != 0、ファイル C:\Boost\include\boost-1_62\boost/smart_ptr/scoped_ptr.hpp、105 行目

問題を解決する方法を知っている人はいますか?

以下は私が試したコードです:

3) 最後の質問ですが、replicaset 用の mongo/client/dbclient_rs.h" ファイルがあることに気付きました。しかし、使用できないようです。そのため、initialize() および auto_ptr カーソルでエラーが発生しています。ファイルを使用するにはどうすればよいですか?また、レプリカセットの機能を最大限に活用するには? "dbclient_rs.h" を使用できる場合、レプリカ セットを初期化するにはどうすればよいですか? その場合、データのクエリとフェッチを行うにはどうすればよいですか?

よろしくお願いします!

0 投票する
0 に答える
80 参照

c++ - mongo::DBClientReplicaSet をクラスのグローバル変数として定義することは可能ですか?

私は c++ レガシー ドライバーを使用しています。さまざまな関数で多くの mongoDB 操作を含むクラスを作成しました。

mongo::DBClientReplicaSetすべての関数でを定義したくはありませんが、グローバル レベルで定義すると、別の問題が発生しましたmongo::client::initialize。これは、ドライバー オブジェクトまたは BSON を構築する前に呼び出す必要があるためです。つまりmongo::client::initialize、クラス コンストラクト関数を呼び出す場合、その前に定義することはできませんmongo::DBClientReplicaSet。したがって、グローバルレベルで宣言することはできません。" " を試しextern mongo::DBClientReplicaSet xxxxてから、クラス コンストラクト関数で定義しましたが、リンク エラーが発生しました:

エラー LNK2001: 未解決の外部シンボル "class mongo::DBClientReplicaSet xxxx"

mongo::DBClientReplicaSetパラメータなしでは使用できないためです。

誰かがこれに対する解決策を知っていますか?