Consegui resolver esse problema reiniciando o mongod nos nós secundários. Eu acho que os nós entraram em um estado obsoleto.
Estou usando o mongoDB para meu aplicativo hospedado em 3 instâncias do amazon. Eu tenho um nó primário com maior prioridade (100) e 2 secundários com prioridade 99 e 98. Alguns dias atrás eu comecei a obter MongoCursorExceptions ao acessar o nó primário. Eu pensei que tinha algo a ver com o meu servidor primário ficando sem recursos e lento para responder, então eu decidi mudar um dos nós secundários para primário.
Alterei as prioridades de 100, 99 e 98 para 1, 100, 98, mas isso não mudou meu servidor secundário para primário. Ao verificar o status do meu conjunto de réplicas, descobri que os três nós não estavam sincronizando corretamente, pois o horário de funcionamento estava mais de 17 horas atrasado. A preocupação real é que o optime de ambos os nós secundários é constante enquanto continua aumentando para o nó primário. Também verifiquei que meus nós secundários não tinham dados atualizados usando a consulta slaveOk. A seguir está o status que recebi no meu nó principal:
PRIMARY> rs.status()
{
"set" : "rs_a",
"date" : ISODate("2012-02-28T09:34:50Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "server1.com:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"optime" : {
"t" : 1330421648000,
"i" : 2
},
"optimeDate" : ISODate("2012-02-28T09:34:08Z"),
"self" : true
},
{
"_id" : 1,
"name" : "server2.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3510,
"optime" : {
"t" : 1330358351000,
"i" : 1
},
"optimeDate" : ISODate("2012-02-27T15:59:11Z"),
"lastHeartbeat" : ISODate("2012-02-28T09:34:50Z"),
"pingMs" : 0
},
{
"_id" : 2,
"name" : "server3.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3510,
"optime" : {
"t" : 1330358351000,
"i" : 1
},
"optimeDate" : ISODate("2012-02-27T15:59:11Z"),
"lastHeartbeat" : ISODate("2012-02-28T09:34:50Z"),
"pingMs" : 0
}
],
"ok" : 1
}
Não consegui encontrar muito em registros. Em algumas ocasiões, os logs no servidor secundário informaram que houve um problema na conexão com o servidor principal. Mas o interessante é que todos os write-backs são feitos corretamente nos nós secundários. Eu gostaria que todos os servidores estivessem atualizados em todos os momentos para que eu pudesse ler de qualquer nó, pois é por isso que estou usando o mongoDB em primeiro lugar.