Я установил набор реплик из 3 узлов.
Запись на первичный узел работает, но когда я читаю с readPreference = secondary; Я получаю значения как null.
Когда я открываю локальный узел с помощью robomongo, я вижу, что коллекции не существует. Значит, это не тиражировалось?
Я не уверен, когда он будет воспроизведен, или я что-то упустил?
Я использовал следующий URI
'mongodb: // DNS1, DNS2, DNS3 /? readPreference = secondary & w = 0'
Обновить
Вот как выглядит мой rs.status
rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2014-03-10T10:57:13Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "NWI47:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 16593,
"optime" : Timestamp(1394432703, 1),
"optimeDate" : ISODate("2014-03-10T06:25:03Z"),
"self" : true
},
{
"_id" : 1,
"name" : "t-plat-mongodb1.paand.local:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1656,
"optime" : Timestamp(1394432703, 1),
"optimeDate" : ISODate("2014-03-10T06:25:03Z"),
"lastHeartbeat" : ISODate("2014-03-10T10:57:13Z"),
"lastHeartbeatRecv" : ISODate("2014-03-10T10:57:11Z"),
"pingMs" : 187,
"syncingTo" : "NWI47:27017"
},
{
"_id" : 2,
"name" : "NWI27.np.i:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1664,
"optime" : Timestamp(1394432703, 1),
"optimeDate" : ISODate("2014-03-10T06:25:03Z"),
"lastHeartbeat" : ISODate("2014-03-10T10:57:11Z"),
"lastHeartbeatRecv" : ISODate("2014-03-10T10:57:12Z"),
"pingMs" : 102,
"syncingTo" : "NWI47:27017"
}
],
"ok" : 1
}
Mongo синхронизируется мгновенно, поэтому что-то не так с вашим набором реплик.
Наборы реплик MongoDB - это то, что вам нужно получить сразу после их первой настройки. Если они настроены неправильно, их будет сложно исправить.
Настройка набора реплик должна (обычно) выполняться только с мастера. Если ваш Сет еще не запущен, лучшим вариантом может быть его воссоздание.
Кроме того, не уверен, что такое robomongo, но вам, вероятно, лучше использовать собственный клиент mongo, чтобы узнать, что происходит.
Команда rs.status () должна выдать такой вывод
rs0:SECONDARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2014-03-10T10:42:27Z"),
"myState" : 2,
"syncingTo" : "mongo-master:27017",
"members" : [
{
"_id" : 0,
"name" : "mongo-master:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 3008469,
"optime" : Timestamp(1394448146, 1),
"optimeDate" : ISODate("2014-03-10T10:42:26Z"),
"lastHeartbeat" : ISODate("2014-03-10T10:42:26Z"),
"lastHeartbeatRecv" : ISODate("2014-03-10T10:42:26Z"),
"pingMs" : 1
},
{
"_id" : 3,
"name" : "mongo-slave3:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3012206,
"optime" : Timestamp(1394448146, 1),
"optimeDate" : ISODate("2014-03-10T10:42:26Z"),
"self" : true
},
{
"_id" : 4,
"name" : "mongo-slave4:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 890533,
"optime" : Timestamp(1394448146, 1),
"optimeDate" : ISODate("2014-03-10T10:42:26Z"),
"lastHeartbeat" : ISODate("2014-03-10T10:42:26Z"),
"lastHeartbeatRecv" : ISODate("2014-03-10T10:42:26Z"),
"pingMs" : 0,
"syncingTo" : "mongo-master:27017"
}
],
"ok" : 1
}