Valg og automatisk failover
De lærende vil simulere et primært nedbrud og observere valgalgoritmen, der forfremmer en sekundær, så nedetiden holdes under 10 sekunder.
Valg og automatisk failover er en gratis MongoDB Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i MongoDB Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. MongoDB Academy-kurset indeholder 4 lektioner i alt.
Hvorfor automatisk failover er vigtigt
Automatisk failover er et MongoDB-replikasæts evne til at komme sig efter en fejl på primary-noden uden menneskelig indgriben. Når primary bliver utilgængelig, vælger de resterende medlemmer automatisk en ny primary — typisk inden for 10 til 30 sekunder — så applikationer kun oplever en kort pause i stedet for et fuldstændigt nedbrud.
Heartbeats: Registrering af fejl
Medlemmerne af et replikasæt udveksler løbende heartbeat-meddelelser hvert 2. sekund. Hvis et medlem ikke modtager et heartbeat-svar inden for electionTimeoutMillis (standardværdien er 10 sekunder), markerer det det tavse medlem som utilgængeligt. Hvis det manglende medlem er primary, starter de resterende kvalificerede medlemmer et valg.
// Check heartbeat interval and election timeout in replica set config
rs.conf().settings.heartbeatIntervalMillis // 2000 ms
rs.conf().settings.electionTimeoutMillis // 10000 msUdløsning af et valg
Et valg udløses i tre situationer: 1) primary bliver utilgængelig (netværksopdeling eller nedbrud), 2) en bruger træder manuelt ned som primary med rs.stepDown(), eller 3) en secondary med højere prioritet tilslutter sig, mens den aktuelle primary har lavere prioritet. Kun medlemmer med votes: 1 og priority > 0 kan blive den nye primary.
// Manually step down the current primary (useful for maintenance)
rs.stepDown(60) // yield primary for at least 60 secondsRaft-inspireret konsensusprotokol
MongoDB-valg bruger en protokol, der er inspireret af Raft-konsensus. Hver kandidat øger sin term-tæller og anmoder de andre medlemmer om stemmer. En kandidat vinder, hvis den får stemmer fra et flertal af de stemmeberettigede medlemmer. Kandidaten med den mest opdaterede oplog (højeste optime) foretrækkes — det forhindrer datatab ved at sikre, at den nye primary har set alle bekræftede skrivninger.
// Inspect the term number and optime of all members
rs.status().members.forEach(m => {
print(m.name, 'term:', m.configTerm, 'optime:', m.optimeDate)
})Kravet om flertalsstemme
En kandidat skal have stemmer fra mere end halvdelen af alle stemmeberettigede medlemmer (ikke kun dem, der aktuelt kan nås). I et sæt med 3 medlemmer og 3 stemmer er et flertal 2. Det betyder, at hvis 2 medlemmer går ned samtidigt, kan det overlevende medlem ikke vælge sig selv — det ville arbejde med forældede data uden mulighed for at vide, om de to andre medlemmer har nyere skrivninger.
// 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 restoredValgprocessen trin for trin
Valget foregår sådan: 1) En secondary opdager efter timeoutet, at primary er væk. 2) Den skifter til tilstanden CANDIDATE. 3) Den sender RequestVote-meddelelser til alle andre medlemmer. 4) Medlemmerne afgiver deres stemme, hvis kandidatens oplog er mindst lige så opdateret som deres egen, og de ikke allerede har stemt. 5) Vinderen skifter til PRIMARY og begynder at acceptere skrivninger.
Manglende mulighed for skrivning under valg
Mens valget står på (typisk nogle få sekunder), afvises skrivninger, fordi der ikke findes en primary. MongoDB-driveren gemmer skrivehandlingerne i en buffer og prøver dem igen, når en ny primary er valgt. Når skrivninger, der kan forsøges igen, er aktiveret (standard i moderne drivere), forsøges midlertidige fejl under valget automatisk igen én gang.
// Retryable writes are enabled by default in the connection string
const client = new MongoClient(
'mongodb+srv://host/db?retryWrites=true'
)Prioritet og valgpræference
Når flere kandidater er lige opdaterede, afgør prioriteten udfaldet — medlemmet med den højeste prioritet vinder. Hvis en secondary med højere prioritet vender tilbage efter at have været offline, udløser den et nyt valg for at overtage rollen som primary. Hvis du angiver prioriteten til 0, udelukkes medlemmet permanent fra at blive primary.
// 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)Scenarier ved netværksopdeling
I en netværkspartition kan medlemmer på den ene side af opdelingen ikke kommunikere med den anden. Siden med flertallet af stemmerne kan vælge en primær, mens mindretalssiden går i skrivebeskyttet tilstand. Det forhindrer et split-brain-scenarie, hvor to medlemmer samtidig tror, at de er primære, og accepterer modstridende skrivninger.
Overvågning af failover-hændelser
Du kan overvåge valg og failover-hændelser ved at undersøge MongoDB-loggen eller forespørge i konfigurationen i system.replset. Atlas giver realtidsadvarsler om valghændelser. I dine applikationslogge vil du se stigninger i MongoNotPrimaryError eller MongoNetworkError under et valg — gentagelige skrivninger håndterer dette automatisk.
// Check the number of elections in the current status
rs.status().electionHighestObservedTime
// Or watch change streams on 'admin.$cmd' for electionId changesSådan holder du failover hurtig: bedste praksis
Sådan minimerer du failover-tiden: 1) Brug replikasæt med et ulige antal medlemmer (3 eller 5) for at undgå behovet for arbitre. 2) Brug en skrivebekræftelse med flertal for at sikre, at den valgte sekundære har alle bekræftede skrivninger. 3) Minimer forsinkelsen i oploggen ved at sørge for en tilstrækkelig størrelse på oploggen. 4) Placér medlemmerne af replikasættet i samme region for at få heartbeat-signaler med lav latenstid.
// Increase oplog size at runtime (requires 4.4+)
db.adminCommand({ replSetResizeOplog: 1, size: 16384 })
// size in MB — 16 GB is suitable for busy clustersHurtigt tjek
Test din forståelse af begreberne inden for MongoDB og NoSQL-databaser fra denne lektion.
Opsummering af lektionen
I denne lektion lærte du, at heartbeat-signaler registrerer fejl i den primære inden for electionTimeoutMillis (10 sek. som standard), at kandidaten med den mest aktuelle oplog og den højeste prioritet vinder valget, og at gentagelige skrivninger lader applikationer håndtere korte valgperioder transparent. Dernæst undersøger vi skrivebekræftelser og ser på, hvordan du styrer skrivningers holdbarhed på tværs af replikasættet.
Lær JavaScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Valg og automatisk failover” gratis?
Ja — hele teksten til “Valg og automatisk failover” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af MongoDB Academy-kurset, skal du opgradere til CoddyKit PRO. MongoDB Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Valg og automatisk failover”?
De lærende vil simulere et primært nedbrud og observere valgalgoritmen, der forfremmer en sekundær, så nedetiden holdes under 10 sekunder. Du øver dig i MongoDB Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på MongoDB Academy?
Der kræves ingen tidligere erfaring. MongoDB Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Valg og automatisk failover”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne MongoDB Academy-lektion?
Ja. Alle MongoDB Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Replikasætsmedlemmer: primær, sekundær og arbiter
- Valg og automatisk failover
- Write concerns og bekræftet holdbarhed
- Læsepræferencer: Fordeling af læsebelastning