問題タブ [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.
mongodb - MongoDB レプリカ セットの非投票メンバーはプライマリになることができますか?
プライマリに接続された mongo シェルを介してレプリカ セット メンバーの投票数を 0 に設定しようとしていますが、呼び出すとエラーが発生します。
私がすることは:
conf.members [0]はSECONDARYのドキュメント conf です
このリンクで、MongoDB のドキュメントには次のように記載されています。
...
このシーケンスは、rs.conf() の出力のメンバー配列の順序に従って、セットの 4 番目、5 番目、および 6 番目のメンバーに 0 票を与えます。この設定により、セットはこれらのメンバーをプライマリとして選出できますが、選挙で投票することはできません。
...
しかし、返されたエラー メッセージには、non-votingの優先順位 = 0 を設定する必要があることが示されていますが、これはメンバーがプライマリになれないことを意味しています。
私が理解できなかったこと、またはどこが間違っているのでしょうか?
どうもありがとう
mongodb - 大規模データベースでの MongoDB の初期同期
3 つのノードを持つ MongoDB レプリカ セットを使用しています。データベースは 20 億以上のレコードを含む非常に大きなもので、ディスク (WiredTiger MongoDB エンジン) で 700 GB を占有します。ほとんどのドキュメントでは、挿入 (1 日あたり数百万件) が実行され、その後、読み取りと更新が行われます。
セカンダリ メンバーのディスクを交換した後、データ フォルダーが空になり、初期同期が開始されました。ログを見ると、レコードをコピーするのに約 7 時間、インデックスを作成するのに 30 時間かかりましたが、その間に挿入/更新されたすべてのレコードを oplog に含めるには長すぎました。
最初にこのメンバーを再起動し、再同期を開始しました:
データフォルダを見ると、すべてのファイルが消去され、ファイルが大きくなり始めていました。しかし、約 8 時間後、データベースの 5% がかろうじて再同期されました。
このような大規模な同期にはどのようなアプローチを使用しますか?
oplog のサイズを大きくしようと考えましたが、そうするとレプリカ セット全体のダウンタイムが必要になります。ダウンタイムなしで使用できるアプローチは何ですか?
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 として宣言されます。
mongodb - ローカルサーバーとパブリックサーバーの間に設定されたmongoレプリカ
これが私の状況です:
ユーザーがインターネットからアクセスできる公開サーバーがありますが、データはローカル コンピューターに保存されています。通常、このコンピュータはインターネットにも接続できますが、ローカル システムのインターネット接続がダウンしたときに、ローカル システムを正常に実行できるようにしたいと考えています。そこで、公開サーバーとローカル サーバーの間にレプリカ セットを構成したいと考えています。ただし、ローカル サーバーには固定のインターネット IP アドレスがありません。
これが私の質問です:
ローカル サーバーとパブリック サーバーに MongoDB をセットアップし、これらのサーバー間でデータを同期するという目標を達成するにはどうすればよいですか。
mongodb - PRIMARY は再起動後に RECOVERING に移行中です
3 つの異なる Amazon サーバー インスタンスに 3 つのノードのレプリカ セット (プライマリ 1 つ、セカンダリ 1 つ、アービター 1 つ) があります。それらがホストされているサーバーではメモリのアップグレードが必要だったため、MongoDB インスタンスもシャットダウンする必要がありました。
次の順序で MongoDB インスタンスをシャットダウンします。
- セカンダリ
- アービタ
- 主要な
以下のプロセスを使用して、各サーバーをシャットダウンしました
すべての MongoDB インスタンスは問題なく適切にシャットダウンされました。これまでのところ、すべて問題ありません。
Amazon サーバーのアップグレード後、MongoDB インスタンスを次の順序で開始しました。
- アービタ
- セカンダリ
- 主要な
アービターはアービター モードで、セカンダリはセカンダリ モードですが、驚いたことに、プライマリ マシンは "RECOVERING" モードになりました。
プライマリ マシンが "RECOVERING" になった理由はわかりません。
ログを調べました。同期するメンバーが表示されていません...そのようなもの
私の基本的な疑問は、「レプリカセットで再構成が行われるまで、プライマリはプライマリでなければならない」ということです。
サーバーのシャットダウン中のステップが抜けていませんか? または、サーバーの再起動中のステップが抜けていますか?
どうすればこの問題を克服できるのでしょうか。Amazon サーバーでは多くのアップグレードが行われているため、MongoDB サーバーを頻繁にシャットダウンする必要があります。
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" を使用できる場合、レプリカ セットを初期化するにはどうすればよいですか? その場合、データのクエリとフェッチを行うにはどうすればよいですか?
よろしくお願いします!
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
パラメータなしでは使用できないためです。
誰かがこれに対する解決策を知っていますか?