Я пытаюсь подключиться к набору реплик из PHP, используя клиент MongoDB (1.6.11), против обеих версий сервера 3.0.7 и 2.6.6.
Однако при выполнении save () иногда сохранение выполняется на одном из «вторичных» серверов, и выдается исключение:
Предупреждение PHP: необработанное исключение ‘MongoWriteConcernException’
с сообщением «127.0.0.3:27017: не мастер»
Команды, используемые для репликации этого:
$options = [
'db' => 'admin',
'username' => '**********',
'password' => '**********',
'socketTimeoutMS' => 5000,
'connectTimeoutMS' => 100,
];
$mongo = new MongoClient('mongodb://127.0.0.1,127.0.0.2,127.0.0.3', $options);
$collection = $mongo->selectDB('test')->selectCollection('test');
for ($i=0; $i<10; $i++) {
$collection->save(['a' => uniqid()], ['w' => 3]);
}
И rs.status () возвращает:
{
"set" : "devSet",
"date" : ISODate("2016-05-26T22:02:16.564Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "127.0.0.1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 166106,
"optime" : Timestamp(1464298125, 1),
"optimeDate" : ISODate("2016-05-26T21:28:45Z"),
"electionTime" : Timestamp(1464134229, 1),
"electionDate" : ISODate("2016-05-24T23:57:09Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 1,
"name" : "127.0.0.2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3616,
"optime" : Timestamp(1464298125, 1),
"optimeDate" : ISODate("2016-05-26T21:28:45Z"),
"lastHeartbeat" : ISODate("2016-05-26T22:02:16.461Z"),
"lastHeartbeatRecv" : ISODate("2016-05-26T22:02:15.853Z"),
"pingMs" : 0,
"syncingTo" : "127.0.0.3:27017",
"configVersion" : 3
},
{
"_id" : 2,
"name" : "127.0.0.3:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 166105,
"optime" : Timestamp(1464298125, 1),
"optimeDate" : ISODate("2016-05-26T21:28:45Z"),
"lastHeartbeat" : ISODate("2016-05-26T22:02:14.959Z"),
"lastHeartbeatRecv" : ISODate("2016-05-26T22:02:14.958Z"),
"pingMs" : 0,
"syncingTo" : "127.0.0.1:27017",
"configVersion" : 3
}
],
"ok" : 1
}
Что мне не хватает?
Я нашел свою ошибку: где-то вдоль линии я удалил [«replicaSet» => «devSet»] из массива параметров.
Других решений пока нет …