sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB+Azure+Android:com.mongodb.WriteConcernException err:código no maestro:10058

Si todas las instancias se encuentran detrás de una sola Input con equilibrio de carga endpoint (por ejemplo, 27017), luego, cada vez que su máquina cliente se conecte al endpoint, se conectará a nodos potencialmente diferentes en el clúster del conjunto de réplicas (y no tendrá control sobre a qué instancia fue). Esto podría explicar por qué a veces intenta escribir en el no maestro y obtiene un error, pero todas sus lecturas funcionan (ya que probablemente configuró el clúster MongoDB para permitir lecturas en nodos secundarios).

Los roles de trabajo también admiten InstanceInput puntos finales, que le permiten establecer un rango de puertos orientados al exterior (por ejemplo, 27017-27019), mapeándose a un solo puerto en las propias instancias de trabajo (por ejemplo, 27017). Si hace esto, su aplicación cliente ahora puede conectarse a las tres instancias directamente (27017, 27018, 27019). Muchos controladores admiten conexiones de conjunto de réplicas, por lo que podría averiguar qué nodo es el maestro, dirigiendo todas las escrituras a él. No sé si el controlador que está utilizando en Android admite conjuntos de réplicas. Si el controlador no es compatible con los conjuntos de réplicas, entonces probablemente querrá considerar instalar un nivel de API que luego realice toda la comunicación con la base de datos (una buena práctica a seguir en general, de todos modos, y puede consultar los Servicios móviles de Azure para una forma rápida de implementar esto).

Entonces... si el extremo de su clúster de réplicas está configurado como Input , esto probablemente explica el problema que está viendo, que debería poder resolverse cambiando el tipo de punto final a InstanceInput .