高可用性のために 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 がしばらく使用できないことがすでにわかっているため、実際には「あきらめる」だけです。これは実際に私のテスト環境でテストされました。
var rsconfig = {"_id":"rs4","members":[{"_id":0,"host":"localhost:27041","priority":10},{"_id":1,"host":"localhost:27042"},{"_id":2,"host":"localhost:27043","arbiterOnly":true}]}
printjson(rsconfig)
rs.initiate(rsconfig)
当初は SECONDARY と #3 (つまり ARBITER) を同じサーバーに配置することを考えていましたが、タイトルの質問のために、そのような構成を使用することはできません。
MongoDB が取るロジックを最初に説明してくれた Alan Spencer に感謝します。