Bruke Replication i PostgreSQL 9.0


Den siste PostgreSQL 9.0 utgaven har flere betydelige forbedringer i PostgreSQL innebygde replikering løsning. Klar til å legge replikering til din PostgreSQL installere? Det er enklere enn du kanskje tror.

Replication er en viktig teknologi for noen database offer, fordi databaser er typisk virksomhetskritiske systemer. Nedetid – eller, enda verre, tap &mdash data; kan resultere ikke bare i ulempe for ansatte og kunder, men også i tapt produktivitet og tapte inntekter. Ved å kopiere fra en primær server, eller master, til en eller flere sekundære servere, noen ganger kalt fete, er sannsynligheten for tap av data eller utvidet nedetid kan bli sterkt redusert.

PostgreSQL innebygde replikering Løsningen fungerer ved å kopiere Innholdet i skrive fremover log (WAL) fra hovedserveren til hver standby. Visse operasjoner, som for eksempel bulk data lastes inn i en nyopprettet tabellen, trenger ikke å være WAL-logget når replikering ikke er i bruk; så replikering har noen overhead. Imidlertid, for å tillate riktig krasjgjenoppretting, de fleste operasjoner må logge hvorvidt eller ikke-replikasjon er i bruk, slik at den overliggende er vanligvis ganske liten.

Selv PostgreSQL har støttet en form for innebygget for replikering flere år, slipper 9.0 tilbyr en rekke store forbedringer. Først i utgivelser før 9,0, beredskaps- servere ofte ligget master med flere minutter. WAL ble overført fra mester til standby i 16MB biter, enten når en blings ble helt fylt, eller når en timeout utløpt. På grunn av den store del størrelse, det var upraktisk å angi tidsavbrudd til mindre enn flere minutter. Derfor, i tilfelle av et samlet tap på master, flere minutter igjen av transaksjoner kan gå tapt. I PostgreSQL 9.0, kan innholdet av skrive fremover log streames til standby-servere i nær sanntid, vanligvis resulterer i en forsinkelse på noen få sekunder eller mindre. Mens det fortsatt er asynkron replikering, er vinduet for tap av data mye mindre.

For det andre, med PostgreSQL 9.0, kan du kjøre beskyttede spørringer som skal kjøres på standby server (med riktig konfigurasjon). Standby-spørringer kan noen ganger utsette anvendelsen av skrive fremover logg poster mottatt fra master, eller (avhengig av konfigurasjon) de kan bli kansellert dersom den fører til en unødig forsinkelse i å søke skrive fremover loggposter. Som et resultat, kan denne funksjonen ikke være egnet for alle bruksmåter, men det fortsatt representerer et stort fremskritt i forhold til tidligere PostgreSQL versjoner, der ingen spørringer kan bli henrettet på standby i det hele tatt.

Slik konfigurerer en PostgreSQL Standby Server

Konfigurere en standby-server for PostgreSQL er relativt enkelt, selv om det krever å redigere flere konfigurasjonsfiler (alle som bruker enkle tekstformater) samt diverse andre tiltak som er beskrevet nedenfor. Det første trinnet er å redigere postgresql.conf på master og konfigurere følgende innstillinger. Variablene som vises her er sannsynligvis allerede til stede i postgresql.conf, men de vil trolig bli kommentert ut. Uncomment dem og sette dem til verdiene som vises her.

wal_level = hot_standby max_wal_senders = 1 wal_keep_segments = 25

Innstilling wal_level = hot_standby forteller PostgreSQL å generere tilstrekkelig detaljerte skrive fremover logger for å tillate kjøring av spørring på slave. Den max_wal_senders parameter styrer maks antall startende servere denne master kan støtte. I noen tilfeller vil du kanskje to eller flere, men her vi antar at du trenger bare 1.

Hvis standby går ned, verdien av wal_keep_segments styrer mengden av WAL beholdes av master i overkant av hva som er nødvendig for krasjgjenoppretting. I dette tilfellet har vi spurte mesteren til å beholde 25 ekstra 16MB WAL segmenter, eller en ekstra 400MB av WAL. Hvis en standby går ned for lenge nok til at master genererer mer enn 400MB av skrive fremover logger i mellomtiden, kan den finne på å gjenoppta kontakten at filene den trenger for å fange opp med master er ikke lenger til stede. I så fall må du gjenta denne installasjonsprosessen. Alternativt kan du slå på arkivering ved hjelp av archive_mode og archive_command innstillingene på master, som tillater vilkårlige mengder WAL skal beholdes. Men med denne metoden, må du være forsiktig med å fylle opp disken.

Når du har gjort endringene beskrevet ovenfor, redigere master pg_hba.conf fil (vanligvis plassert i samme katalog som postgresql.conf) og legge til en linje på formen " vert replikering alle SLAVEIP /32 tillit " hvor SLAVEIP er en IP-adresse. Dette vil tillate replikasjonsforbindelser, men bare fra den IP-adressen. (Andre autentiseringsmetoder kan også brukes, som omtalt i dokumentasjonen.) Når du har gjort alle konfigurasjonsendringer som er beskrevet ovenfor, starter PostgreSQL på hovedserveren: parametrene wal_level og max_wal_senders kan ikke endres uten en server restart.

Du er nå klar til å sette opp slave. For å gjøre dette, ta en " hot backup " av master. Logg inn i databasen som databasesuperbruker (ofte " postgres ") og utføre kommandoen " VELG pg_start_backup ('backup') ".

Så, med serveren fortsatt kjører, kopiere innholdet i datakatalog (bruk " SHOW data_directory " for å finne det hvis du ikke er sikker på hvor det er, det er normalt den samme mappen som inneholder postgresql.conf) til venteserveren ved å filkopiering verktøy; " rsync -en " er et godt valg. Når dette er fullført, kan du logge inn i master database og utføre kommandoen " VELG pg_stop_backup () ". (Dette kan gi en advarsel, som du kan se bort fra.)

Når den varme sikkerhetskopieringen er fullført, kan du begynne å konfigurere slave. Edit postgresql.conf på slave og sette hot_standby = på. Som med konfigurasjonsendringer på master, bør innstillingen allerede finnes i filen, men det kan være kommentert ut og standardverdien vil trolig være av. Fjern eventuelle left postmaster.pid fil kopiert fra master. Lag en fil som heter recovery.conf i samme katalog som postgresql.conf inneholder følgende linjer (erstatte IP av hovedserveren for MASTERIP):

standby_mode = 'på' primary_conninfo = 'host = MASTERIP'

Du er klar til å starte opp slave. Det bør koble til master og begynne å kopiere! Du bør også være i stand til å utføre spørringer på slave, men bare hvis de er strengt beskyttet. Det finnes flere metoder for å fremme slaven til en master. Den enkleste metoden er å fjerne recovery.conf og start slave. Alternativt kan du legge til følgende linje i recovery.conf:

trigger_file = '/sti /til /noen /fil /som /ikke /ikke /eksisterer'

Hvis den navngitte filen er senere opprettet, vil recovery.conf filen bli omdøpt til recovery.done, og serveren vil opphøre replikering og begynner å tillate lese-skrive-transaksjoner. Denne metoden kan være en fordel fordi det unngår behovet for en server restart.

Det er omtrent det! Gi det en sjanse og se hvordan det fungerer for deg. Hvis du har spørsmål, er det pgsql-general postliste et godt sted å spørre. Anmeldelser



Previous:
Next Page: