インスタンスがすべて単一の負荷分散されたInput
の背後にある場合 エンドポイント(例:27017)の場合、クライアントマシンがエンドポイントに接続するたびに、レプリカセットクラスター内の潜在的に異なるノードに接続されます(どのインスタンスに移動したかを制御することはできません)。これは、非マスターに書き込もうとしてエラーが発生することがあるのに、すべての読み取りが機能する理由を説明している可能性があります(おそらく、セカンダリノードでの読み取りを許可するようにMongoDBクラスターを設定しているため)。
ワーカーロールはInstanceInput
もサポートします エンドポイント。これにより、外部に面するポート範囲(27017〜27019など)を設定し、ワーカーインスタンス自体の単一のポート(27017など)にマッピングできます。これを行うと、クライアントアプリは3つのインスタンスすべてに直接接続できるようになります(27017、27018、27019)。多くのドライバーはレプリカセット接続をサポートしているため、どのノードがマスターであるかを把握し、すべての書き込みをそのノードに送信することができます。 Androidで使用しているドライバーがレプリカセットをサポートしているかどうかはわかりません。 ドライバーがレプリカセットをサポートしていない場合は、データベースへのすべての通信を行うAPI層を設置することを検討することをお勧めします(とにかく、一般的に従うことをお勧めします。Azureのモバイルサービスでこれを実装する簡単な方法)。
つまり...レプリカセットクラスターのエンドポイントがInput
として構成されている場合 、これはおそらくあなたが見ている問題を説明しています。これはエンドポイントタイプをInstanceInput
に切り替えることで解決できるはずです。 。