私はかなり複雑な問題を抱えており、要約すると次のようになります。今朝、ホスト A、B、および C で構成されるレプリカ セットがあり、A がプライマリでした。その後、私は A を完全に失い、B はしばらくダウンしていた可能性があります (わかりません)。これはec2インスタンスであるため、戻ってきたときは別のホスト名を持っていました(ただし、まったく同じebsボリュームと同じファイル構造を持っていました)。
この時点で、ホスト名 A がなくなり、B、C、および D ができました。D の内容は A と同じですが、外部の世界ではそれらを 2 つの異なるホスト (つまり、ホスト名) と見なします。B と C の mongo にログインすると、それらがセカンダリ (優先度 0) であることが示され、優先度が示されていない古いホスト A が引き続きリストされます。
SECONDARY> rs.conf() //this is from C
{
"_id" : "rs_0",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "A:27018" //this is the dead guy ....
},
{
"_id" : 1,
"host" : "C:27019",
"priority" : 0
},
{
"_id" : 2,
"host" : "B:27020",
"priority" : 0
}
]
}
B または C からコマンドを発行すると、自分がマスターではないというメッセージが表示されるため、このレプリカ セットの conf レコード内のホストを変更できません。
最悪のシナリオはmongoexport
、すべてを使用してjsonにダンプできることです。これは、(a)お尻が痛い、(b)非常に醜い、(c)本番環境では実際には実用的ではありません。
基本的には、これに要約されます。レプリカ セットがあり、プライマリへの制御/アクセスを失い、その機能を引き継ぐために別のホストを追加したい場合はどうすればよいですか?
ありがとう!