Sådan konfigureres PostgreSQL 12 Streaming Replication i CentOS 8


PostgreSQL-databasen understøtter flere replikeringsløsninger til at opbygge skalerbare, fejltolerante applikationer med høj tilgængelighed, hvoraf den ene er WAL-levering (Write-Ahead Log). Denne løsning giver mulighed for at implementere en standby-server ved hjælp af filbaseret logforsendelse eller streamingreplikering eller, hvor det er muligt, en kombination af begge tilgange.

Med streamingreplikering er en standby (replikationsslave) databaseserver konfigureret til at oprette forbindelse til master/primær server, som streamer WAL-poster til standby, når de genereres, uden at vente på, at WAL-filen udfyldes.

Streamingsreplikering er som standard asynkron, hvor data skrives til standby-serverne, når en transaktion er begået på den primære server. Dette betyder, at der er en lille forsinkelse mellem at foretage en transaktion i masterserveren og ændringerne bliver synlige på standby-serveren. En ulempe ved denne tilgang er, at i tilfælde af at masterserveren går ned, kan eventuelle ikke-forpligtede transaktioner muligvis ikke replikeres, og dette kan medføre datatab.

Denne vejledning viser, hvordan du opsætter en Postgresql 12-master-standby-streaming-replikering på CentOS 8. Vi bruger "replikations-slots" til standby som en løsning for at undgå, at masterserveren genbruger gamle WAL-segmenter, før standby har modtaget dem.

Bemærk, at i forhold til andre metoder beholder replikationsspor kun det antal segmenter, som man vidste er nødvendigt.

Denne guide antager, at du har forbindelse til din master- og standby-databaseserver som rod via SSH (brug Sudo-kommandoen, hvis det er nødvendigt, hvis du er forbundet som en normal bruger med administrative rettigheder):

Postgresql master database server: 		10.20.20.9
Postgresql standby database server:		10.20.20.8

Begge databaseservere skal have Postgresql 12 installeret, ellers se: Sådan installeres PostgreSQL og pgAdmin i CentOS 8.

Bemærk: PostgreSQL 12 kommer med store ændringer i implementering og konfiguration af replikering, såsom udskiftning af recovery.conf og konvertering af recovery.conf-parametre til normale PostgreSQL-konfigurationsparametre, hvilket gør det meget nemmere at konfigurere klyngereplikering.

Trin 1: Konfiguration af PostgreSQL Master/Primary Database Server

1. På masterserveren skal du skifte til postgres-systemkontoen og konfigurere de eller de IP-adresser, som masterserveren vil lytte til, for at få forbindelse fra klienter.

I dette tilfælde bruger vi * hvilket betyder alle.

# su - postgres
$ psql -c "ALTER SYSTEM SET listen_addresses TO '*';"

ALTER SYSTEM SET SQL-kommandoen er en kraftfuld funktion til at ændre en servers konfigurationsparametre direkte med en SQL-forespørgsel. Konfigurationerne gemmes i filen postgresql.conf.auto placeret i roden til datamappen (f.eks./Var/lib/pgsql/12/data /) og læses ud over dem, der er gemt i postgresql.conf. Men konfigurationer i den førstnævnte har forrang for dem i de senere og andre relaterede filer.

2. Opret derefter en replikeringsrolle, der vil blive brugt til forbindelser fra standby-serveren til masterserveren ved hjælp af createuser-programmet. I den følgende kommando beder flaget -P om en adgangskode til den nye rolle, og -e ekko de kommandoer, som createuser genererer og sender til databaseserveren.

# su – postgres
$ createuser --replication -P -e replicator
$ exit

3. Indtast derefter følgende post i slutningen af /var/lib/pgsql/12/data/pg_hba.conf klientgodkendelseskonfigurationsfilen med databasefeltet indstillet til replikering som vist på skærmbilledet.

host    replication     replicator      10.20.20.8/24     md5

4. Genstart nu Postgres12-tjenesten ved hjælp af følgende systemctl-kommando for at anvende ændringerne.

# systemctl restart postgresql-12.service

5. Hvis du derefter har firewalld-tjenesten kørende, skal du tilføje Postgresql-tjenesten i firewalld-konfigurationen for at tillade anmodninger fra standby-serveren til masteren.

# firewall-cmd --add-service=postgresql --permanent
# firewall-cmd --reload

Trin 2: Lav en basesikkerhedskopiering for at bootstrape Standby-serveren

6. Dernæst skal du lave en basesikkerhedskopi af masterserveren fra standby-serveren. dette hjælper med at bootstrap standby-serveren. Du skal stoppe postgresql 12-tjenesten på standby-serveren, skifte til postgres-brugerkontoen, sikkerhedskopiere datakataloget (/ var/lib/pgsql/12/data /) og derefter slette alt under den som vist, før du tager basen sikkerhedskopi.

