MĂ„nga Ă€r bekanta med databashanteringssystemet PostgreSQL, som har presterat utmĂ€rkt pĂ„ mindre installationer. Men trenden mot att övergĂ„ till Open Source har blivit allt tydligare, Ă€ven nĂ€r det gĂ€ller stora företag och företagskrav. I denna artikel kommer vi att berĂ€tta hur man integrerar Postgres i en företagsmiljö och dela med oss av erfarenheterna frĂ„n att skapa ett backup-system (BĂS) för denna databas, med hjĂ€lp av Commvaults backup-system som exempel.

PostgreSQL har redan bevisat sitt vĂ€rde â databashanteringssystemet fungerar utmĂ€rkt, och det anvĂ€nds av moderna digitala företag som Alibaba och TripAdvisor, medan avsaknaden av licensavgifter gör det till ett attraktivt alternativ till jĂ€ttar som MS SQL eller Oracle DB. Men sĂ„ snart vi börjar tĂ€nka pĂ„ PostgreSQL i företagslandskapet stöter vi pĂ„ strikta krav: "Hur stĂ„r det till med konfigurationens hög tillgĂ€nglighet? KatastrofĂ„terstĂ€llning? Var Ă€r den omfattande övervakningen? Vad med automatiserade sĂ€kerhetskopior? Hur om anvĂ€ndningen av bandbibliotek bĂ„de direkt och som sekundĂ€r lagring?"

