Zoeken op website

Hoe PostgreSQL 12 streaming-replicatie in CentOS 8 te configureren


De PostgreSQL-database ondersteunt verschillende replicatieoplossingen om schaalbare, fouttolerante applicaties met hoge beschikbaarheid te bouwen, waarvan er één Write-Ahead Log (WAL) is ) Verzenden. Met deze oplossing kan een standby-server worden geïmplementeerd met behulp van op bestanden gebaseerde logverzending of streaming-replicatie, of waar mogelijk een combinatie van beide benaderingen.

Bij streaming-replicatie wordt een standby-databaseserver (replicatie-slave) geconfigureerd om verbinding te maken met de master/primaire server, die WAL-records naar de standby-server streamt zodra ze worden gegenereerd, zonder te wachten op de WAL bestand dat moet worden gevuld.

Standaard is streaming-replicatie asynchroon waarbij gegevens naar de standby-server(s) worden geschreven nadat een transactie op de primaire server is vastgelegd. Dit betekent dat er een kleine vertraging zit tussen het uitvoeren van een transactie op de masterserver en het zichtbaar worden van de wijzigingen op de standby-server. Een nadeel van deze aanpak is dat in het geval dat de hoofdserver crasht, niet-vastgelegde transacties mogelijk niet worden gerepliceerd, wat gegevensverlies kan veroorzaken.

Deze handleiding laat zien hoe u een Postgresql 12 master-standby streaming-replicatie instelt op CentOS 8. We zullen “replicatieslots” gebruiken voor de stand-by als oplossing om te voorkomen dat de masterserver oude WAL-segmenten recyclet voordat de stand-by deze heeft ontvangen.

Houd er rekening mee dat replicatieslots, vergeleken met andere methoden, alleen het aantal segmenten behouden waarvan bekend is dat ze nodig zijn.

Testomgeving:

In deze handleiding wordt ervan uitgegaan dat u als root bent verbonden met uw master- en standby-databaseservers via SSH (gebruik de Sudo-opdracht waar nodig als u verbonden bent als een normale gebruiker met beheerdersrechten):

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

Op beide databaseservers moet Postgresql 12 geïnstalleerd zijn, zie anders: PostgreSQL en pgAdmin installeren in CentOS 8.

Opmerking: PostgreSQL 12 wordt geleverd met grote wijzigingen in de replicatie-implementatie en configuratie, zoals vervanging van recovery.conf en de conversie van recovery.conf parameters naar normale PostgreSQL-configuratieparameters, waardoor het veel eenvoudiger wordt om clusterreplicatie te configureren.

Stap 1: Configureren van de PostgreSQL Master/Primary Database Server

1. Schakel op de masterserver over naar het postgres-systeemaccount en configureer de IP-adressen waarop de masterserver zal luisteren naar verbindingen van clients.

In dit geval gebruiken we *, wat alles betekent.

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

Het ALTER SYSTEM SET SQL-commando is een krachtige functie om de configuratieparameters van een server rechtstreeks met een SQL-query te wijzigen. De configuraties worden opgeslagen in het bestand postgresql.conf.auto dat zich in de hoofdmap van de datamap bevindt (bijvoorbeeld /var/lib/pgsql/12/data/) en lees de toevoeging naar die opgeslagen in postgresql.conf. Maar configuraties in de eerste hebben voorrang op die in de latere en andere gerelateerde bestanden.

2. Maak vervolgens een replicatierol aan die wordt gebruikt voor verbindingen van de standby-server naar de masterserver, met behulp van het createuser programma. In de volgende opdracht vraagt de vlag -P om een wachtwoord voor de nieuwe rol en herhaalt -e de opdrachten die createuser genereert en naar de databaseserver verzendt.

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

3. Voer vervolgens de volgende invoer in aan het einde van het /var/lib/pgsql/12/data/pg_hba.conf configuratiebestand voor clientauthenticatie, waarbij het databaseveld is ingesteld op replicatie zoals weergegeven in de schermafbeelding.

host    replication     replicator      10.20.20.8/24     md5

4. Start nu de Postgres12-service opnieuw op met behulp van de volgende systemctl-opdracht om de wijzigingen toe te passen.

systemctl restart postgresql-12.service

5. Vervolgens moet u, als u de service firewalld draait, de Postgresql-service toevoegen aan de firewalld-configuratie om verzoeken van de standby-server naar de master toe te staan.

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

Stap 2: Een basisback-up maken om de stand-byserver op te starten

6. Vervolgens moet u een basisback-up maken van de hoofdserver vanaf de standby-server; dit helpt bij het opstarten van de standby-server. U moet de postgresql 12-service op de standby-server stoppen, overschakelen naar het postgres-gebruikersaccount, een back-up maken van de gegevensmap (/var/lib/pgsql/12/data/) en vervolgens alles daaronder verwijderen zoals weergegeven, voordat u de basisback-up maakt.

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. Gebruik vervolgens de tool pg_basebackup om de basisback-up te maken met de juiste eigenaar (de databasesysteemgebruiker, d.w.z. Postgres, binnen de Postgres gebruikersaccount) en met de juiste rechten.

