Als de instanties allemaal achter een enkele load-balanced Input
zitten eindpunt (bijv. 27017), dan wordt elke keer dat uw clientcomputer verbinding maakt met het eindpunt, deze verbonden met mogelijk verschillende knooppunten in het replicasetcluster (en heeft u geen controle over naar welke instantie u bent gegaan). Dit zou kunnen verklaren waarom u soms probeert te schrijven naar de niet-master en een foutmelding krijgt, maar al uw leesbewerkingen werken (aangezien u waarschijnlijk het MongoDB-cluster hebt ingesteld om leesbewerkingen op secundaire knooppunten toe te staan).
Werkrollen ondersteunen ook InstanceInput
endpoints, waarmee u een extern gericht poortbereik kunt instellen (bijvoorbeeld 27017-27019), waarbij u naar een enkele poort op de worker-instanties zelf wijst (bijv. 27017). Als u dit doet, kan uw client-app nu rechtstreeks verbinding maken met alle drie de instanties (27017, 27018, 27019). Veel stuurprogramma's ondersteunen replicaset-verbindingen, zodat het in staat zou zijn om erachter te komen welk knooppunt de master is en alle schrijfbewerkingen ernaar toe te leiden. Ik weet niet of het stuurprogramma dat u op Android gebruikt replicasets ondersteunt. Als het stuurprogramma geen replicasets ondersteunt, wilt u waarschijnlijk overwegen een API-laag op te zetten die vervolgens alle communicatie met de database doet (in ieder geval een goede gewoonte om in het algemeen te volgen, en u kunt kijken naar Azure's Mobile Services voor een snelle manier om dit te implementeren).
Dus... als het eindpunt van uw replicasetcluster is geconfigureerd als Input
, verklaart dit waarschijnlijk het probleem dat u ziet, dat moet worden opgelost door het eindpunttype over te schakelen naar InstanceInput
.