Ă
ena sidan har PostgreSQL inga inbyggda backup-funktioner, som "vuxna" databashanteringssystem som RMAN i Oracle DB eller SAP Database Backup. Ă
andra sidan stöder leverantörer av företagsbackup-system (Veeam, Veritas, Commvault) Àven PostgreSQL, men arbetar i praktiken endast med specifika (vanligtvis fristÄende) konfigurationer och med ett antal begrÀnsningar.
Backup-system som Ă€r speciellt utvecklade för PostgreSQL, som Barman, Wal-g, pg_probackup, Ă€r extremt populĂ€ra i smĂ„ installationer av PostgreSQL eller dĂ€r tunga sĂ€kerhetskopior av andra IT-element inte behövs. Till exempel kan det finnas bĂ„de fysiska och virtuella system i infrastrukturen som PostgreSQL, OpenShift, Oracle, MariaDB, Cassandra, etc. Allt detta bör helst sĂ€kerhetskopieras med ett gemensamt verktyg. Att installera en separat lösning enbart för PostgreSQL Ă€r en dĂ„lig idĂ©: data kommer att kopieras nĂ„gonstans pĂ„ en disk, och sedan mĂ„ste de flyttas till band. Denna överlappning av sĂ€kerhetskopior ökar tiden för bakĂ„tkopiering och, Ă€nnu viktigare, Ă„terstĂ€llning. servrar, OpenShift, Oracle, MariaDB, Cassandra och sĂ„ vidare. Det Ă€r önskvĂ€rt att sĂ€kerhetskopiera allt med ett gemensamt verktyg. Att sĂ€tta upp en separat lösning enbart för PostgreSQL Ă€r en dĂ„lig idĂ©: data kommer att kopieras till en disk och sedan mĂ„ste de flyttas till band. Denna dubbelkopiering av sĂ€kerhetskopieringen ökar tiden för sĂ€kerhetskopiering, och vad som Ă€r Ă€nnu viktigare â Ă„terstĂ€llningen.
I företagslösningar sker sÀkerhetskopiering av installationen med ett visst antal noder i den dedikerade klustern. Till exempel kan Commvault bara fungera med en tvÄnodenkluster, dÀr Primary och Secondary Àr strikt kopplade till specifika noder. Och det finns egentligen ingen mening med att backa upp frÄn Secondary, eftersom det medför sina begrÀnsningar. PÄ grund av databashanteringssystemets egenskaper skapas ingen dump pÄ Secondary, sÄ det kvarstÄr endast en möjlighet för filbackup.
För att minska risken för driftstopp skapas en "levande" klusterkonfiguration för att bilda ett felfritt system, och Primary kan gradvis migrera mellan olika servrar. Till exempel startar programvaran Patroni sjÀlv Primary pÄ en slumpmÀssigt vald nod i klustret. SRK har ingen möjlighet att spÄra detta "utanför lÄdan", och om konfigurationen Àndras, bryts processerna. Det vill sÀga att införandet av extern hantering hindrar SRK frÄn att fungera effektivt, eftersom den styrande servern helt enkelt inte förstÄr varifrÄn och vilka data som ska kopieras.
En annan frÄga Àr genomförandet av backup i Postgres. Det Àr möjligt via dump, och pÄ smÄ databaser fungerar det. Men i stora databaser tar dumpen lÄng tid, krÀver mÄnga resurser och kan leda till att databasen kraschar.
Filbackup löser situationen, men pÄ stora databaser Àr den lÄngsam, eftersom den arbetar i en endast trÄdad lÀge. Dessutom fÄr leverantörerna ett helt antal ytterligare begrÀnsningar. Ibland kan man inte anvÀnda filbackup och dumpbackup samtidigt, ibland stöds inte deduplicering. Det uppstÄr mÄnga problem, och oftare Àr det enklare att istÀllet för Postgres vÀlja en dyrare, men beprövad databas.
Det finns ingen vÀg tillbaka! Bakom oss Moskva utvecklare!
Men nyligen stÀlldes vÄrt team inför en utmaning: i projektet för att skapa AIS OSAGO 2.0, dÀr vi byggde IT-infrastrukturen, valde utvecklarna PostgreSQL för det nya systemet.
För stora programvaruutvecklare Àr det mycket enklare att anvÀnda "moderna" open-source-lösningar. Bland Facebooks anstÀllda finns det tillrÀckligt med specialister som upprÀtthÄller arbetet med detta databashanteringssystem. NÀr det gÀller RSA lÄg alla "andra dags"-uppgifter pÄ vÄra axlar. Vi krÀvdes att sÀkerstÀlla felfri funktion, samla klustret och sjÀlvklart organisera sÀkerhetskopiering. Handlingslogiken var sÄ hÀr:
- LĂ€ra SRK att göra en backup med primĂ€rnoden i klustret. För detta mĂ„ste SRK kunna hitta den â vilket betyder att integration med nĂ„gon form av hanteringslösning för PostgreSQL-kluster behövs. I fallet med RCA anvĂ€ndes programvaran Patroni för detta.
- BestĂ€mma backup-typ baserat pĂ„ datavolymer och Ă„terstĂ€llningskrav. Till exempel, nĂ€r det behövs granular Ă„terstĂ€llning av sidor, anvĂ€nd dump, och om databaserna Ă€r stora och ingen granular Ă„terstĂ€llning krĂ€vs â arbeta pĂ„ filnivĂ„.
- LÀgga till möjlighet för blockbackup i lösningen, sÄ att det gÄr att skapa backup i flertrÄdad driftsÀtt.
Vi satte frÄn början som mÄl att skapa ett effektivt och enkelt system utan en monsterbelastning av extra komponenter. Ju fÀrre provisoriska lösningar, desto mindre belastning pÄ personalen och lÀgre risk för att SRK gÄr sönder. Metoder dÀr Veeam och RMAN anvÀndes, uteslöt vi direkt, eftersom paketet med tvÄ lösningar redan antyder systemets otillförlitlighet.
Lite magi för företag
SÄ, vi behövde garantera pÄlitlig backup för 10 kluster med 3 noder vardera, samtidigt som en speglad infrastruktur finns i den reserv-DC. DC:n arbetar enligt principen aktiv-passiv nÀr det gÀller PostgreSQL. Den totala databaskapaciteten var 50 TB. Det hÀr kan enkelt hanteras av vilken nivÄ företags-SRK som helst. Men problemet Àr att Postgres frÄn början inte har en grund för full och djup kompatibilitet med backup-system. DÀrför var vi tvungna att leta efter en lösning som frÄn början har maximalt med funktionalitet kopplad till PostgreSQL, och sedan utveckla systemet.
Vi genomförde 3 interna "hackathon" â granskade mer Ă€n femtio alternativ, testade dem, gjorde justeringar baserat pĂ„ vĂ„ra hypoteser, och kontrollerade dem igen. Efter att ha analyserat tillgĂ€ngliga alternativ valde vi Commvault. Denna produkt kunde redan "ur lĂ„dan" arbeta med den enklaste klusterinstallation av PostgreSQL, och dess öppna arkitektur vĂ€ckte hopp (som visade sig vara berĂ€ttigat) om framgĂ„ngsrik vidareutveckling och integration. Dessutom kan Commvault utföra backup av loggar för PostgreSQL. Till exempel kan Veritas NetBackup endast göra fullstĂ€ndiga backuper nĂ€r det gĂ€ller PostgreSQL.
Mer information om arkitekturen. Commvaults styrservrar installerades i var och en av de tvÄ datacenter i en CommServ HA-konfiguration. Systemet Àr speglat, hanteras via en enda konsol och uppfyller alla företagskrav vad gÀller HA.

Vi har ocksÄ startat tvÄ fysiska medieservrar i varje datacenter, som via SAN genom Fibre Channel Àr anslutna till diskarrayer och bandbibliotek som sÀrskilt har tilldelats för backuper. UtstrÀckta dedupliceringsbaser sÀkerstÀllde medieservrarnas redundans, och anslutningen av varje server till varje CSV ger möjlighet till kontinuerlig drift vid eventuell komponentfel. Systemarkitekturen tillÄter fortsatt backup, Àven om ett datacenter faller.
Patroni bestĂ€mmer Primary-noden för varje kluster. Det kan vara vilken ledig nod som helst i datacentret â men endast i huvudklustret. I reservklustret Ă€r alla noder Secondary.
För att Commvault ska förstÄ vilken nod i klustret som Àr Primary, integrerade vi systemet (tack för den öppna arkitekturen) med Postgres. För detta skapades ett skript som rapporterar aktuell plats för Primary-noden till kontrollsystemet. servern Commvault.
Ăvergripande ser processen ut sĂ„ hĂ€r:
Patroni vĂ€ljer Primary â Keepalived startar IP-klustret och kör skriptet â Commvault-agenten pĂ„ den valda klusternoden fĂ„r en avisering om att detta Ă€r Primary â Commvault justerar automatiskt backupen inom ramverket för pseudoklienten.

