Mengapa Mongo terjebak dalam STARTUP2?


13

Saya memiliki Mongoset replika dengan beberapa detik. Sebuah kotak, yang menampung instance sekunder, mengalami crash dan kehilangan database.

Saya memulai Mongoinstance sekunder lagi dan sekarang macet di STARTUP2 selama lebih dari 12 jam. Apakah masuk akal ? Dokumen mengatakan Mongoharus dalam STARTUP2 untuk jangka waktu singkat sebelum memasuki keadaan PEMULIHAN

Apa arti sebenarnya dari STARTUP2? Apakah ini menyalin database dari primary? Bagaimana saya bisa memverifikasinya (dengan asumsi Mongo berjalan di Linux)?

Jawaban:


12

Jawaban eoinbrazil sebagian tidak benar. Node baru bisa berada di STARTUP2 untuk waktu yang lama. Tautan yang diposting mengatakan:

Setiap anggota set replika memasuki status STARTUP2 segera setelah mongod selesai memuat konfigurasi anggota itu, dan saat itu ia menjadi anggota aktif set replika. Anggota kemudian memutuskan apakah akan melakukan sinkronisasi awal atau tidak. Jika seorang anggota memulai sinkronisasi awal, anggota tersebut tetap di STARTUP2 sampai semua data disalin dan semua indeks dibangun. Setelah itu, anggota transisi ke RECOVERING.

Saya mengelola koleksi 700 GB dan, ketika saya menambahkan node baru status STARTUP2 tetap lebih dari 24 jam. Tetapi Anda masih bisa melihat apakah ada sesuatu yang terjadi, dengan menonton jika database tumbuh. Anda dapat melihat ukuran database pada node baru dengan

show databases

atau Anda juga dapat mengamati direktori data, untuk melihat apakah masih berkembang. (di linux dengan perintah ls, df, du, iotop, dll ....)


1
show databasesgagal dengannot master and slaveOk=false
JDPeckham

Dengan melihat log Anda dapat melihat progresnya. Misalnya akan menampilkan sesuatu seperti: [rsSync] Index Build: 2538000/22982417 11%
Daniel Benedykt

4

Status STARTUP2 berarti simpul tidak dapat memilih. Seorang anggota RS memasuki keadaan ini setelah proses MongoD selesai memuat konfigurasi itu. Dalam keadaan ini, anggota telah membuat utas untuk menangani operasi replikasi internal tetapi ia belum mengubah status menjadi Memulihkan dan selanjutnya dari yang menjadi Sekunder (lihat [status dan detailnya di dokumen]) .

Jika simpul Anda telah dalam kondisi ini selama lebih dari periode singkat maka Anda menghadapi beberapa perilaku aneh. Ini sangat tidak mungkin untuk dianalisis tanpa log untuk menentukan mengapa macet. Menjalankan rs.status () dan db.printSlaveReplicationInfo () akan memberi Anda beberapa detail pada gambar lokal pada node.

Pendekatan normal untuk menyelesaikan ini adalah dengan mematikan node, menghapus file datanya (file-file di dbpath), dan me-restart itu. Ini akan memulai kembali proses sinkronisasi awal dan harus pindah ke SECONDARY. Jika macet di STARTUP2 lagi, Anda harus melihat log untuk mengumpulkan lebih banyak informasi tentang alasannya - ada berbagai penyebab tetapi satu yang bisa terjadi adalah jaringan yang tidak rata atau pertikaian sumber daya lokal.

Satu hal yang perlu diperhatikan adalah bahwa sementara sinkronisasi awal sedang berlangsung, node akan tetap di STARTUP2 jadi tergantung pada jumlah data yang disinkronkan, ini bisa menjadi waktu yang cukup lama (berpotensi berhari-hari).


Terima kasih. Kami menghapus data dan memulai kembali Mongo. Masih dalam STARTUP2. Sepertinya orang Mongo itu bekerja. Ini mengkonsumsi CPU dan seperti yang saya lihat di db.statsbasis data sedang berkembang. Log mengatakan bahwa beberapa objek cloned. Saya masih mencari kemungkinan penyebab masalah ini.
Michael

1
Jika ini masih merupakan masalah, Anda mungkin hanya ingin menyalin dari simpul lain (lihat prosedur ini - docs.mongodb.org/manual/tutorial/resync-replica-set-member/… ). Jika Anda bisa melampirkan highlight log dan detail pada versi mana yang Anda gunakan, ini mungkin mengarah ke penyebab tetapi sama-sama ini perilaku yang tidak biasa. Sudahkah Anda mencoba melakukan ping antar node untuk melihat seperti apa latensi jaringan?
eoinbrazil

Mongo 2.4.6 pingantara tuan rumah adalah Ok.
Michael

Seperti apa waktu ping karena mungkin masalah jaringan yang terputus-putus? Dalam hal ini, akan lebih mudah jika Anda dapat menambahkan beberapa output log karena ini adalah perilaku non-standar dan log adalah sumber utama kebenaran ketika mencoba untuk menentukan apa yang sebenarnya terjadi.
eoinbrazil

Saya khawatir saya tidak dapat menunjukkan log di sini. Namun saya perhatikan itu mencoba untuk terhubung ke anggota sekunder lain, yang sedang down. Mungkinkah itu penyebab masalahnya?
Michael

1

Salah satu penyebab yang mungkin adalah bahwa sekunder Anda menjadi "basi" seperti yang dinyatakan di sini .

Ketika Anda melakukan sinkronisasi ulang anggota, pastikan RS tidak berada di bawah beban berat.


0

Status STARTUP2 dapat disebabkan karena tidak cukup ruang disk. Yah, karena tidak ada tempat untuk menyinkronkan, itu hanya bisa tetap status @ STARTUP2.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.