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;  
    } 
});
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top