MongoDB + Azure + Android: com.mongodb.WriteConcernException error: código “no maestro”: “10058”

Fondo:

Hola, estoy ejecutando un conjunto de réplicas de MongoDB en Azure y me he conectado de forma remota desde una aplicación de Android. He conseguido que las lecturas funcionen perfectamente en todas las instancias (Actualizado: porque se les permite leer en los nodos primarios y secundarios). Pero, las escrituras en la base de datos aún tienen errores intermitentes con el siguiente error, porque las escrituras deben realizarse solo en el nodo primario.

Además, si pudiera proporcionar recursos más específicos para tratar este problema, eso también sería muy útil. Ya he revisado la mayoría de los documentos y he buscado bastante este error.

Pregunta:

¿Cómo prevenir este error y permitir que las escrituras el 100% del tiempo?

E/AndroidRuntime(): com.mongodb.WriteConcernException: {
        "serverUsed" : "/<my-remote-ip>:27017" , "err" : "not master" , 
        "code" : 10058 , "n" : 0 , "lastOp" : { "$ts" : 0 , "$inc" : 0} , 
        "connectionId" : 1918 , "ok" : 1.0}

Rastro de pila:

E/AndroidRuntime(13731): FATAL EXCEPTION: Thread-7629
E/AndroidRuntime(13731): Process: com.myapplication.examplemongodb, PID: 13731
E/AndroidRuntime(13731): com.mongodb.WriteConcernException: { "serverUsed" : "/<my-remote-ip>:27017" , "err" : "not master" , "code" : 10058 , "n" : 0 , "lastOp" : { "$ts" : 0 , "$inc" : 0} , "connectionId" : 1918 , "ok" : 1.0}
E/AndroidRuntime(13731):    at com.mongodb.CommandResult.getException(CommandResult.java:77)
E/AndroidRuntime(13731):    at com.mongodb.CommandResult.throwOnError(CommandResult.java:110)
E/AndroidRuntime(13731):    at com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:102)
E/AndroidRuntime(13731):    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:142)
E/AndroidRuntime(13731):    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:115)
E/AndroidRuntime(13731):    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:248)
E/AndroidRuntime(13731):    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:204)
E/AndroidRuntime(13731):    at com.mongodb.DBCollection.insert(DBCollection.java:76)
E/AndroidRuntime(13731):    at com.mongodb.DBCollection.insert(DBCollection.java:60)
E/AndroidRuntime(13731):    at com.mongodb.DBCollection.insert(DBCollection.java:105)
E/AndroidRuntime(13731):    at com.myapplication.examplemongodb.ActivityMain$1.run(ActivityMain.java:83)
E/AndroidRuntime(13731):    at java.lang.Thread.run(Thread.java:841)

Notas:

estoy usandomongo-java-driver v2.11.3.Usé elbiblioteca mongo-azul para ayudar a crear el conjunto de réplicas de MongoDB con dos roles de trabajador.(Si tiene más recursos para esto, entonces me encantaría leerlo. Ya leí el Léame de GitHub,esta, esta, y algunas otras cosas no relacionadas con MongoDB / Azure. Pero, esos recursos no se actualizan, ni se detallan.)

Soluciones posibles:

Tiene algo que ver con tener un conjunto de réplicas, creo.No estoy seguro de que esto esté sucediendo porque tengo solo un conjunto de réplicas de dos instancias (una primaria y una secundaria) y están peleando (lea: votando) sobre quién quiere ser la primaria. Tal vez, se requiere un árbitro? Pero, no sé cómo hacerlo actualmente.

Actualizar:

Gracias a la ayuda de @David Makogon, estoy bastante seguro de que el problema radica en cómo he configurado la conexión con Azure y en cómo accedo a los roles de los trabajadores. Entonces, aquí están mis notas actualizadas sobre cómo se configura el sistema:Dos roles de trabajador (MongoDB.WindowsAzure.MongoDBRole), a los que me conecto directamente a través deTCP Input Endpoint puerto 27017 desde la aplicación de Android. Como dijo @David, actualmente no tengo control sobre a qué instancia está conectada.Una función web (MongoDB.WindowsAzure.Manager), con la que no hago nada, tiene unaHTTP Input Endpoint en el puerto 80. Esto se realizó de forma predeterminada con la biblioteca mongo-azure que mencioné anteriormente. No estoy seguro de si hay algo que deba hacer con esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta