O Mongodb continua relatando “nenhum primário encontrado”, mas o shell funciona bem

3

Eu tenho uma configuração mongodb simples em um replicaset, com 1 instância real e 1 árbitro (para evitar conflitos). Isso antecipa a expansão do replicaset para incluir mais instâncias à medida que nossa carga aumenta.

Se eu acessar o mongodb através do shell, eu obtenho corretamente o prompt PRIMARY > , e executar rs.status() me diz que tudo está bem e é ótimo.

Eu tenho um servidor node.js que está acessando o banco de dados, usando o driver mongodb-native encontrado no github, versão 0.9.9-8. No entanto, ocasionalmente, ele simplesmente quebra com o seguinte erro: Unable to connect to database: Error: no primary server found

O programa recebe os dois endereços para as duas instâncias (instância normal + árbitro), mas, do contrário, nem o log do programa nem o log do mongodb dão pistas do que está errado. Qualquer ajuda é bem vinda!

    
por Christian P. 20.02.2013 / 11:35

2 respostas

1

OK, primeiro, não forneça ao motorista o endereço do árbitro, apenas o primário - não há motivo para o motorista falar com o árbitro, ele não tem dados. Com apenas o primário para se conectar a ele, ele se conectará apenas ao principal e seu problema deverá desaparecer.

A sua configuração é outra questão - ter um árbitro com um único nó não lhe compra nada e torna o seu conjunto menos fiável do que mais estável.

Cenário 1: o árbitro fica inativo / off-line

  • O principal é o único nó que sobrou e votou por si mesmo
  • 1/2 votos não é a maioria, então o primário não pode ser eleito e se torna um secundário
  • Seu conjunto está desativado e não pode aceitar gravações

Cenário 2: o principal fica inativo / off-line

  • Não há nenhum nó com dados, o árbitro não pode votar em si mesmo
  • 0/2 votos, sem nós de dados reais disponíveis, seu conjunto está off-line

Como você pode ver, você realmente estaria melhor com apenas um único nó primário - porque tudo que o árbitro faz é introduzir uma maneira de seu conjunto ficar indisponível quando o primário estiver funcionando bem. A outra opção, é claro, seria adicionar um secundário e ir para 3 nós - então você realmente obterá os benefícios de redundância de um conjunto de réplicas.

    
por 21.02.2013 / 13:14
0

Isso é uma citação do link

The minimum requirements for a replica set include two members with data, 
for a primary and a secondary, and an arbiter. In most circumstances, 
however, you will want to deploy three data members.

Você não atende aos requisitos mínimos definidos.

    
por 20.02.2013 / 13:31