假设有这样一个场景,有一个MongoDB的副本集,由于故障导致只剩下两个节点可用,而这两个节点目前都是slave
节点。其他的故障节点也无法再重新启动,即无法重新加入到副本集中。
Q:这种情况下是否因为这个副本集就无法使用了?
PHP中文网2017-04-24 09:13:00
ほとんどのノードがダウンし、相互に接続できる残りのノードの数が半分を超えない場合は、ドキュメントを参照してレプリカ セットを再構成できます:
- http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/
ドキュメントには 2 つの方法が記載されています:
迷茫2017-04-24 09:13:00
これは、レプリカ セット内のノードの合計数に依存します。レプリカ セット内で相互に接続できるノードの数がノードの合計数の半分を超える場合、新しいプライマリ ノードを選択できます。レプリカ セットは正常に動作します。相互に接続できる場合、ノードがサマリー ポイントの半分以下の場合、すべてのノードがセカンダリ ノードになります。この時点で、レプリカ セットは読み取り専用になり、すべてのノードがセカンダリ ノードになります。書き込み操作は失敗します。
この現象の理由は、mongodb レプリカ セットが複数のプライマリ ノードを許可していないためです。接続できるノードの数がノードの総数の半分以下の場合でも、プライマリを選択できる場合は、複数のプライマリ ノードが表示される可能性があります。これにより、レプリカ セット全体でデータが混乱しますが、障害が発生したノードが復元されると、レプリカ セットは引き続き正常に実行されます。
プライマリを選択するのに十分ではない通常のノードが発生した場合は、いくつかの方法で解決できます。リーリー