0

私の 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&amp;readPreference=primaryPreferred&amp;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"
        }
    ]
}
4

1 に答える 1