私の Mongo DB セットには 3 つのレプリカ セットがあります。1 つのプライマリと 2 つのセカンダリです。
var connectionString = ConfigurationManager.AppSettings["MongoDBWriteCS"];
var client = new MongoClient(connectionString);
_MongoWriteServer = client.GetServer();
_WriteDatabase = _MongoWriteServer.GetDatabase("DBName");
_WriteDatabase.GetCollection<CollectionType>("CollectionName").Insert(Object);
以下の接続文字列を使用してコードを実行すると、レコードの挿入に問題はありません
<add key="MongoDBWriteCS" value="mongodb://username:password@10.0.0.0:27019/admin?w=0" />
しかし、問題は、レプリカ セット上にあるため、プライマリが 27019 から 27018 になるか、27017 の挿入が失敗すると、プライマリが変化し続けることです。
そこで、接続文字列をより本物のレプリカ セットの接続文字列に変更しようとしました。
<add key="MongoDBWriteCS" value="mongodb://username:password@10.0.0.0:27017,10.0.0.0:27018,10.0.0.0:27019/admin?replicaSet=myRepSet&readPreference=primaryPreferred&w=0" />
「そのようなホストはありません」または「メンバーに接続できません」で失敗し続けますが、同じコード行でコレクションのリストを取得すると機能します(つまり、読み取りは機能し、挿入または保存コマンドのように書き込みのみが失敗します)
MongoDB 2.6.4を使用しています
rs.status()
/* 0 */
{
"set" : "rbRepSet",
"date" : ISODate("2015-03-09T23:27:17.000Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "haboMongo:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 59570,
"optime" : Timestamp(1425941592, 5),
"optimeDate" : ISODate("2015-03-09T22:53:12.000Z"),
"lastHeartbeat" : ISODate("2015-03-09T23:27:16.000Z"),
"lastHeartbeatRecv" : ISODate("2015-03-09T23:27:17.000Z"),
"pingMs" : 0,
"syncingTo" : "haboMongo:27019"
},
{
"_id" : 1,
"name" : "haboMongo:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 2220179,
"optime" : Timestamp(1425941592, 5),
"optimeDate" : ISODate("2015-03-09T22:53:12.000Z"),
"lastHeartbeat" : ISODate("2015-03-09T23:27:17.000Z"),
"lastHeartbeatRecv" : ISODate("2015-03-09T23:27:16.000Z"),
"pingMs" : 0,
"syncingTo" : "haboMongo:27019"
},
{
"_id" : 2,
"name" : "haboMongo:27019",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2220202,
"optime" : Timestamp(1425941592, 5),
"optimeDate" : ISODate("2015-03-09T22:53:12.000Z"),
"electionTime" : Timestamp(1425100988, 1),
"electionDate" : ISODate("2015-02-28T05:23:08.000Z"),
"self" : true
}
],
"ok" : 1
}
rs.config()
/* 0 */
{
"_id" : "rbRepSet",
"version" : 3,
"members" : [
{
"_id" : 0,
"host" : "haboMongo:27017"
},
{
"_id" : 1,
"host" : "haboMongo:27018"
},
{
"_id" : 2,
"host" : "haboMongo:27019"
}
]
}