In het volgende commando de optie:

  • -h – specificeert de host die de masterserver is.
  • -D – specificeert de gegevensmap.
  • -U – specificeert de verbindingsgebruiker.
  • -P – maakt voortgangsrapportage mogelijk.
  • -v – schakelt de uitgebreide modus in.
  • -R – maakt het maken van een herstelconfiguratie mogelijk: maakt een standby.signal bestand en voegt verbindingsinstellingen toe aan postgresql.auto.conf onder de gegevens map.
  • -X – wordt gebruikt om de vereiste vooruitschrijflogbestanden (WAL-bestanden) op te nemen in de back-up. De waarde stream betekent dat de WAL wordt gestreamd terwijl de back-up wordt gemaakt.
  • -C – maakt het mogelijk een replicatieslot aan te maken met de naam -S voordat de back-up wordt gestart.
  • -S – specificeert de naam van het replicatieslot.
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. Wanneer het back-upproces is voltooid, zou de nieuwe gegevensmap op de standby-server er zo uit moeten zien als in de schermafbeelding. Er wordt een standby.signal aangemaakt en de verbindingsinstellingen worden toegevoegd aan postgresql.auto.conf. U kunt de inhoud ervan weergeven met behulp van de opdracht ls.

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

Een replicatie-slave zal in de modus “Hot Standby” draaien als de parameter hot_standby is ingesteld op on (de standaardwaarde) in postgresql.conf en er is een bestand standby.signal aanwezig in de datadirectory.

9. Nu u terug bent op de hoofdserver, zou u het replicatieslot met de naam pgstandby1 moeten kunnen zien wanneer u de weergave pg_replication_slots als volgt opent.

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

10. Om de verbindingsinstellingen te bekijken die zijn toegevoegd aan het bestand postgresql.auto.conf, gebruikt u de opdracht cat.

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

11. Begin nu met de normale databasebewerkingen op de standby-server door de PostgreSQL-service als volgt te starten.

systemctl start postgresql-12

Stap 3: PostgreSQL-streamingreplicatie testen

12. Zodra er succesvol een verbinding tot stand is gebracht tussen de master en de standby-server, ziet u een WAL-ontvangerproces in de standby-server met de status streaming. U kunt dit controleren met behulp van de pg_stat_wal_receiver-weergave.

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

en een corresponderend WAL afzenderproces in de master/primaire server met een status van streaming en een sync_state van async, kunt u deze pg_stat_replication pg_stat_replication-weergave controleren.

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

Uit de bovenstaande schermafbeelding blijkt dat de streamingreplicatie asynchroon is. In de volgende sectie laten we zien hoe u optioneel synchrone replicatie kunt inschakelen.

13. Test nu of de replicatie goed werkt door een testdatabase op de hoofdserver te maken en te controleren of deze op de standby-server bestaat.
[master]postgres=# DATABASE MAKEN tecmint;
[stand-by]postgres=# \l

Optioneel: Synchrone replicatie inschakelen

14. Synchrone replicatie biedt de mogelijkheid om tegelijkertijd een transactie door te voeren (of gegevens te schrijven) naar de primaire database en de stand-by/replica. Het bevestigt alleen dat een transactie succesvol is wanneer alle wijzigingen die door de transactie zijn aangebracht, zijn overgebracht naar een of meer synchrone standby-servers.

Om synchrone replicatie in te schakelen, moet de synchronous_commit ook zijn ingesteld op on (wat de standaardwaarde is, dus er is geen wijziging nodig) en moet u ook de parameter synchronous_standby_names instellen naar een niet-lege waarde. Voor deze handleiding stellen we alles in.

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

15. Laad vervolgens de PostgreSQL 12-service opnieuw om de nieuwe wijzigingen toe te passen.

systemctl reload postgresql-12.service

16. Als u nu nogmaals het WAL afzenderproces op de primaire server ondervraagt, zou het een status van streaming en een sync_state van < sterke>synchronisatie.

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

We zijn aan het einde van deze gids gekomen. We hebben laten zien hoe u PostgreSQL 12 master-standby databasestreamingreplicatie instelt in CentOS 8. We hebben ook besproken hoe u synchrone replicatie in een PostgreSQL-databasecluster kunt inschakelen.

Er zijn vele toepassingen van replicatie en u kunt altijd een oplossing kiezen die voldoet aan uw IT-omgeving en/of applicatiespecifieke vereisten. Ga voor meer informatie naar Log-Shipping Standby Servers in de PostgreSQL 12-documentatie.