MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB+Azure+Android:com.mongodb.WriteConcernException err:not master code:10058


Se as instâncias estiverem todas atrás de uma única Input com balanceamento de carga endpoint (por exemplo, 27017), cada vez que sua máquina cliente se conectar ao endpoint, ela será conectada a nós potencialmente diferentes no cluster de replicaset (e você não terá controle sobre qual instância foi). Isso pode explicar por que você às vezes tenta gravar no não-mestre e obtém um erro, mas todas as suas leituras funcionam (já que você provavelmente configurou o cluster do MongoDB para permitir leituras em nós secundários).

As funções de trabalho também são compatíveis com InstanceInput endpoints, que permitem definir um intervalo de portas voltado para o exterior (digamos, 27017-27019), mapeando para uma única porta nas próprias instâncias do trabalhador (por exemplo, 27017). Se você fizer isso, seu aplicativo cliente agora pode se conectar a todas as três instâncias diretamente (27017, 27018, 27019). Muitos drivers suportam conexões de replicaset, então ele seria capaz de descobrir qual nó é o mestre, direcionando todas as gravações para ele. Não sei se o driver que você está usando no Android é compatível com conjuntos de réplicas. Se o driver não oferecer suporte a conjuntos de réplicas, você provavelmente desejará considerar a criação de uma camada de API que faça toda a comunicação com o banco de dados (uma boa prática a ser seguida em geral, de qualquer maneira, e você pode consultar os Serviços Móveis do Azure para uma maneira rápida de implementar isso).

Então... se o endpoint do seu cluster de replicaset estiver configurado como Input , isso provavelmente explica o problema que você está vendo, que deve ser resolvido alternando o tipo de endpoint para InstanceInput .