Pilihan Raya dan Pengambilalihan Automatik
Pelajar akan mensimulasikan kegagalan primer dan memerhatikan algoritma pilihan raya yang menaikkan sekunder, sambil mengekalkan masa henti di bawah 10 saat.
Pilihan Raya dan Pengambilalihan Automatik ialah pelajaran MongoDB Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran MongoDB Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.
Mengapa Ambil Alih Automatik Penting
Ambil alih automatik ialah keupayaan set replika MongoDB untuk pulih daripada kegagalan nod primer tanpa campur tangan manusia. Apabila primer tidak dapat dicapai, ahli yang tinggal akan memilih primer baharu secara automatik—biasanya dalam masa 10 hingga 30 saat—supaya aplikasi hanya mengalami jeda singkat dan bukannya gangguan penuh.
Isyarat Denyut: Mengesan Kegagalan
Ahli set replika terus bertukar mesej isyarat denyut setiap 2 saat. Jika ahli tidak menerima respons isyarat denyut dalam tempoh electionTimeoutMillis (lalai 10 saat), ahli itu menandakan ahli yang senyap sebagai tidak dapat dicapai. Jika ahli yang hilang itu ialah primer, ahli lain yang layak akan memulakan pilihan raya.
// Check heartbeat interval and election timeout in replica set config
rs.conf().settings.heartbeatIntervalMillis // 2000 ms
rs.conf().settings.electionTimeoutMillis // 10000 msMencetuskan Pilihan Raya
Pilihan raya dicetuskan dalam tiga keadaan: 1) primer tidak dapat dicapai (pemisahan rangkaian atau ranap), 2) pengguna menurunkan kedudukan primer secara manual dengan rs.stepDown(), atau 3) sekunder dengan keutamaan lebih tinggi menyertai dan primer semasa mempunyai keutamaan lebih rendah. Hanya ahli dengan votes: 1 dan priority > 0 layak menjadi primer baharu.
// Manually step down the current primary (useful for maintenance)
rs.stepDown(60) // yield primary for at least 60 secondsProtokol Konsensus Berasaskan Raft
Pilihan raya MongoDB menggunakan protokol yang diilhamkan oleh konsensus Raft. Setiap calon menambah nilai pembilang term dan meminta undi daripada ahli lain. Calon menang jika menerima undi daripada majoriti ahli yang mengundi. Calon dengan log operasi paling terkini (nilai optime tertinggi) diberi keutamaan—ini mencegah kehilangan data dengan memastikan primer baharu telah menerima semua penulisan yang disahkan.
// Inspect the term number and optime of all members
rs.status().members.forEach(m => {
print(m.name, 'term:', m.configTerm, 'optime:', m.optimeDate)
})Keperluan Undi Majoriti
Calon memerlukan undi daripada lebih separuh daripada semua ahli yang mengundi (bukan hanya ahli yang boleh dicapai pada masa itu). Dalam set 3 ahli dengan 3 undi, majoritinya ialah 2. Ini bermakna jika 2 ahli tidak berfungsi serentak, ahli yang masih hidup tidak boleh memilih dirinya sendiri—ahli itu akan beroperasi dengan data lapuk tanpa cara untuk mengetahui sama ada dua ahli lain mempunyai penulisan yang lebih baharu.
// With 3 members:
// majority = floor(3/2) + 1 = 2
// If only 1 member survives, it cannot elect itself
// The set becomes read-only until connectivity is restoredProses Pilihan Raya Langkah demi Langkah
Pilihan raya berlangsung seperti berikut: 1) Sekunder menyedari bahawa primer telah tiada selepas tamat tempoh. 2) Sekunder bertukar kepada keadaan CANDIDATE. 3) Sekunder menghantar mesej RequestVote kepada semua ahli lain. 4) Ahli memberikan undi jika log operasi calon sekurang-kurangnya sama terkini dengan log mereka dan mereka belum mengundi. 5) Pemenang bertukar kepada PRIMARY dan mula menerima penulisan.
Ketidaktersediaan Penulisan Semasa Pilihan Raya
Semasa tempoh pilihan raya (biasanya beberapa saat), penulisan ditolak kerana tiada primer. Pemacu MongoDB menyimpan operasi penulisan dalam penimbal dan mencubanya semula selepas primer baharu dipilih. Dengan penulisan yang boleh dicuba semula diaktifkan (lalai dalam pemacu moden), ralat pilihan raya sementara akan dicuba semula secara telus sekali.
// Retryable writes are enabled by default in the connection string
const client = new MongoClient(
'mongodb+srv://host/db?retryWrites=true'
)Keutamaan dan Pilihan Raya
Apabila beberapa calon sama-sama terkini, keutamaan memecahkan seri—ahli dengan keutamaan tertinggi menang. Jika sekunder dengan keutamaan lebih tinggi menyertai semula selepas berada di luar talian, sekunder itu akan mencetuskan pilihan raya baharu untuk mengambil peranan sebagai primer. Menetapkan keutamaan kepada 0 mengecualikan ahli daripada menjadi primer selama-lamanya.
// Boost priority on the preferred primary node
let cfg = rs.conf()
cfg.members[0].priority = 2 // preferred
cfg.members[1].priority = 1
cfg.members[2].priority = 1
rs.reconfig(cfg)Senario Pemisahan Rangkaian
Dalam pemisahan rangkaian, ahli pada satu bahagian pemisahan tidak dapat berkomunikasi dengan bahagian yang satu lagi. Bahagian yang mempunyai majoriti undi boleh memilih primer; bahagian minoriti memasuki keadaan baca sahaja. Ini menghalang senario otak terpisah, iaitu apabila dua ahli pada masa yang sama menganggap diri mereka sebagai primer lalu menerima penulisan yang bercanggah.
Memantau Peristiwa Peralihan Gagal
Anda boleh memantau pilihan raya dan peralihan gagal dengan memeriksa log MongoDB atau membuat pertanyaan terhadap konfigurasi system.replset. Atlas menyediakan amaran masa nyata untuk peristiwa pilihan raya. Dalam log aplikasi, anda akan melihat peningkatan mendadak MongoNotPrimaryError atau MongoNetworkError semasa pilihan raya — penulisan yang boleh dicuba semula mengendalikannya secara automatik.
// Check the number of elections in the current status
rs.status().electionHighestObservedTime
// Or watch change streams on 'admin.$cmd' for electionId changesMengekalkan Peralihan Gagal yang Pantas: Amalan Terbaik
Untuk meminimumkan masa peralihan gagal: 1) Kekalkan set replika dengan bilangan ahli ganjil (3 atau 5) supaya anda tidak memerlukan penimbang tara. 2) Gunakan jaminan penulisan majoriti untuk memastikan sekunder yang dipilih mempunyai semua penulisan yang telah dilakukan. 3) Kurangkan kelewatan oplog dengan menyediakan saiz oplog yang mencukupi. 4) Letakkan ahli set replika di rantau yang sama untuk degupan jantung berlatensi rendah.
// Increase oplog size at runtime (requires 4.4+)
db.adminCommand({ replSetResizeOplog: 1, size: 16384 })
// size in MB — 16 GB is suitable for busy clustersSemakan Pantas
Uji pemahaman anda tentang konsep MongoDB & pangkalan data NoSQL daripada pelajaran ini.
Imbas Kembali Pelajaran
Dalam pelajaran ini, anda telah mempelajari bahawa: degupan jantung mengesan kegagalan primer dalam tempoh electionTimeoutMillis (lalai 10 s), calon dengan oplog paling terkini dan keutamaan tertinggi memenangi pilihan raya, dan penulisan yang boleh dicuba semula membolehkan aplikasi terus berfungsi melalui tempoh pilihan raya yang singkat secara telus. Seterusnya, kita akan meneroka jaminan penulisan dan cara mengawal ketahanan penulisan merentas set replika.
Pelajari JavaScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Pilihan Raya dan Pengambilalihan Automatik” percuma?
Ya — teks penuh “Pilihan Raya dan Pengambilalihan Automatik” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus MongoDB Academy, tingkat taraf kepada CoddyKit PRO. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pilihan Raya dan Pengambilalihan Automatik”?
Pelajar akan mensimulasikan kegagalan primer dan memerhatikan algoritma pilihan raya yang menaikkan sekunder, sambil mengekalkan masa henti di bawah 10 saat. Anda berlatih MongoDB Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan MongoDB Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran MongoDB Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Pilihan Raya dan Pengambilalihan Automatik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran MongoDB Academy ini?
Ya. Setiap pelajaran MongoDB Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Ahli Set Replika: Primer, Sekunder, Arbiter
- Pilihan Raya dan Pengambilalihan Automatik
- Keprihatinan Penulisan dan Ketahanan Diakui
- Keutamaan Bacaan: Mengagihkan Beban Bacaan