web-dev-qa-db-ja.com

MongoDBレプリカセットのメンバーの状態は「その他」

3つのメンバー、プライマリーとセカンダリー、そして3番目のメンバーは「その他」です-その状態に関する情報は見つかりません。何をすべきかわからないので、インスタンスを再起動しましたが、常に同じように表示されます。その状態に関するドキュメントは見つかりません。

私はレプリカセットが初めてです-そしてどんな助けもいただければ幸いです。

7
Jolly

設定が正しく設定されていません。

次のコマンドを使用して初期化できます。

rs.initiate({
      _id: "rs0",
      version: 1,
      members: [
         { _id: 0, Host : "localhost:27017" }
      ]
   }
)

すでに開始している場合は、次のようなエラーメッセージが表示されることがあります。

singleNodeRepl:OTHER> rs.initiate({ _id: "rs0", members: [ { _id: 0, Host : "localhost:27017" } ] } )
{
    "info" : "try querying local.system.replset to see current configuration",
    "ok" : 0,
    "errmsg" : "already initialized",
    "code" : 23,
    "codeName" : "AlreadyInitialized"
}

解決策は、mongoをreconfすることです。

singleNodeRepl:OTHER> rsconf = rs.conf()
singleNodeRepl:OTHER> rsconf.members = [{_id: 0, Host: "localhost:27017"}]
[ { "_id" : 0, "Host" : "localhost:27017" } ]
singleNodeRepl:OTHER> rs.reconfig(rsconf, {force: true})
{ "ok" : 1 }
singleNodeRepl:OTHER>
singleNodeRepl:SECONDARY>
singleNodeRepl:PRIMARY>
11
Yihe

シナリオを複製することができました。これは、コマンドプロンプトがOTHERを表示していたmongodからrs.status()を実行したときに得られたものです。

_{
    "state" : 10,
    "stateStr" : "REMOVED",
    "uptime" : 41,
    "optime" : {
        "ts" : Timestamp(1518192445, 1),
        "t" : NumberLong(26)
    },
    "optimeDate" : ISODate("2018-02-09T16:07:25Z"),
    "ok" : 0,
    "errmsg" : "Our replica set config is invalid or we are not a member of it",
    "code" : 93,
    "codeName" : "InvalidReplicaSetConfig",
    "operationTime" : Timestamp(1518192445, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1518193246, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}
_

障害のあるmongodが、rs.conf()を実行したときに取得するJSONのmembers配列の3番目のメンバー(インデックス2)であると仮定しましょう。プライマリに移動し、障害のあるmongodをレプリカセットから削除します。

_rsconf = rs.conf()
rsconf.members = [rsconf.members[0], rsconf.members[1]] //index 0 and 1 are your working members, we're omitting the 3rd member which is faulty.
rs.reconfig(rsconf);
_

OTHERと表示されていたmongodを再起動します。もう一度プライマリに移動して、メンバーをもう一度追加します。 IPが_10.00.00.00_で、ポートが_27019_であるとします。

_rs.add("10.00.00.00:27019")
_

これにより問題が修正され、ステータスが「その他」から「二次」に変更されました。

Reconfはすべてのクライアント接続をリセットすることに注意してください。再構成を行うには、約1分のメンテナンスウィンドウが必要になる場合があります。

6
Andrew Nessin

後世のために-問題は、ダウン時間が長すぎるためにインスタンスがプライマリまたはセカンダリと同期できないことです。プライマリとセカンダリが試行され、同期が許可されていない状態になります。これにより、最終的に8 GBのログファイルが作成されましたが、開くことができなかったため、その時点では問題を確認できませんでした。ソリューションは明らかに、誤ったmongoインスタンスを停止し(そのデータをダンプし)、レプリカセットの新しいメンバーであるかのように再度開始することです。

2
Jolly