Fördelen med detta tillvÀgagÄngssÀtt Àr att lösningen inte pÄverkar varken konsistens, korrekthet av loggar eller ÄterstÀllning av Postgres-instansen. Den Àr ocksÄ lÀtt att skala, eftersom det nu inte lÀngre Àr nödvÀndigt att faststÀlla Primary och Secondary-noder för Commvault. Det rÀcker med att systemet förstÄr var Primary Àr, och antalet noder kan ökas praktiskt taget till vilket vÀrde som helst.
Lösningen pÄstÄr sig inte vara perfekt och har sina nyanser. Commvault kan bara sÀkerhetskopiera hela instanser, inte enskilda databaser. DÀrför skapades en separat instans för varje databas. Riktiga kunder har sammanstÀllts till virtuella pseudoklienter. Varje pseudoklient i Commvault representerar ett UNIX-kluster. Noderna i klustret som har Commvault-agenten för Postgres installerad lÀggs till. Som ett resultat sÀkerhetskopieras alla virtuella noder i pseudoklienten som en enda instans.
Inuti varje pseudokund anges en aktiv nod i klustret. Det Ă€r denna som vĂ„r integrationslösning för Commvault definierar. Principen bakom dess funktion Ă€r ganska enkel: om en kluster-IP aktiveras pĂ„ noden, stĂ€ller skriptet in parameter "aktiv nod" i Commvault-agentens binĂ€rfil â i praktiken sĂ€tter skriptet "1" i rĂ€tt del av minnet. Agenten överför dessa uppgifter till CommServe, och Commvault gör en sĂ€kerhetskopiering frĂ„n den nödvĂ€ndiga noden. Dessutom kontrollerar skriptet konfigurationens korrekthet, vilket hjĂ€lper till att undvika fel vid start av sĂ€kerhetskopiering.
Stora databaser sÀkerhetskopieras dessutom blockvis i flera trÄdar, vilket uppfyller kraven för RPO och sÀkerhetskopieringsfönstret. Belastningen pÄ systemet Àr obetydlig: FullstÀndiga kopior sker inte sÄ ofta, under övriga dagar samlas endast loggar, och det görs under perioder med lÄg belastning.
För övrigt har vi tillĂ€mpat sĂ€rskilda policys för sĂ€kerhetskopiering av arkivloggar i PostgreSQL â de lagras enligt andra regler, kopieras enligt ett annat schema och deduplicering aktiveras inte för dem, eftersom dessa loggar bĂ€r unik information.
För att sÀkerstÀlla konsistensen i hela IT-infrastrukturen Àr separata filklienter för Commvault installerade pÄ varje nod i klustret. De utesluter Postgres-filer frÄn sÀkerhetskopiorna och Àr avsedda enbart för sÀkerhetskopiering av operativsystem och applikationer. För denna del av datan finns ocksÄ en specifik policy och en egen förvaringsperiod.

Just nu pÄverkar SRK inte produktiva tjÀnster, men om situationen förÀndras kan man i Commvault aktivera en belastningsbegrÀnsningssystem.
Bra? Bra!
SÄ, vi har fÄtt en inte bara fungerande utan Àven helt automatiserad sÀkerhetskopiering för den klusterbaserade installationen av PostgreSQL, som uppfyller alla krav i enterprise-utmaningar.
Parametrarna RPO och RTO pÄ 1 timme och 2 timmar Àr övertrÀffade med marginal, vilket innebÀr att systemet kommer att uppfylla dem Àven vid en betydande ökning av lagringsvolymerna. Trots mÄnga tvivel visade sig PostgreSQL och en enterprise-miljö vara helt kompatibla. Och nu vet vi av egen erfarenhet att sÀkerhetskopiering för sÄdana databashanterare Àr möjlig i de mest varierande konfigurationerna.
Naturligtvis har vi pÄ denna vÀg slitit ut sju par jÀrnsandaler, övervunnit ett antal svÄrigheter, trampat pÄ nÄgra vÀltor och rÀttat till ett antal misstag. Men nu har metoden testats och kan tillÀmpas för att införa Open Source istÀllet för proprietÀra databashanteringssystem under tuffa företagsförhÄllanden.
Har du provat att arbeta med PostgreSQL i en företagsmiljö?
Författare:
Oleg Lavrenov, systemdesigner för datalagring pÄ "Infosystem Jet"
Dmitry Yerykin, systemdesigner för datorkomplex pÄ "Infosystem Jet"
KĂ€lla: habr.com