# systemctl stop postgresql-12.service
# su - postgres
$ cp -R /var/lib/pgsql/12/data /var/lib/pgsql/12/data_orig
$ rm -rf /var/lib/pgsql/12/data/*

7. Brug derefter værktøjet pg_basebackup til at tage basesikkerhedskopien med det rigtige ejerskab (databasesystembrugeren, dvs. Postgres, inden for Postgres-brugerkontoen) og med de rigtige tilladelser.

I følgende kommando er indstillingen:

  • -h - angiver den vært, der er masterserveren.
  • -D - angiver datakataloget.
  • -U - angiver forbindelsesbrugeren.
  • -P - muliggør statusrapportering.
  • -v - aktiverer detaljeret tilstand.
  • -R - muliggør oprettelse af gendannelseskonfiguration: Opretter en standby.signalfil og tilføj forbindelsesindstillinger til postgresql.auto.conf under datakataloget.
  • -X - bruges til at medtage de krævede forudgående logfiler (WAL-filer) i sikkerhedskopien. En værdi af stream betyder at streame WAL, mens sikkerhedskopien oprettes.
  • -C - muliggør oprettelse af en replikationsåbning navngivet af -S-indstillingen, før sikkerhedskopiering startes.
  • -S - angiver navnet på replikeringssporet.

$ pg_basebackup -h 10.20.20.9 -D /var/lib/pgsql/12/data -U replicator -P -v  -R -X stream -C -S pgstandby1
$ exit

8. Når sikkerhedskopieringsprocessen er udført, skal den nye datakatalog på standby-serveren se sådan ud i skærmbilledet. Der oprettes et standby.signal, og forbindelsesindstillingerne føjes til postgresql.auto.conf. Du kan liste indholdet ved hjælp af kommandoen ls.

# ls -l /var/lib/pgsql/12/data/

En replikationsslave kører i “Hot Standby” -tilstand, hvis parameteren hot_standby er indstillet til til (standardværdien) i postgresql.conf, og der er en standby.signal-fil til stede i datakataloget.

9. Nu tilbage på masterserveren, skal du kunne se replikationsåbningen kaldet pgstandby1, når du åbner visningen pg_replication_slots som følger.

# su - postgres
$ psql -c "SELECT * FROM pg_replication_slots;"
$ exit

10. Brug kommandoen cat for at se de forbindelsesindstillinger, der er tilføjet i filen postgresql.auto.conf.

# cat /var/lib/pgsql/12/data/postgresql.auto.conf

11. Start nu normale databasefunktioner på standby-serveren ved at starte PostgreSQL-tjenesten som følger.

# systemctl start postgresql-12

Trin 3: Test af PostgreSQL Streaming Replication

12. Når en forbindelse er etableret med succes mellem master og standby, vil du se en WAL-modtagerproces i standby-serveren med en status som streaming, du kan kontrollere dette ved hjælp af visningen pg_stat_wal_receiver.

$ psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"

og en tilsvarende WAL-afsenderproces i master/primær server med en tilstand af streaming og en sync_state of async, kan du kontrollere denne pg_stat_replication pg_stat_replication-visning.

$ psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Fra skærmbilledet ovenfor er streamingreplikationen asynkron. I det næste afsnit vil vi demonstrere, hvordan du eventuelt aktiverer synkron replikering.

13. Test nu, om replikeringen fungerer fint ved at oprette en testdatabase på masterserveren, og kontroller, om den findes på standby-serveren.
[master] postgres = # CREATE DATABASE tecmint;
[standby] postgres = # \ l

Valgfrit: Aktivering af synkron replikering

14. Synkron replikering giver mulighed for at begå en transaktion (eller skrive data) til den primære database og standby/replika samtidigt. Det bekræfter kun, at en transaktion er vellykket, når alle ændringer foretaget af transaktionen er blevet overført til en eller flere synkron standby-servere.

For at aktivere synkron replikering skal synchronous_commit også være indstillet til on (hvilket er standardværdien, og der er derfor ikke behov for nogen ændring), og du skal også indstille parameteren synchronous_standby_names til en ikke-tom værdi. For denne vejledning indstiller vi det til alle.

$ psql -c "ALTER SYSTEM SET synchronous_standby_names TO  '*';"

15. Genindlæs derefter PostgreSQL 12-tjenesten for at anvende de nye ændringer.

# systemctl reload postgresql-12.service

16. Når du igen spørger WAL-afsenderprocessen på den primære server, skal den vise en tilstand af streaming og en sync_stat for synkronisering.

$ psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Vi er kommet til slutningen af denne vejledning. Vi har vist, hvordan man konfigurerer PostgreSQL 12-master-standby-databasestreaming-replikering i CentOS 8. Vi dækkede også, hvordan man aktiverer synkron replikering i en PostgreSQL-databaseklynge.

Der er mange anvendelser af replikering, og du kan altid vælge en løsning, der opfylder dit it-miljø og/eller applikationsspecifikke krav. For flere detaljer, gå til Log-Shipping Standby-servere i PostgreSQL 12-dokumentationen.