“Det er paradoksalt, men alligevel sandt, at sige, at jo mere vi ved, jo mere uvidende bliver vi i absolut forstand, for det er kun gennem oplysning, at vi bliver bevidste om vores begrænsninger. Netop et af de mest glædelige resultater af intellektuel evolution er den kontinuerlige åbning af nye og større perspektiver." Nikola Tesla
PostgreSQL er et fantastisk projekt, og det udvikler sig med en fantastisk hastighed. Vi vil fokusere på udviklingen af fejltolerance-kapaciteter i PostgreSQL gennem dens versioner med en række blogindlæg.
PostgreSQL i en nøddeskal
PostgreSQL er fejltolerant i sin natur. For det første er det et avanceret open source-databasestyringssystem og vil fejre sin 20-års fødselsdag i år. Derfor er det en gennemprøvet teknologi og har et aktivt fællesskab, takket være hvilket den har en hurtig udvikling.
PostgreSQL er SQL-kompatibel (SQL:2011) og fuldt ACID-kompatibel (atomicitet, konsistens, isolation, holdbarhed).
PostgreSQL tillader fysisk og logisk replikering og har indbyggede fysiske og logiske replikeringsløsninger. Vi vil tale om replikeringsmetoder (i de næste blogindlæg) i PostgreSQL vedrørende fejltolerance.
PostgreSQL tillader synkrone og asynkrone transaktioner, PITR (Point-in-time Recovery) og MVCC (Multiversion concurrency control). Alle disse begreber er relateret til fejltolerance på et eller andet niveau, og jeg vil forsøge at forklare deres virkninger, mens jeg forklarer de nødvendige termer og deres applikationer i PostgreSQL.
PostgreSQL er robust!
Alle handlinger på databasen udføres inden for transaktioner , beskyttet af en transaktionslog der vil udføre automatisk nedbrudsgendannelse i tilfælde af softwarefejl.
Databaser kan eventuelt oprettes med datablokkontrolsummer for at hjælpe med at diagnosticere hardwarefejl. Der findes flere sikkerhedskopieringsmekanismer med fuld og detaljeret PITR i tilfælde af behov for detaljeret gendannelse. En række diagnostiske værktøjer er tilgængelige.
Databasereplikering understøttes indbygget. Synkron replikering kan give mere end "5 ni" (99,999 procent) tilgængelighed og databeskyttelse, hvis den er korrekt konfigureret og administreret.
I betragtning af fakta ovenfor kan vi nemt hævde, at PostgreSQL er robust!
PostgreSQL-fejltolerance:WAL
Write ahead-logning er det vigtigste fejltolerancesystem for PostgreSQL.
WAL består af en række binære filer skrevet til pg_xlog-undermappen i PostgreSQL-datamappen. Hver ændring, der foretages i databasen, registreres først i WAL, deraf navnet "write-ahead"-log, som et synonym for "transaktionslog". Når en transaktion forpligtes, er standard- og sikker adfærd at tvinge WAL-posterne til disk.
Skulle PostgreSQL crashe, afspilles WAL'en igen, hvilket returnerer databasen til punktet for den sidste forpligtede transaktion og dermed sikrer holdbarheden af eventuelle databaseændringer.
Transaktion? Forpligte?
Databaseændringer i sig selv skrives ikke til disken ved transaktionsbekræftelse. Disse ændringer bliver skrevet til disken engang senere af baggrundsskriveren eller checkpointeren på en velafstemt server. (Tjek WAL-beskrivelsen ovenfor. )
Transaktioner er et grundlæggende koncept i alle databasesystemer. Det væsentlige ved en transaktion er, at den samler flere trin i en enkelt alt-eller-intet-operation.
De mellemliggende tilstande mellem trinene er ikke synlige for andre samtidige transaktioner, og hvis der opstår en fejl, der forhindrer transaktionen i at gennemføre, så påvirker ingen af trinene databasen overhovedet. PostgreSQL understøtter ikke dirty-reads (transaktion læser data skrevet af en samtidig ikke-forpligtet transaktion ).
Checkpoint
Crash recovery afspiller WAL'en, men fra hvilket tidspunkt begynder den at genoprette?
Gendannelse starter fra punkter i WAL kendt som checkpoints . Varigheden af nedbrudsgendannelse afhænger af antallet af ændringer i transaktionsloggen siden sidste kontrolpunkt. Et kontrolpunkt er et kendt sikkert udgangspunkt for gendannelse, da det garanterer, at alle tidligere ændringer i databasen allerede er skrevet til disken.
Et kontrolpunkt kan enten være umiddelbart eller planlagt . Umiddelbare kontrolpunkter udløses af en eller anden handling fra en superbruger, såsom CHECKPOINT
kommando eller andet; planlagte kontrolpunkter afgøres automatisk af PostgreSQL.
Konklusion
I dette blogindlæg har vi listet vigtige funktioner i PostgreSQL, der er relateret til fejltolerance i PostgreSQL. Vi nævnte fremskrivningslogning, transaktion, commit, isolationsniveauer, checkpoints og nedbrudsgendannelse. Vi fortsætter med PostgreSQL-replikering ved næste blogindlæg.
Referencer:
PostgreSQL-dokumentation
PostgreSQL 9 Administration Kogebog – Anden udgave