問題タブ [replicaset]
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 ReplicaSet - PRIMARY だけが残っている場合、PRIMARY ロールは SECONDARY に分類されます
高可用性のために MongoDB ReplicaSet を使用して調査しています。
しかし、3 つのノードを持つ ReplicaSet で、PRIMARY mongod が 1 つしか残っていない場合 (つまり、他の 2 つのmongod
インスタンスが終了したかシャットダウンされた場合)、数秒後に役割が SECONDARY に切り替わり、書き込みを受け付けなくなることがわかりました。そのため、レプリカ セットの価値は単一のインスタンスよりも低くなります。
私は PRIMARY 選出について知っており、理解していますが、PRIMARY ロールはサーバーに固定されており ( priority
set を使用して 10 など)、(たとえば、ネットワークの問題により) 他のサーバーにアクセスできなくなります。なぜメインサーバーはあきらめるのでしょうか?!
Windows (mongodb-win32-x86_64-2008plus-2.4.8) および Linux (CentOS) では 2.4.8、Linux では 2.0.x でテスト済み
報奨金開始:
PRIMARY が孤独を感じたときにレプリカ セットがあきらめた場合、100% の可用性を確保するための代替手段は何ですか? または、その場合に必要な特別な構成があるかもしれません。現在の実装では、ネットワークの問題が発生した場合に ReplicaSet が脆弱になります。
更新しました:
残念ながら、#3 がダウンし (プライマリとセカンダリが残ります)、その後しばらくしてセカンダリがダウンするというシナリオの前に、私は言いませんでした。次に、PRIMARY は、#3 がしばらく使用できないことがすでにわかっているため、実際には「あきらめる」だけです。これは実際に私のテスト環境でテストされました。
当初は SECONDARY と #3 (つまり ARBITER) を同じサーバーに配置することを考えていましたが、タイトルの質問のために、そのような構成を使用することはできません。
MongoDB が取るロジックを最初に説明してくれた Alan Spencer に感謝します。
mongodb - 既に実行中の mongo シャード クラスターにレプリカ セットを追加する
こんにちは、この構成を使用して mongo クラスターをセットアップしました
- mongos が実行されている 3 つの異なるマシンがあります (安定性/パフォーマンス/可用性を確保するために、すべてが異なる IP を持つ物理マシンです)。
- 3 つの異なる VM 上の 3 つの構成サーバー。
- ハイエンド マシンで実行されている 2 つの Mongo シャード (2 つのポートで実行されている 2 つの mongod インスタンスは、両方の mongod に別々の db ディレクトリがあります)。
このセットは配置され、すでに実行されています。
これら 2 つのシャードにレプリカ セットを追加したいのは、各シャードに 2 つのレプリカがあることを意味します。私の質問は
- 各シャードが既に存在する場合、既存のクラスターにレプリカ セットを追加するにはどうすればよいですか?
- 各レプリカは、ほぼ 2 TB のデータを持つ対応するシャードと同じ db スペースを持ちますか?
- 確実にフェイルオーバーするには、別のマシンを使用してこれらのレプリカをホストする必要がありますか?
mongodb - MongoReplicationSetClient は pymongo 2.6.3 で空のセットを返します
リモート レプリカ セットに接続しようとしているときに、MongoReplicaClient で問題が発生しました。何らかの理由で、MongoReplicaSetClient は、ローカル ホストにないレプリカ セットに対して空のセットを返すだけです。奇妙な部分は、MongoClient が正常に動作することです。とにかくエラーが発生していないため、これをさらにデバッグする方法がわかりません。MongoClient 経由の接続は正常に機能するため、ネットワークは除外されているようです。なぜこれが起こっているのか誰にも分かりますか?
[アップデート]
さらに調査した結果、ローカル ホストが FQDN を使用せずにリモート ホスト名を解決できない場合、この問題は Pymongo 2.6.3 に影響を与えるようです。問題は、この状況で FQDN が MongoReplicaSetClient に提供されると、空のセットが返されることです。問題を再現した方法は次のとおりです。
環境
手順
1) リモート ホスト名が解決できないことを確認する
pymongo 2.5 でのテスト
1)ホスト名を使用してレプリカセットに接続します(予想どおりに中断します)
2) FQDN (Works) を使用してレプリカ セットに接続します。
pymongo 2.6.3 でのテスト
1)ホスト名を使用してレプリカセットに接続します(予想どおりに中断します)
2) FQDN を使用してレプリカ セットに接続します (空のセットを返します)。
確認
localhost がホスト名で解決できるようになると、2.6.3 では問題が発生しなくなります。MongoReplicaSetClient が FQDN の処理方法を知らないかのようです。
1) リモート ホスト名の解決を確認する
2) ホスト名と FQDN の両方を使用して MongoReplicaSetClient 接続を確認します
node.js - mongoose.mongo.MongoClient.connect() は mongo シェルなしで動作しますか?
localhost ではない mongo サーバーに接続しています。マングースを使用しています。そして、しばらくしてmongoネイティブドライバーに接続する必要があったので、次のようにしています:
がconn
対象となりnull
ます。
最近、サーバー構造を変更しましたが、すべてのmongoデータベースがリモートになり、新しいノードマシンにはmongoシェルがまったくインストールされていません...最初はすべて正常に機能し、接続uriは次のとおりでした:
最初のプライマリがx.x.x.x:27017
中断された後、新しいプライマリが選出され、現在は同じ URI で開始していますが、接続オブジェクトがnull
あり、その理由がわかりません...
同様の問題を抱えている人はいますか?または多分解決策またはアイデア....
mongodb - MongoDB replicaSet のセカンダリ マシンは、1 分ごとにプライマリにクエリを実行し続けます
3 台の異なるマシンで mongo replicaSet をセットアップしました。rs.status() を実行すると、次のメッセージが表示されます。
すべてが正常に動作しているようで、すべてのマシンは最新の状態です。それでも、oplog を表示すると、セカンダリ マシンの 1 つから同じクエリが毎分発生しています。これらのクエリの 1 つのサンプルを次に示します。
各クエリは、タイムスタンプを含めてまったく同じです (secs_running の期間は 60 です)。このクエリは、クライアント "xxx.xxx.xx.157" からのみ送信されます。このクエリが複数回発生するため、mongo は実際にマシンを停止させています。
その他の潜在的な有用な情報:
どこを見るべきかについての助けや手がかりに感謝します。ありがとう!