Eu tenho um servidor principal (windows-27017) e nele repliquei meus dados em uma porta diferente (37017), mas no mesmo servidor. Agora estou tentando adicionar meu notebook como um servidor replicado no mongodb e instalei os serviços mongodb nele na porta 27017. Agora tenho três servidores, um principal e dois replicados. O servidor principal e o servidor de porta estão funcionando perfeitamente, mas o servidor do notebook não está funcionando. Eu verifiquei o status do servidor principal e encontrei isso
Wed Oct 30 12:25:16.278 trying reconnect to 127.0.0.1:27017
Wed Oct 30 12:25:16.279 reconnect 127.0.0.1:27017 ok
rs1:PRIMARY> rs.status()
{
"set" : "rs1",
"date" : ISODate("2013-10-30T03:25:25Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.10.99:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 6832,
"optime" : Timestamp(1383103516, 1),
"optimeDate" : ISODate("2013-10-30T03:25:16Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.10.99:37017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 9,
"optime" : Timestamp(1383103516, 1),
"optimeDate" : ISODate("2013-10-30T03:25:16Z"),
"lastHeartbeat" : ISODate("2013-10-30T03:25:24Z"),
"lastHeartbeatRecv" : ISODate("2013-10-30T03:25:23Z"),
"pingMs" : 0,
"lastHeartbeatMessage" : "syncing to: 192.168.10.99:2701
7",
"syncingTo" : "192.168.10.99:27017"
},
{
"_id" : 3,
"name" : "192.168.10.97:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 9,
"optime" : Timestamp(1383099655, 1),
"optimeDate" : ISODate("2013-10-30T02:20:55Z"),
"lastHeartbeat" : ISODate("2013-10-30T03:25:24Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 1,
"syncingTo" : "192.168.10.99:27017"
}
],
"ok" : 1
}
Escrevi um programa C e quando estou tentando enviar os dados ... eles estão sendo enviados apenas para o servidor principal e para o servidor de porta, mas não para o servidor do notebook. Alguém pode me dizer como posso acessar o servidor de notebook do servidor principal
Outra coisa a tentar é executar
rs.status()
no servidor do notebook e comparar o estado que ele vê com o estado que você viu no nó PRIMÁRIO. As diferenças podem ser descritivas.O problema com o Mongo é que ele é muito estúpido por design, ele depende do sistema operacional para fazer tudo, exceto executar o próprio banco de dados (ele nem se preocupa em implementar uma camada de cache, contando com o cache de blocos do sistema operacional para isso). Portanto, quando vejo problemas de conectividade como você descreve, começo a pensar em problemas no nível do sistema operacional, como firewalls.
Existem duas maneiras de configurar um par de instâncias do MongoDB em servidores diferentes para não se comunicarem:
Se você não estiver fazendo nenhum desses (não é o primeiro e o segundo é improvável), é provável que os firewalls do Windows não tenham sido configurados para permitir que os nós se comuniquem. Os servidores principal e de porta podem fazer isso, pois estão no mesmo nó, mas o servidor de notebook estaria do outro lado de um firewall. Olhe para isso para garantir que você pode se comunicar nas portas.