Deskripsi masalah
Saat menulis data ke instance replika set, pesan kesalahan berikut muncul: "errmsg": "not master", "code": 10107, "codeName": "NotMaster", "errmsg": "not master", "code": 10107, "codeName": "NotWritablePrimary", atau Time out after 30000ms while waiting for a server that matches writableServerSelector..
Penyebab
Pergantian utama/sekunder terjadi pada instance replika set, menyebabkan perubahan peran node. Jika bisnis Anda terhubung ke Titik akhir node utama, node sekunder sebenarnya yang terhubung setelah pergantian utama/sekunder mengakibatkan kegagalan penulisan data.
Pergantian utama/sekunder dapat dipicu oleh berbagai alasan. Untuk informasi lebih lanjut, lihat Apa yang Menyebabkan Pergantian Utama/Sekunder untuk Suatu Instance?.
Setiap instance replika set mencakup satu node utama, satu atau lebih node sekunder, satu node tersembunyi, dan opsional satu atau lebih node baca-saja. Setiap node memiliki atribut seperti peran (utama, sekunder, tersembunyi, atau baca-saja), ID node, alamat IP, Titik akhir, dan port. Pergantian utama/sekunder mengubah peran node, tetapi atribut lainnya tetap tidak berubah.
Dalam instance replika set, Node 1 adalah node utama, dan Node 2 adalah node sekunder. Sebelum pergantian utama/sekunder, Titik akhir node utama (Node 1) terhubung. Setelah pergantian, Titik akhir node sekunder (Node 2) yang sebenarnya terhubung, sehingga menyebabkan kegagalan penulisan data.
Solusi
Secara manual ganti peran node instance tersebut agar node yang Titik akhirnya terhubung setelah pergantian utama/sekunder menjadi node utama. Untuk panduan lebih lanjut tentang cara mengganti peran node, lihat Ganti Peran Node.
Jika aplikasi Anda beroperasi di lingkungan produksi, kami sarankan menggunakan string koneksi URI untuk menghubungkan aplikasi ke instance. Dengan pendekatan ini, pergantian utama/sekunder dapat dilakukan tanpa mengganggu operasi baca dan tulis aplikasi meskipun sebuah node gagal. Untuk informasi lebih lanjut, lihat Hubungkan ke Instance Replika Set.
Pastikan aplikasi Anda dapat terhubung kembali ke instance ApsaraDB for MongoDB setelah terputus dan tangani pengecualian untuk menjaga kontinuitas bisnis.