Saya memiliki layanan REST yang dibangun di node.js dengan Restify dan Mongoose dan mongoDB dengan koleksi dengan sekitar 30.000 dokumen berukuran biasa. Saya memiliki layanan simpul saya berjalan melalui pmx dan pm2.
Kemarin, tiba-tiba, node mulai menyelesaikan kesalahan dengan pesan "MongoError: Topology dihancurkan", tidak lebih. Saya tidak tahu apa yang dimaksud dengan ini dan apa yang mungkin memicu ini. ada juga tidak banyak yang bisa ditemukan ketika google mencari ini. Jadi saya pikir saya akan bertanya di sini.
Setelah memulai kembali layanan simpul hari ini, kesalahan berhenti datang. Saya juga memiliki salah satu dari ini berjalan dalam produksi dan itu membuat saya takut bahwa ini bisa terjadi pada waktu tertentu ke bagian yang sangat penting dari pengaturan yang berjalan di sana ...
Saya menggunakan versi berikut dari paket-paket yang disebutkan:
- luwak: 4.0.3
- restify: 3.0.3
- simpul: 0.10.25
Jawaban:
Tampaknya ini berarti koneksi server node Anda ke instance MongoDB Anda terputus ketika sedang mencoba untuk menulisnya.
Lihatlah kode sumber Mongo yang menghasilkan kesalahan itu
Ini tampaknya tidak terkait dengan masalah Sails yang dikutip dalam komentar, karena tidak ada pemutakhiran yang dipasang untuk mempercepat crash atau "perbaikan"
sumber
Saya tahu bahwa jawaban Jason diterima, tetapi saya memiliki masalah yang sama dengan Mongoose dan menemukan bahwa layanan hosting database saya merekomendasikan untuk menerapkan pengaturan berikut untuk menjaga koneksi Mongodb tetap dalam produksi:
Saya harap balasan ini dapat membantu orang lain yang memiliki kesalahan "Topologi dihancurkan".
sumber
Kesalahan ini disebabkan oleh driver mongo yang menjatuhkan koneksi dengan alasan apa pun (server terputus misalnya).
Secara default luwak akan mencoba untuk menyambung kembali selama 30 detik kemudian berhenti mencoba lagi dan melemparkan kesalahan selamanya sampai dimulai kembali.
Anda dapat mengubah ini dengan mengedit 2 bidang ini di opsi koneksi
dokumentasi opsi koneksi
sumber
server: {
dll.Dalam kasus saya, kesalahan ini disebabkan oleh
db.close();
bagian 'menunggu' di dalam 'async'sumber
db.close
ke dalamthen
blok, bukan?db.close
kethen
blok bekerja sangat baik untuk saya dengan driver Node.js MongoDB asli.Hanya sedikit tambahan untuk jawaban Gaafar, itu memberi saya peringatan penghinaan. Alih-alih pada objek server, seperti ini:
Itu bisa pergi pada objek tingkat atas. Pada dasarnya, keluarkan saja dari objek server dan letakkan di objek opsi seperti ini:
sumber
"Topologi dihancurkan" mungkin disebabkan oleh pemutusan luwak sebelum indeks dokumen luong dibuat, per komentar ini
Untuk memastikan semua model memiliki indeks yang dibangun sebelum memutuskan sambungan, Anda dapat:
sumber
Sebastian mengomentari jawaban Adrien membutuhkan lebih banyak perhatian, itu membantu saya, tetapi menjadi komentar mungkin diabaikan kadang-kadang jadi ini solusinya :
sumber
Saya juga memiliki kesalahan yang sama. Akhirnya, saya menemukan bahwa saya memiliki beberapa kesalahan pada kode saya. Saya menggunakan load balance untuk dua nodejs server, tetapi saya hanya memperbarui kode satu server.
Saya mengubah server mongod saya
from standalone to replication
, tetapi saya lupa untuk melakukan pembaruan yang sesuai untuk string koneksi, jadi saya menemukan kesalahan ini.string koneksi mandiri:
mongodb://server-1:27017/mydb
string koneksi replikasi:mongodb://server-1:27017,server-2:27017,server-3:27017/mydb?replicaSet=myReplSet
detail di sini :[mongo doc untuk string koneksi]
sumber
Saya bertemu ini di kubernetes / minikube + nodejs + luwak. Masalahnya adalah bahwa layanan DNS dengan semacam latensi. Memeriksa DNS siap menyelesaikan masalah saya.
(angka-angka dalam db_options ditemukan secara sewenang-wenang di stackoverflow dan situs sejenisnya)
sumber
Di sini apa yang saya lakukan, itu berfungsi dengan baik. Masalah hilang setelah menambahkan opsi di bawah ini.
sumber
Anda perlu me-restart mongo untuk menyelesaikan kesalahan topologi, lalu cukup mengubah beberapa opsi luong atau mongoclient untuk mengatasi masalah ini:
sumber
Saya mendapatkan kesalahan ini, ketika saya sedang membuat database baru di Komunitas Kompas MongoDb saya. Masalahnya adalah dengan Mongod saya, itu tidak berjalan. Jadi sebagai perbaikan, saya harus menjalankan perintah Mongod seperti sebelumnya.
Saya bisa membuat database setelah menjalankan perintah itu.
Semoga ini bisa membantu.
sumber
Saya berjuang dengan ini selama beberapa waktu - Seperti yang Anda lihat dari jawaban lain, masalahnya bisa sangat berbeda.
Cara termudah untuk mengetahui apa yang menyebabkannya adalah dengan mengaktifkan
loggerLevel: 'info'
opsisumber
Dalam kasus saya, kesalahan ini disebabkan oleh contoh server identik yang sudah berjalan latar belakang.
Yang aneh adalah ketika saya memulai server saya tanpa pemberitahuan sudah ada yang berjalan, konsol tidak menunjukkan sesuatu seperti 'sesuatu menggunakan port xxx'. Saya bahkan dapat mengunggah sesuatu ke server. Jadi, butuh waktu cukup lama untuk menemukan masalah ini.
Terlebih lagi, setelah menutup semua aplikasi yang dapat saya bayangkan, saya masih tidak dapat menemukan proses yang menggunakan port ini di monitor aktivitas Mac saya. Saya harus menggunakan
lsof
untuk melacak. Pelakunya tidak mengejutkan - ini adalah proses simpul. Namun, dengan PID yang ditampilkan di terminal, saya menemukan nomor port di monitor berbeda dari yang digunakan oleh server saya.Semua dalam semua, membunuh semua proses simpul dapat menyelesaikan masalah ini secara langsung.
sumber
Saya memecahkan masalah ini dengan:
sumber