O conjunto de réplicas não funciona conforme esperado
-
20-12-2019 - |
Pergunta
Configurei como abaixo e meu MongoDB não precisa de nome de usuário ou senha:
mongo: {
module: 'sails-mongo',
url: "mongodb://127.0.0.1:27017/mydb",
replSet: {
servers: [
{
host: "127.0.0.1",
port : 27018
},
{
host: "127.0.0.1",
port : 27019
}
],
options: {connectWithNoPrimary:true, rs_name:"rs0"}
}
}
Está funcionando bem, o que significa que não recebo nenhum erro de conexão e posso fazer consultas.Mas quando eu derrubei 127.0.0.1:27017, 127.0.0.1:27018 se torna PRIMÁRIO como se eu tivesse feito um rs.status().Depois disso, não consigo mais fazer nenhuma consulta e continuo recebendo o seguinte:
Erro:sem conexões abertas
Tenho certeza de que configurei o conjunto de réplicas em minha máquina local corretamente, pois usei o driver nativo do MongoDB para testar o cenário mencionado acima (derrubar PRIMARY e SECONDARY como PRIMARY) e não há problema.
var url = 'mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/mydb?w=0&wtimeoutMS=5000&replicaSet=sg1&readPreference=secondary';
mongodb.MongoClient.connect(url, function(err, result) {
if(err || result === undefined || result === null) {
throw err;
} else {
db = result;
}
});
Solução
ok, encontrei a resposta.Esta mensagem foi emitida por causa de session.js.Comentei tudo no arquivo e agora está funcionando.Acho que o motivo está em session.js, ele aponta apenas para um único host, que é o PRIMÁRIO original.quando você desativa este mongodb PRIMARY, session.js não pode mais se conectar, então gerou uma exceção.Também tentei a string de URL do mongodb em sessões.js, inserindo também o IP dos hosts no conjunto de réplicas (mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/mydb), mas não consegui "elevação de velas".Quando colocado apenas um único host, tudo bem.
agora, se eu precisar armazenar informações de sessões, preciso iniciar outra instância do mongodb e então session.js apontar para este novo instante.