Val och automatisk failover
Ni simulerar ett fel på den primära noden och observerar valalgoritmen som befordrar en sekundär nod och håller avbrottstiden under 10 sekunder.
Val och automatisk failover är en gratis lektion i MongoDB Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för MongoDB Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i MongoDB Academy innehåller totalt 4 lektioner.
Varför automatisk failover är viktigt
Automatisk failover är en replikuppsättnings förmåga att återhämta sig från ett fel på primary-noden utan mänsklig inblandning. När primary blir otillgänglig väljer de återstående medlemmarna automatiskt en ny primary – vanligtvis inom 10 till 30 sekunder – så att applikationerna bara drabbas av ett kort avbrott i stället för ett fullständigt driftstopp.
Heartbeats: Upptäcka fel
Medlemmarna i replikuppsättningen skickar kontinuerligt heartbeat-meddelanden varannan sekund. Om en medlem inte får något svar på ett heartbeat inom electionTimeoutMillis (standardvärde 10 sekunder) markerar den den tysta medlemmen som otillgänglig. Om den saknade medlemmen är primary påbörjar de återstående valbara medlemmarna ett val.
// Check heartbeat interval and election timeout in replica set config
rs.conf().settings.heartbeatIntervalMillis // 2000 ms
rs.conf().settings.electionTimeoutMillis // 10000 msUtlösa ett val
Ett val utlöses i tre situationer: 1) primary blir otillgänglig (nätverkspartition eller krasch), 2) en användare låter manuellt primary träda tillbaka med rs.stepDown(), eller 3) en secondary med högre prioritet ansluter och den aktuella primary har lägre prioritet. Endast medlemmar med votes: 1 och priority > 0 kan bli den nya primary.
// Manually step down the current primary (useful for maintenance)
rs.stepDown(60) // yield primary for at least 60 secondsRaft-inspirerat konsensusprotokoll
MongoDB-val använder ett protokoll som inspirerats av Raft-konsensus. Varje kandidat ökar sin term-räknare och ber de andra medlemmarna om röster. En kandidat vinner om den får röster från en majoritet av de röstberättigade medlemmarna. Kandidaten med den mest uppdaterade oplog (högst optime) föredras – detta förhindrar dataförlust genom att säkerställa att den nya primary har sett alla bekräftade skrivningar.
// Inspect the term number and optime of all members
rs.status().members.forEach(m => {
print(m.name, 'term:', m.configTerm, 'optime:', m.optimeDate)
})Krav på majoritetsröstning
En kandidat behöver röster från mer än hälften av alla röstberättigade medlemmar (inte bara de som för närvarande kan nås). I en uppsättning med 3 medlemmar och 3 röster är en majoritet 2. Det innebär att den överlevande medlemmen inte kan välja sig själv om 2 medlemmar slutar fungera – den skulle arbeta med inaktuella data utan möjlighet att veta om de andra två medlemmarna har nyare skrivningar.
// 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 restoredValprocessen steg för steg
Valet går till så här: 1) En secondary upptäcker att primary saknas efter timeouten. 2) Den övergår till tillståndet CANDIDATE. 3) Den skickar RequestVote-meddelanden till alla andra medlemmar. 4) Medlemmarna beviljar röster om kandidatens oplog är minst lika aktuell som deras egen och de inte redan har röstat. 5) Vinnaren övergår till PRIMARY och börjar ta emot skrivningar.
Skrivningar är otillgängliga under valet
Under valperioden (vanligtvis några sekunder) nekas skrivningar eftersom det inte finns någon primary. MongoDB-drivrutinen buffrar skrivoperationerna och försöker skicka dem igen när en ny primary har valts. När retryable writes är aktiverat (standard i moderna drivrutiner) försöks tillfälliga valfel automatiskt igen en gång.
// Retryable writes are enabled by default in the connection string
const client = new MongoClient(
'mongodb+srv://host/db?retryWrites=true'
)Prioritet och valpreferens
När flera kandidater är lika uppdaterade avgör priority saken – medlemmen med högst prioritet vinner. Om en secondary med högre prioritet återansluter efter att ha varit offline utlöser den ett nytt val för att ta över rollen som primary. Om priority sätts till 0 utesluts medlemmen permanent från möjligheten att bli 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 med nätverkspartitioner
I en nätverkspartition kan medlemmarna på ena sidan av uppdelningen inte kommunicera med den andra. Sidan med flest röster kan välja en primärmedlem; minoritetssidan övergår till skrivskyddat läge. Detta förhindrar ett split-brain-scenario där två medlemmar samtidigt tror att de är primärmedlem och accepterar motstridiga skrivningar.
Övervaka failover-händelser
Ni kan övervaka val och failover-händelser genom att granska MongoDB-loggen eller fråga konfigurationen i system.replset. Atlas tillhandahåller realtidsaviseringar för valhändelser. I era applikationsloggar kommer ni att se toppar av MongoNotPrimaryError eller MongoNetworkError under ett val — skrivningar som kan göras om hanterar detta automatiskt.
// Check the number of elections in the current status
rs.status().electionHighestObservedTime
// Or watch change streams on 'admin.$cmd' for electionId changesSå håller ni failover snabb: bästa praxis
Så här minimerar ni tiden för failover: 1) Använd replikuppsättningar med ett udda antal medlemmar (3 eller 5) för att undvika behovet av arbitrarier. 2) Använd en write concern med majoritet för att säkerställa att den valda sekundärmedlemmen har alla bekräftade skrivningar. 3) Minimera oplog-fördröjningen genom att tillhandahålla tillräcklig oplog-storlek. 4) Placera replikuppsättningens medlemmar i samma region för heartbeat-signaler med låg latens.
// Increase oplog size at runtime (requires 4.4+)
db.adminCommand({ replSetResizeOplog: 1, size: 16384 })
// size in MB — 16 GB is suitable for busy clustersSnabbtest
Testa era kunskaper om begreppen MongoDB & NoSQL Databases från den här lektionen.
Sammanfattning av lektionen
I den här lektionen har ni lärt er att: heartbeats upptäcker fel på primärmedlemmen inom electionTimeoutMillis (10 s som standard), kandidaten med den mest aktuella oploggen och högst prioritet vinner valet och skrivningar som kan göras om gör att applikationer transparent klarar korta valperioder. Härnäst utforskar vi write concerns och hur ni styr skrivningarnas hållbarhet över replikuppsättningen.
Lär dig JavaScript med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Val och automatisk failover” gratis?
Ja – hela texten till ”Val och automatisk failover” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i MongoDB Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i MongoDB Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Val och automatisk failover”?
Ni simulerar ett fel på den primära noden och observerar valalgoritmen som befordrar en sekundär nod och håller avbrottstiden under 10 sekunder. Ni övar på MongoDB Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig MongoDB Academy?
Du behöver inga förkunskaper. Utbildningen i MongoDB Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Val och automatisk failover”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här MongoDB Academy-lektionen?
Ja. Varje MongoDB Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Replikuppsättningsmedlemmar: primär, sekundär och arbiter
- Val och automatisk failover
- Write concerns och bekräftad beständighet
- Läsinställningar: fördela läsbelastningen