Jika semua instance berada di belakang satu Input
. yang seimbang beban titik akhir (mis. 27017), kemudian setiap kali mesin klien Anda terhubung ke titik akhir, mesin itu akan terhubung ke node yang berpotensi berbeda di cluster replikaset (dan Anda tidak akan memiliki kendali atas instance mana yang Anda tuju). Ini mungkin menjelaskan mengapa Anda terkadang mencoba menulis ke non-master dan mendapatkan kesalahan, namun semua pembacaan Anda berfungsi (karena Anda mungkin menyiapkan cluster MongoDB untuk mengizinkan pembacaan pada node sekunder).
Peran pekerja juga mendukung InstanceInput
titik akhir, yang memungkinkan Anda menyetel rentang port yang menghadap ke luar (misalnya, 27017-27019), memetakan ke satu port pada instans pekerja itu sendiri (mis. 27017). Jika Anda melakukan ini, aplikasi klien Anda sekarang dapat terhubung ke ketiga instans secara langsung (27017, 27018, 27019). Banyak driver yang mendukung koneksi replikaset, sehingga dapat mengetahui node mana yang menjadi master, mengarahkan semua penulisan ke sana. Saya tidak tahu apakah driver yang Anda gunakan di Android mendukung replika. Jika driver tidak mendukung replika, maka Anda mungkin ingin mempertimbangkan untuk memasang tingkat API yang kemudian melakukan semua komunikasi ke database (praktik yang baik untuk diikuti secara umum, dan Anda dapat melihat Layanan Seluler Azure untuk cara cepat untuk menerapkan ini).
Jadi... jika titik akhir kluster replikaset Anda dikonfigurasi sebagai Input
, ini kemungkinan menjelaskan masalah yang Anda lihat, yang seharusnya dapat diselesaikan dengan mengalihkan jenis titik akhir ke InstanceInput
.