{"id":45201,"date":"2022-08-23T16:31:37","date_gmt":"2022-08-23T14:31:37","guid":{"rendered":"https:\/\/kinsta.com\/nl\/?p=45201&#038;preview=true&#038;preview_id=45201"},"modified":"2023-05-22T14:22:06","modified_gmt":"2023-05-22T12:22:06","slug":"postgresql-replicatie","status":"publish","type":"post","link":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/","title":{"rendered":"PostgreSQL replicatie: een uitgebreide handleiding"},"content":{"rendered":"<p>Zoals elke site-eigenaar je waarschijnlijk zal vertellen, kunnen gegevensverlies en downtime catastrofaal zijn &#8211; zelfs in minimale doses. Ze kunnen zonder aankondiging ieder moment toeslaan, met verminderde productiviteit, toegankelijkheid en vertrouwen in je product of dienst als gevolg.<\/p>\n<p>Om de integriteit van je site te beschermen, is het van vitaal belang beveiligingen in te bouwen tegen de mogelijkheid van downtime of gegevensverlies.<\/p>\n<p>Dat is waar gegevensreplicatie om de hoek komt kijken.<\/p>\n\n<p>Gegevensreplicatie is een geautomatiseerd back-upproces waarbij je gegevens herhaaldelijk vanuit de hoofddatabank naar een andere, afgelegen plaats worden gekopieerd om veilig bewaard te worden. Het is een integrale technologie voor elke site of app met een <a href=\"https:\/\/kinsta.com\/nl\/blog\/wordpress-database\/\">databaseserver<\/a>. Je kunt de gerepliceerde database ook gebruiken om read-only SQL te verwerken, waardoor meer processen in het systeem kunnen draaien.<\/p>\n<p>Het opzetten van replicatie tussen twee databases biedt fouttolerantie tegen onverwachte ongelukken. Het wordt beschouwd als de beste strategie om hoge beschikbaarheid te bereiken bij rampen.<\/p>\n<p>In dit artikel duiken we in de verschillende strategie\u00ebn die <a href=\"https:\/\/kinsta.com\/blog\/backend-developer\/\">backend ontwikkelaars<\/a> kunnen toepassen voor naadloze PostgreSQL replicatie.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Wat is PostgreSQL replicatie?<\/h2>\n<figure id=\"attachment_128034\" aria-describedby=\"caption-attachment-128034\" style=\"width: 945px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128034 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/PostgreSQL-Replication-Illustration.png\" alt=\"Illustratie PostgreSQL replicatie\" width=\"945\" height=\"310\"><figcaption id=\"caption-attachment-128034\" class=\"wp-caption-text\">Illustratie PostgreSQL replicatie (bron afbeelding: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<p>PostgreSQL replicatie kan je defini\u00ebren als het proces van het kopi\u00ebren van gegevens van een <a href=\"https:\/\/kinsta.com\/nl\/blog\/wat-is-postgresql\/\">PostgreSQL databaseserver<\/a> naar een andere server. De bron-databaseserver wordt ook wel de &#8220;primaire&#8221; server genoemd, terwijl de databaseserver die de gekopieerde gegevens ontvangt bekend staat als de &#8220;replica&#8221; server.<\/p>\n<p>De PostgreSQL database volgt een rechtlijnig replicatiemodel, waarbij alle writes naar een primaire node gaan. De primaire node kan deze veranderingen dan toepassen en naar de secundaire nodes versturen.<\/p>\n<h3>Wat is een automatische failover?<\/h3>\n<p>Failover is een methode om <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial\">gegevens te herstellen als de primaire server<\/a> het om welke reden dan ook begeeft. Zolang je PostreSQL hebt geconfigureerd om je fysieke streaming replicatie te beheren, zullen jij &#8211; en je gebruikers &#8211; beschermd zijn tegen downtime als gevolg van een primaire server snafu.<\/p>\n<p>Merk op dat het opzetten en opstarten van het failoverproces enige tijd in beslag kan nemen. Er zijn geen ingebouwde hulpmiddelen om serverfouten in PostgreSQL te monitoren en te scopen, dus je zult creatief moeten zijn.<\/p>\n<p>Gelukkig hoeft je niet afhankelijk te zijn van PostgreSQL voor failover. Er zijn speciale tool die automatische failover en automatisch overschakelen naar de stand-by mogelijk maken, waardoor de <a href=\"https:\/\/kinsta.com\/nl\/blog\/wordpress-database-problemen-oplossen\/\">downtime van de database<\/a> korter wordt.<\/p>\n<p>Door failover replicatie in te stellen, garandeer je bijna hoge beschikbaarheid door ervoor te zorgen dat stand-by&#8217;s beschikbaar zijn als de primaire server ooit instort.<\/p>\n<h2>Voordelen van het gebruik van PostgreSQL replicatie<\/h2>\n<p>Hier zijn een paar belangrijke voordelen van het gebruik van PostgreSQL replicatie:<\/p>\n<ul>\n<li><strong>Gegevensmigratie:<\/strong> Je kunt PostgreSQL replicatie gebruiken voor gegevensmigratie, hetzij door een verandering van databaseserver hardware, hetzij door systeeminzet.<\/li>\n<li><strong>Fouttolerantie:<\/strong> Als de primaire server uitvalt, kan de stand-by server als server fungeren omdat de bevatte gegevens voor zowel primaire als stand-by servers dezelfde zijn.<\/li>\n<li><strong>Prestaties voor online transactieverwerking (OLTP):<\/strong> Je kunt de transactieverwerkingstijd en de querytijd van een OLTP systeem verbeteren door rapportage van querybelasting weg te nemen. Transactieverwerkingstijd is de duur die het kost om een bepaalde query uit te voeren voordat een transactie klaar is.<\/li>\n<li><strong>Paralleltesten van systemen:<\/strong> Bij het upgraden van een nieuw systeem moet je er zeker van zijn dat het systeem goed overweg kan met bestaande gegevens, vandaar de noodzaak om v\u00f3\u00f3r de invoering te testen met een productie database kopie.<\/li>\n<\/ul>\n<h2>Hoe PostgreSQL replicatie werkt<\/h2>\n<p>Over het algemeen geloven mensen dat wanneer je met een primaire en secundaire architectuur rommelt, er maar \u00e9\u00e9n manier is <a href=\"https:\/\/kinsta.com\/nl\/blog\/back-up-wordpress-website\/\">om backups en replicatie op te zetten<\/a>. PostgreSQL deployments kunnen echter <a href=\"https:\/\/www.citusdata.com\/blog\/2018\/02\/21\/three-approaches-to-postgresql-replication\/\">elk van deze drie methoden volgen<\/a>:<\/p>\n<ol>\n<li><strong>Streaming replicatie:<\/strong> repliceert gegevens van de primaire node naar het secundaire, kopieert vervolgens gegevens naar Amazon S3 of Azure Blob voor backupopslag.<\/li>\n<li><strong>Volume-level replicatie:<\/strong> Repliceert gegevens op de opslaglaag, vanaf de primaire node naar de secundaire node, kopieert vervolgens gegevens naar Amazon S3 of Azure Blob voor backupopslag.<\/li>\n<li><strong>Incrementele backups:<\/strong> repliceert gegevens van de primaire node terwijl een nieuwe secundaire node wordt gebouwd vanuit Amazon S3 of Azure Blob opslag, waardoor streaming rechtstreeks vanaf de primaire node mogelijk wordt.<\/li>\n<\/ol>\n<h3>Methode 1: streaming<\/h3>\n<p>PostgreSQL streaming replicatie, ook bekend als WAL replicatie, kan naadloos opgezet worden nadat PostgreSQL op alle servers ge\u00efnstalleerd is. Deze aanpak van replicatie is gebaseerd op het verplaatsen van de WAL bestanden van de primaire naar de doeldatabase.<\/p>\n<p>Je kunt PostgreSQL streaming replicatie implementeren door een primair-secundaire configuratie te gebruiken. De primaire server is de hoofdinstantie die de primaire database en al zijn bewerkingen afhandelt. De secundaire server fungeert als aanvullende instantie en voert alle veranderingen aan de primaire database op zichzelf uit, waarbij hij een identieke kopie genereert. De primaire is de lees\/schrijf-server terwijl de secundaire server alleen-lezen is.<\/p>\n<p>Voor deze methode moet je zowel de primaire node als de standby node configureren. De volgende secties zullen de stappen verduidelijken die nodig zijn om ze gemakkelijk in te stellen.<\/p>\n<h4>Het instellen van de primaire node<\/h4>\n<p>Je kunt de primaire node instellen voor streaming replicatie door de volgende stappen uit te voeren:<\/p>\n<h5>Stap 1: Initialiseer de database<\/h5>\n<p>Om de <a href=\"https:\/\/hevodata.com\/learn\/postgresql-streaming-replication\/#master1\">database te initialiseren<\/a>, kun je gebruik maken van het <code>initdb<\/code> utility commando. Vervolgens kun je een nieuwe gebruiker met replicatiebevoegdheden maken met behulp van de volgende opdracht:<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'example_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'example_password';<\/code><\/pre>\n<p>De gebruiker zal een wachtwoord en een gebruikersnaam moeten opgeven voor de gegeven query. Het replicatie keyword wordt gebruikt om de gebruiker de vereiste rechten te geven. Een voorbeeld query zou er ongeveer zo uitzien:<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'rep_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'rep_password';<\/code><\/pre>\n<h5>Stap 2: Streaming eigenschappen configureren<\/h5>\n<p>Vervolgens kun je de streaming eigenschappen configureren met het PostgreSQL configuratiebestand (<strong>postgresql.conf<\/strong>) dat als volgt gewijzigd kan worden:<\/p>\n<pre><code class=\"bash\">wal_level = logical\nwal_log_hints = on\nmax_wal_senders = 8\nmax_wal_size = 1GB\nhot_standby = on<\/code><\/pre>\n<p>Hier volgt wat achtergrondinformatie\u00a0 rond de parameters die in de vorige snippet gebruikt werden:<\/p>\n<ul>\n<li><strong><code>wal_log_hints<\/code>:<\/strong> Deze parameter is nodig voor de <code>pg_rewind<\/code> capability die van pas komt als de stand-by server niet meer synchroon loopt met de primaire server.<\/li>\n<li><strong><code>wal_level<\/code>:<\/strong> Je kunt deze parameter gebruiken om PostgreSQL streaming replicatie in te schakelen, met mogelijke waarden als <code>minimal<\/code>, <code>replica<\/code>, of <code>logical<\/code>.<\/li>\n<li><strong><code>max_wal_size<\/code>:<\/strong> Hiermee kun je de grootte opgeven van de WAL bestanden die in logbestanden kunnen worden bewaard.<\/li>\n<li><strong><code>hot_standby<\/code>:<\/strong> Je kunt deze parameter gebruiken voor een read-on verbinding met de secundaire als hij op ON is gezet.<\/li>\n<li><strong><code>max_wal_senders<\/code>:<\/strong> Je kunt <code>max_wal_senders<\/code> gebruiken om het maximum aantal gelijktijdige verbindingen op te geven dat met de stand-by servers tot stand kan worden gebracht.<\/li>\n<\/ul>\n<h5>Stap 3: Maak een nieuwe entry<\/h5>\n<p>Nadat je de parameters in het <strong>postgresql.conf<\/strong> bestand gewijzigd hebt, kun je met een nieuwe replicatie entry in het <strong>pg_hba.conf<\/strong> bestand de servers in staat stellen een verbinding met elkaar op te zetten voor replicatie.<\/p>\n<p>Je vindt dit bestand meestal in de data map van PostgreSQL. Je kunt hiervoor het volgende codefragment gebruiken:<\/p>\n<pre><code class=\"language-bash\">host replication rep_user IPaddress md5<\/code><\/pre>\n<p>Zodra het codefragment wordt uitgevoerd, staat de primaire server een gebruiker genaamd <code>rep_user<\/code> toe verbinding te maken en als de stand-by server te fungeren door het opgegeven IP te gebruiken voor replicatie. Bijvoorbeeld:<\/p>\n<pre><code class=\"language-bash\">host replication rep_user 192.168.0.22\/32 md5<\/code><\/pre>\n<h4>Stand-by node instellen<\/h4>\n<p>Om de stand-by node in te stellen voor streaming replicatie, volg je deze stappen:<\/p>\n<h5>Stap 1: Maak een backup van de primaire node<\/h5>\n<p>Om de standby node in te stellen, maak je gebruik van de <code>pg_basebackup<\/code> tool om een backup van de primaire node te genereren. Deze zal dienen als startpunt voor de stand-by node. Je kunt dit hulpprogramma gebruiken met de volgende syntaxis:<\/p>\n<pre><code class=\"language-bash\">pg_basebackp -D  -h  -X stream -c fast -U rep_user -W<\/code><\/pre>\n<p>De parameters die in de bovenstaande syntaxis gebruikt worden zijn als volgt:<\/p>\n<ul>\n<li><strong><code>-h<\/code>:<\/strong> Je kunt dit gebruiken om de primaire host te vermelden.<\/li>\n<li><strong><code>-D<\/code>:<\/strong> Deze parameter geeft de directory aan waarin je momenteel werkt.<\/li>\n<li><strong><code>-C<\/code>:<\/strong> Je kunt dit gebruiken om de checkpoints in te stellen.<\/li>\n<li><strong><code>-X<\/code>:<\/strong> Deze parameter kun je gebruiken om de nodige transactielogbestanden op te nemen.<\/li>\n<li><strong><code>-W<\/code>:<\/strong> Je kunt deze parameter gebruiken om de gebruiker om een wachtwoord te vragen voordat hij verbinding maakt met de database.<\/li>\n<\/ul>\n<h5>Stap 2: Replicatie configuratiebestand instellen<\/h5>\n<p>Vervolgens moet je controleren of het replicatie configuratiebestand bestaat. Als dat niet zo is, kun je het replicatie configuratiebestand genereren als <strong>recovery.conf<\/strong>.<\/p>\n<p>Je moet dit bestand aanmaken in de gegevensmap van de PostgreSQL installatie. Je kunt het automatisch genereren door de <code>-R<\/code> optie te gebruiken binnen de tool <code>pg_basebackup<\/code>.<\/p>\n<p>Het <strong>recovery.conf<\/strong> bestand moet de volgende commando&#8217;s bevatten:<\/p>\n<pre><code class=\"bash\">standby_mode = 'on'\n\n<\/code><code class=\"bash\">primary_conninfo = 'host=&lt;master_host&gt; port=&lt;postgres_port&gt; user=&lt;replication_user&gt; password=&lt;password&gt; application_name=\"host_name\"'\n\n<\/code><code class=\"bash\">recovery_target_timeline = 'latest'<\/code><\/pre>\n<p>De parameters die in de bovengenoemde commando&#8217;s gebruikt worden zijn als volgt:<\/p>\n<ul>\n<li><strong><code>primary_conninfo<\/code>:<\/strong> Je kunt dit gebruiken om een verbinding te maken tussen de primaire en secundaire servers door gebruik te maken van een verbindingsstring.<\/li>\n<li><strong><code>standby_mode<\/code>:<\/strong> Deze parameter kan ervoor zorgen dat de primaire server als stand-by start als hij ingeschakeld wordt.<\/li>\n<li><strong><code>recovery_target_timeline<\/code>:<\/strong> Je kunt dit gebruiken om de hersteltijd in te stellen.<\/li>\n<\/ul>\n<p>Om een verbinding op te zetten moet je de gebruikersnaam, het IP adres, en het wachtwoord opgeven als waarden voor de parameter primary_conninfo. Bijvoorbeeld:<\/p>\n<pre><code class=\"language-bash\">primary_conninfo = 'host=192.168.0.26 port=5432 user=rep_user password=rep_pass'<\/code><\/pre>\n<h5>Stap 3: Herstart de secundaire server<\/h5>\n<p>Tenslotte kun je de secundaire server herstarten om het configuratieproces te voltooien.<\/p>\n<p>Streaming replicatie komt echter met verschillende uitdagingen, zoals:<\/p>\n<ul>\n<li>Verschillende PostgreSQL clients (geschreven in verschillende programmeertalen) converseren met een enkel eindpunt. Als de primaire node uitvalt, blijven deze clients dezelfde DNS of IP naam opnieuw proberen. Dit maakt failover zichtbaar voor de toepassing.<\/li>\n<li>PostgreSQL replicatie wordt niet geleverd met ingebouwde failover en monitoring. Als de primaire node faalt, moet je een secundaire promoveren tot de nieuwe primaire. Deze promotie moet zo worden uitgevoerd dat cli\u00ebnten naar slechts \u00e9\u00e9n primaire node schrijven, en ze geen inconsistenties in de gegevens waarnemen.<\/li>\n<li>PostgreSQL repliceert zijn hele toestand. Als je een nieuwe secundaire node moet ontwikkelen, moet de secundaire de hele geschiedenis van toestandsverandering van de primaire node herhalen, wat veel middelen kost en het kostbaar maakt om nodes in de kop te elimineren en nieuwe te maken.<\/li>\n<\/ul>\n<h3>Methode 2: Replicated block device<\/h3>\n<p>De replicated block device benadering maakt gebruik van disk mirroring (ook bekend als volumereplicatie). Bij deze aanpak worden veranderingen naar een persistent volume geschreven dat synchroon naar een ander volume gespiegeld wordt.<\/p>\n<p>Het extra voordeel van deze aanpak is de compatibiliteit en de duurzaamheid van de gegevens in cloudomgevingen met alle relationele databases, waaronder PostgreSQL, MySQL, en <a href=\"https:\/\/kinsta.com\/nl\/blog\/postgresql-vs-sql-server\/\">SQL Server<\/a>, om er een paar te noemen.<\/p>\n<p>De disk-mirroring aanpak van PostgreSQL replicatie vereist echter dat je zowel WAL log- als tabelgegevens repliceert. Omdat elk schrijven naar de database nu synchroon over het netwerk moet gaan, kun je je niet veroorloven ook maar een enkele byte te verliezen, want dat zou je database in een corrupte toestand kunnen achterlaten.<\/p>\n<p>Deze aanpak wordt gewoonlijk toegepast met Azure PostgreSQL en Amazon RDS.<\/p>\n<h3>Methode 3: WAL<\/h3>\n<p>WAL bestaat uit segmentbestanden (standaard 16 MB). Elk segment heeft een of meer records. Een log sequence record (LSN) is een pointer naar een record in WAL, die je de positie\/plaats laat weten waar het record in het logbestand is opgeslagen.<\/p>\n<p>Een stand-by server maakt gebruik van WAL segmenten &#8211; in PostgreSQL terminologie ook wel XLOGS genoemd &#8211; om voortdurend veranderingen van zijn primaire server te repliceren. Je kunt write-ahead logging gebruiken om duurzaamheid en atomiciteit in een DBMS te verlenen door blokken van byte-array gegevens (elk met een unieke LSN) te serialiseren naar stabiele opslag voordat ze in een database worden toegepast.<\/p>\n<p>Het toepassen van een mutatie op een database kan leiden tot verschillende bewerkingen aan het bestandssysteem. Een vraag die opkomt is hoe een database atomiciteit kan garanderen bij een serverstoring door een stroomstoring terwijl hij midden in een bestandssysteemupdate zat. Als een database opstart, begint hij een startup- of replayproces dat de beschikbare WAL segmenten kan lezen en ze vergelijkt met de LSN die op elke gegevenspagina zijn opgeslagen (elke gegevenspagina is gemarkeerd met de LSN van het laatste WAL record dat op de pagina betrekking heeft).<\/p>\n<h4>Log shipping-gebaseerde replicatie (blokniveau)<\/h4>\n<p>Streaming replicatie verfijnt het log shipping proces. In plaats van te wachten op de WAL switch, worden de records verzonden terwijl ze worden aangemaakt, waardoor de replicatie vertraging afneemt.<\/p>\n<p>Streaming replicatie overtroeft ook log shipping omdat de standby server over het netwerk met de primaire server in verbinding staat door gebruik te maken van een replicatieprotocol. De primaire server kan dan WAL records direct over deze verbinding versturen zonder afhankelijk te zijn van door de eindgebruiker verstrekte scripts.<\/p>\n<h4>Log shipping-gebaseerde replicatie (bestandsniveau)<\/h4>\n<p>Log shipping wordt gedefinieerd als het kopi\u00ebren van logbestanden naar een andere PostgreSQL server om een andere stand-by server te genereren door WAL bestanden opnieuw af te spelen. Deze server is geconfigureerd om in herstelmodus te werken, en zijn enige doel is om eventuele nieuwe WAL bestanden toe te passen als ze opduiken.<\/p>\n<p>Deze secundaire server wordt dan een warme backup van de primaire PostgreSQL server. Hij kan ook ingesteld worden als leesreplica, waarbij hij alleen-lezen queries kan aanbieden, ook wel hot stand-by genoemd.<\/p>\n<h4>Continu WAL archivering<\/h4>\n<p>Het kopi\u00ebren van WAL bestanden terwijl ze gemaakt worden naar een andere plaats dan de <code>pg_wal<\/code> subdirectory om ze te archiveren wordt WAL archivering genoemd. PostgreSQL zal een door de gebruiker gegeven script aanroepen om te archiveren, telkens als een WAL bestand wordt aangemaakt.<\/p>\n<p>Het script kan gebruik maken van het <code>scp<\/code> commando om het bestand te dupliceren naar een of meer plaatsen, zoals een NFS mount. Eenmaal gearchiveerd kunnen de WAL segmentbestanden gebruikt worden om de database op elk willekeurig moment te herstellen.<\/p>\n<p>Andere log-gebaseerde configuraties zijn onder andere:<\/p>\n<ul>\n<li><strong>Synchrone replicatie:<\/strong> Voordat elke synchrone replicatietransactie vastgelegd wordt, wacht de primaire server tot stand-by&#8217;s bevestigen dat ze de gegevens gekregen hebben. Het voordeel van deze configuratie is dat er geen conflicten ontstaan door parallelle schrijfprocessen.<\/li>\n<li><strong>Synchrone replicatie met meerdere masters:<\/strong> Hier kan elke server schrijfverzoeken aannemen, en gewijzigde gegevens worden van de oorspronkelijke server naar elke andere server doorgestuurd voordat elke transactie vastgelegd wordt. Het maakt gebruik van het 2PC protocol en houdt zich aan de alles-of-niets regel.<\/li>\n<\/ul>\n<h4>Gegevens van het WAL streaming protocol<\/h4>\n<p>Een proces bekend als WAL receiver, dat op de stand-by server draait, maakt gebruik van de verbindingsgegevens die in de <code>primary_conninfo<\/code> parameter van <strong>recovery.conf<\/strong> staan en verbindt zich met de primaire server door gebruik te maken van een TCP\/IP verbinding.<\/p>\n<p>Om streaming replicatie te starten kan het frontend binnen het opstartbericht de replicatie parameter zenden. Een Booleaanse waarde van true, yes, 1, of ON laat de <a href=\"https:\/\/kinsta.com\/blog\/backend-developer-salary\/\">backend<\/a> weten dat hij in fysieke replicatie WAL sender mode moet gaan.<\/p>\n<p>WAL sender is weer een ander proces dat op de primaire server draait en belast is met het verzenden van de WAL records naar de stand-by server als ze gegenereerd worden. De WAL ontvanger bewaart de WAL records in WAL alsof ze door clientactiviteit van lokaal verbonden clients zijn aangemaakt.<\/p>\n<p>Zodra de WAL records de WAL segmentbestanden bereiken, blijft de stand-by server voortdurend de WAL herhalen, zodat primaire en stand-by synchroon lopen.<\/p>\n<figure id=\"attachment_128035\" aria-describedby=\"caption-attachment-128035\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128035 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/WAL-Streaming-Protocol-Details.png\" alt=\"WAL Streaming Protocol Flow Diagram\" width=\"1024\" height=\"1020\"><figcaption id=\"caption-attachment-128035\" class=\"wp-caption-text\">WAL Streaming Protocol Flow Diagram (bron afbeelding: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<h2>Elementen van PostgreSQL replicatie<\/h2>\n<p>In dit onderdeel krijg je een dieper inzicht in de veelgebruikte modellen (single-master en multi-master replicatie), typen (fysieke en logische replicatie), en modi (synchroon en asynchroon) van PostgreSQL replicatie.<\/p>\n<h3>Modellen van PostgreSQL databasereplicatie<\/h3>\n<p>Schaalbaarheid betekent het toevoegen van meer resources\/hardware aan bestaande nodes om de mogelijkheden van de database te vergroten om meer gegevens op te slaan en te verwerken, wat horizontaal en verticaal kan worden bereikt. PostgreSQL replicatie is een voorbeeld van horizontale schaalbaarheid die veel moeilijker te realiseren is dan verticale schaalbaarheid. We kunnen horizontale schaalbaarheid vooral bereiken door single-master replicatie (SMR) en multi-master replicatie (MMR).<\/p>\n<p>Met single-master replicatie kunnen gegevens alleen op een enkele node gewijzigd worden, en deze wijzigingen worden naar een of meer nodes gerepliceerd. De gerepliceerde tabellen in de replica database mogen geen wijzigingen aannemen, behalve die van de primaire server. Zelfs als ze dat wel doen, worden de wijzigingen niet naar de primaire server gerepliceerd.<\/p>\n<p>Meestal is SMR voldoende voor de toepassing omdat het minder ingewikkeld is om in te stellen en te beheren, met geen kans op conflicten. Single-master replicatie is ook unidirectioneel, omdat de replicatiegegevens hoofdzakelijk in \u00e9\u00e9n richting stromen, van de primaire naar de replica database.<\/p>\n<p>In sommige gevallen kan SMR alleen niet voldoende zijn, en moet je MMR implementeren. MMR staat toe dat meer dan \u00e9\u00e9n node als primaire node fungeert. Veranderingen aan tabelrijen in meer dan \u00e9\u00e9n aangewezen primair gegevensbestand worden gerepliceerd naar hun pendant tabellen in elk ander primair gegevensbestand. In dit model worden vaak conflictresolutieschema&#8217;s gebruikt om problemen als dubbele primaire sleutels te vermijden.<\/p>\n<p>Er zijn een paar voordelen aan het gebruik van MMR, namelijk:<\/p>\n<ul>\n<li>Bij uitval van een host kunnen andere hosts nog steeds update en insertion diensten verlenen.<\/li>\n<li>De primaire nodes zijn verspreid over verschillende plaatsen, zodat de kans op uitval van alle primaire nodeserg klein is.<\/li>\n<li>Mogelijkheid om een wide area netwerk (WAN) van primaire databases in te zetten, die geografisch dicht bij groepen clients kunnen liggen, en toch over het hele netwerk de consistentie van de gegevens bewaren.<\/li>\n<\/ul>\n<p>Het nadeel van het toepassen van MMR is echter de complexiteit en de moeilijkheid om conflicten op te lossen.<\/p>\n<p>Verschillende takken en toepassingen bieden MMR oplossingen aan omdat PostgreSQL die niet van nature ondersteunt. Deze oplossingen kunnen <a href=\"https:\/\/kinsta.com\/nl\/blog\/open-source-database\/\">open-source<\/a>, gratis, of betaald zijn. E\u00e9n zo&#8217;n <a href=\"https:\/\/kinsta.com\/nl\/blog\/wordpress-databaseplugins\/\">uitbreiding<\/a> is bidirectionele replicatie (BDR) die asynchroon is en gebaseerd is op de PostgreSQL logische decoderingsfunctie.<\/p>\n<p>Omdat de BDR toepassing transacties op andere nodes herhaalt, kan de herhaaloperatie mislukken als er een conflict is tussen de transactie die wordt toegepast en de transactie die op de ontvangende node is vastgelegd.<\/p>\n<h3>Soorten PostgreSQL replicatie<\/h3>\n<p>Er zijn twee soorten PostgreSQL replicatie: logische en fysieke replicatie.<\/p>\n<p>Een eenvoudige <em>logische<\/em> bewerking <code>initdb<\/code> zou de fysische bewerking uitvoeren van het aanmaken van een basismap voor een cluster. Evenzo zou een eenvoudige <em>logische<\/em> bewerking <code>CREATE DATABASE<\/code>\u00a0de <em>fysieke<\/em> bewerking uitvoeren van het maken van een submap in de basismap.<\/p>\n<p>Fysieke replicatie heeft meestal te maken met bestanden en mappen. Het weet niet wat deze bestanden en mappen voorstellen. Deze methoden worden gebruikt om een volledige kopie van de hele gegevens van een enkele cluster bij te houden, meestal op een andere machine, en gebeuren op het niveau van het bestandssysteem of de schijf en gebruiken exacte blokadressen.<\/p>\n<p>Logische replicatie is een manier om gegevensentiteiten en hun wijzigingen te reproduceren, op basis van hun replicatie-identiteit (meestal een primaire sleutel). In tegenstelling tot fysieke replicatie heeft het te maken met databanken, tabellen, en DML operaties en gebeurt het op het niveau van de databasecluster. Het gebruikt een <em>publish<\/em> en <em>subscribe<\/em> model waarbij een of meer <em>subscribers<\/em> geabonneerd zijn op een of meer <i>publications <\/i>op een <em>publisher<\/em> node.<\/p>\n<p>Het replicatieproces begint met het maken van een momentopname van de gegevens op de publisher database en kopieert die dan naar de subscriber. Subscribers halen gegevens uit de publications waarop ze &#8220;geabonneerd&#8221; zijn en kunnen gegevens later opnieuw publiceren om cascade replication of complexere configuraties mogelijk te maken. De subscriber past de gegevens toe in dezelfde volgorde als de publisher, zodat transactionele consistentie gegarandeerd is voor publications binnen een enkel &#8220;abonnement&#8221;, ook bekend als transactionele replicatie.<\/p>\n<p>De typische gebruikssituaties voor logische replicatie zijn:<\/p>\n<ul>\n<li>Stapsgewijze veranderingen in een enkele database (of een deelverzameling van een database) naar de abonnees zenden wanneer ze zich voordoen.<\/li>\n<li>Het delen van een subset van de database tussen meerdere databases.<\/li>\n<li>Het afvuren van afzonderlijke veranderingen triggeren als ze bij de subscriber aankomen.<\/li>\n<li>Consolideren van meerdere databses tot \u00e9\u00e9n.<\/li>\n<li>Toegang tot gerepliceerde gegevens verlenen aan verschillende groepen gebruikers.<\/li>\n<\/ul>\n<p>De subscriber database gedraagt zich op dezelfde manier als elke andere PostgreSQL instantie en kan gebruikt worden als publisher voor andere databases door zijn publicaties te defini\u00ebren.<\/p>\n<p>Als de subscriber door de toepassing als alleen-lezen wordt behandeld, zullen er geen conflicten zijn van een enkele subcriber. Anderzijds kunnen er conflicten ontstaan als er door een toepassing of door andere subcribers andere schrijfbewerkingen op dezelfde set tabellen worden uitgevoerd.<\/p>\n<p>PostgreSQL ondersteunt beide mechanismen gelijktijdig. Logische replicatie maakt uitgebreide controle mogelijk over zowel gegevensreplicatie als beveiliging.<\/p>\n<h3>Replicatietypen<\/h3>\n<p>Er zijn hoofdzakelijk twee replicatiewijzen in PostgreSQL: synchroon en asynchroon. Synchrone replicatie staat toe dat gegevens tegelijk naar de primaire en de secundaire server worden geschreven, terwijl asynchrone replicatie ervoor zorgt dat de gegevens eerst naar de host worden geschreven en dan naar de secundaire server worden gekopieerd.<\/p>\n<p>Bij replicatie in synchrone modus worden transacties op de primaire database pas als voltooid beschouwd als die veranderingen naar alle replica&#8217;s zijn gerepliceerd. De replicaservers moeten allemaal de hele tijd beschikbaar zijn om de transacties op de primaire te kunnen voltooien. De synchrone replicatiemodus wordt gebruikt in hoogwaardige transactie-omgevingen met onmiddellijke failover eisen.<\/p>\n<p>In de asynchrone modus kunnen transacties op de primaire server voltooid worden verklaard als de veranderingen alleen op de primaire server zijn gedaan. Deze veranderingen worden dan later in de tijd gerepliceerd in de replica&#8217;s. De replicaservers kunnen gedurende een bepaalde tijd uit-synchroon blijven, een replicatie-vertraging genoemd. In het geval van een crash kan gegevensverlies optreden, maar de overhead die asynchrone replicatie oplevert is gering, dus in de meeste gevallen aanvaardbaar (de host wordt er niet door overbelast). Fail-over van de primaire database naar de secundaire database duurt langer dan bij synchrone replicatie.<\/p>\n<h2>Hoe PostgreSQL replicatie op te zetten<\/h2>\n<p>In dit onderdeel laten we zien hoe je het PostgreSQL replicatieproces opzet op een Linux besturingssysteem. In dit geval gebruiken we Ubuntu 18.04 LTS en PostgreSQL 10.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Zorg ervoor dat je de Linux Ubuntu server ge\u00efnstalleerd hebt. De stappen om PostgreSQL op een Linux server te installeren staan hieronder, gevolgd door het instellen van replicatie in de primaire en de secundaire server.<\/p>\n<\/aside>\n\n<p>Laten we er eens naar kijken!<\/p>\n<h3>Installatie<\/h3>\n<p>Je begint met de installatie van PostgreSQL op Linux met deze stappen:<\/p>\n<ol>\n<li>Eerst moet je de PostgreSQL sign key importeren door het onderstaande commando in de terminal te typen:\n<pre><code class=\"language-bash\">wget -q https:\/\/www.postgresql.org\/media\/keys\/ACCC4CF8.asc -O- | sudo apt-key add -<\/code><\/pre>\n<\/li>\n<li>Voeg nu de PostgreSQL repository toe door het onderstaande commando in de terminal te typen:\n<pre><code class=\"language-bash\">echo \"deb http:\/\/apt.postgresql.org\/pub\/repos\/apt\/ bionic-pgdg main\" | sudo tee \/etc\/apt\/sources.list.d\/postgresql.list <\/code><\/pre>\n<\/li>\n<li>Werk de Repository Index bij door het volgende commando in de terminal te typen:\n<pre><code class=\"language-bash\">sudo apt-get update <\/code><\/pre>\n<\/li>\n<li>Installeer het PostgreSQL pakket met het apt commando:\n<pre><code class=\"language-bash\">sudo apt-get install -y postgresql-10<\/code><\/pre>\n<\/li>\n<li>Stel tenslotte het wachtwoord voor de PostgreSQL gebruiker in met het volgende commando:\n<pre><code class=\"language-bash\">sudo passwd postgres<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>De installatie van PostgreSQL is verplicht voor zowel de primaire als de secundaire servers voordat het PostgreSQL replicatieproces wordt gestart.<\/p>\n<p>Zodra je PostgreSQL op beide servers hebt ingesteld, kun je verder gaan met de replicatiesetup van de primaire en de secundaire server.<\/p>\n<h3>Replicatie instellen in de primaire server<\/h3>\n<p>Voer deze stappen uit als je PostgreSQL op zowel de primaire als de secundaire server ge\u00efnstalleerd hebt.<\/p>\n<ol>\n<li>Log eerst in op de PostgreSQL database met het volgende commando:\n<pre><code class=\"language-bash\">su - postgres<\/code><\/pre>\n<\/li>\n<li>Maak een replicatiegebruiker aan met het volgende commando:\n<pre><code class=\"language-bash\">psql -c \"CREATEUSER replication REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD'JOUW_WACHTWOORD';\"<\/code><\/pre>\n<\/li>\n<li>Bewerk <strong>pg_hba.cnf<\/strong> met een willekeurig nano programma in Ubuntu en voeg de volgende configuratie toe:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/pg_hba.conf<\/code><\/pre>\n<p>Om het bestand in te stellen, gebruik je het volgende commando:<\/p>\n<pre><code class=\"language-bash\">host replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>Open en bewerk <strong>postgresql.conf<\/strong> en zet de volgende configuratie in de primaire server:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf<\/code><\/pre>\n<p>Gebruik de volgende configuratie-instellingen:<strong><br \/>\n<\/strong><\/p>\n<pre><code class=\"language-bash\">listen_addresses = 'localhost,MasterIP'\n<\/code><code class=\"language-bash\">wal_level = replica\n<\/code><code class=\"language-bash\">wal_keep_segments = 64\n<\/code><code class=\"language-bash\">max_wal_senders = 10<\/code><\/pre>\n<\/li>\n<li>Herstart tenslotte PostgreSQL in de primaire hoofdserver:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl restart postgresql<\/code><\/pre>\n<p>Je hebt nu de setup in de primaire server voltooid.<\/p>\n<h3>Replicatie instellen in de secundaire server<\/h3>\n<p>Volg deze stappen om replicatie in de secundaire server in te stellen:<\/p>\n<ol>\n<li>Log in op PostgreSQL RDMS met het onderstaande commando:\n<pre><code class=\"language-bash\">su - postgres<\/code><\/pre>\n<\/li>\n<li>Stop de PostgreSQL dienst om ons in staat te stellen eraan te werken met het onderstaande commando:\n<pre><code class=\"language-bash\">systemctl stop postgresql<\/code><\/pre>\n<\/li>\n<li>Bewerk het bestand <strong>pg_hba.conf<\/strong> met dit commando en voeg de volgende configuratie toe:<strong><br \/>\n<\/strong><\/p>\n<pre><code class=\"language-bash\"><\/code><code class=\"language-bash\">\/\/ <span class=\"token string\">\"Edit\"<\/span> <span class=\"token builtin class-name\">command\n<\/span><\/code><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/pg_hba.conf\n<\/code><code class=\"language-bash\">\/\/ <span class=\"token string\">\"Configuration\"<\/span> <span class=\"token builtin class-name\">command<\/span>\n<\/code><code class=\"language-bash\"><\/code><code class=\"language-bash\">host replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>Open en bewerk <strong>postgresql.conf<\/strong> in de secundaire server en zet de volgende configuratie of maak het commentaar ongedaan als het commentaar is:<strong><br \/>\n<\/strong><\/p>\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf\n<\/code><code class=\"language-bash\">listen_addresses = 'localhost,SecondaryIP' \n<\/code><code class=\"language-bash\">wal_keep_segments = 64\n<\/code><code class=\"language-bash\">wal_level = replica\n<\/code><code class=\"language-bash\">hot_standby = on\n<\/code><code class=\"language-bash\">max_wal_senders = 10\n<\/code><\/pre>\n<p><code>SecondaryIP<\/code> is het adres van de secundaire server<\/li>\n<li>Open de PostgreSQL gegevensmap in de secundaire server en verwijder alles:\n<pre><code class=\"language-bash\">cd \/var\/lib\/postgresql\/10\/main\n<\/code><code class=\"language-bash\">rm -rfv *<\/code><\/pre>\n<\/li>\n<li>Kopieer de PostgreSQL directory bestanden van de primaire server naar de PostgreSQL directorymap van de secundaire server en schrijf dit commando in de secundaire server:\n<pre><code class=\"language-bash\">pg_basebackup -h MasterIP -D \/var\/lib\/postgresql\/11\/main\/ -P -U\n<\/code><code class=\"language-bash\">replication --wal-method=fetch<\/code><\/pre>\n<\/li>\n<li>Voer het PostgreSQL wachtwoord van de primaire server in en druk op enter. Voeg vervolgens het volgende commando toe voor de herstelconfiguratie:\n<pre><code class=\"language-bash\">\/\/ \"Edit\" Command\nnano \/var\/lib\/postgresql\/10\/main\/recovery.conf\n\/\/ Configuration\n<\/code><code class=\"language-bash\">standby_mode   = 'on'\nprimary_conninfo = 'host=MasterIP port=5432 user=replication password=JOUW_WACHTWOORD'\ntrigger_file = '\/tmp\/MasterNow'\n<\/code><\/pre>\n<p>Hier is <code>YOUR_PASSWORD<\/code> het wachtwoord voor de replicatiegebruiker in de primaire server die PostgreSQL aanmaakte<\/li>\n<li>Als het wachtwoord ingesteld is, moet je de secundaire PostgreSQL database opnieuw starten omdat die gestopt was:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl start postgresql<\/code><\/pre>\n<h3>Je opstelling testen<\/h3>\n<p>Nu we de stappen hebben uitgevoerd, laten we het replicatieproces testen en de database van de secundaire server observeren. Hiertoe maken we een tabel aan in de primaire server en kijken of die ook op de secundaire server wordt weergegeven.<\/p>\n<p>Laten we aan de slag gaan.<\/p>\n<ol>\n<li>Omdat we de tabel in de primaire server maken, moet je inloggen op de primaire server:\n<pre><code class=\"language-bash\">su - postgres\npsql<\/code><\/pre>\n<\/li>\n<li>Nu maken we een eenvoudige tabel met de naam &#8217;testtable&#8217; en voegen gegevens in de tabel in door de volgende PostgreSQL queries in de terminal uit te voeren:\n<pre><code class=\"language-bash\">CREATE TABLE testtable (websites varchar(100));\nINSERT INTO testtable VALUES ('section.com');\nINSERT INTO testtable VALUES ('google.com');\nINSERT INTO testtable VALUES ('github.com');<\/code><\/pre>\n<\/li>\n<li>Observeer de PostgreSQL database van de secundaire server door in te loggen op de secundaire server:\n<pre><code class=\"language-bash\">su - postgres psql<\/code><\/pre>\n<\/li>\n<li>Nu controleren we of de tabel &#8217;testtable&#8217; bestaat, en kunnen de gegevens teruggeven door de volgende PostgreSQL query&#8217;s in de terminal uit te voeren. Dit commando geeft in wezen de hele tabel weer.\n<pre><code class=\"language-bash\">select * from testtable;<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Dit is de uitvoer van de test tabel:<\/p>\n<pre><code class=\"language-bash\">|  websites  |\n\n-------------------\n\n| section.com |\n\n| google.com |\n\n| github.com  |\n\n--------------------<\/code><\/pre>\n<p>Je zou dezelfde gegevens moeten kunnen waarnemen als die in de primaire server.<\/p>\n<p>Als je het bovenstaande ziet, dan heb je het replicatieproces met succes uitgevoerd!<\/p>\n<h2>Wat zijn de stappen voor een PostgreSQL handmatige failover?<\/h2>\n<p>Laten we de stappen voor een PostgreSQL handmatige failover eens doornemen:<\/p>\n<ol>\n<li>Crash de primaire server.<\/li>\n<li>Promoveer de stand-by server door op de stand-by server het volgende commando uit te voeren:\n<pre><code class=\"language-bash\">.\/pg_ctl promote -D ..\/sb_data\/\nserver promoting<\/code><\/pre>\n<\/li>\n<li>Maak verbinding met de gepromoveerde stand-by server en voeg een rij in:\n<pre><code class=\"language-bash\">-bash-4.2$ .\/edb-psql -p 5432 edb\n\nPassword:\n\npsql.bin (10.7)\n\nType \"help\" <strong>for<\/strong> help.\n\nedb=# <strong>insert<\/strong> <strong>into<\/strong> abc <strong>values<\/strong>(4,'Four');\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Als de insert goed werkt, dan is de standby, voorheen een alleen-lezen server, gepromoveerd tot de nieuwe primaire server.<\/p>\n<h2>Zo automatiseer je failovers in PostgreSQL<\/h2>\n<p>Het instellen van automatische failover is eenvoudig.<\/p>\n<p>Je hebt de EDB PostgreSQL failover manager (EFM) nodig. Na het downloaden en installeren van EFM op elke primaire en stand-by node, kun je een EFM Cluster maken, die bestaat uit een primaire node, een of meer stand-by nodes, en een optionele Witness node die assertions bevestigt in geval van storing.<\/p>\n<p>EFM monitort voortdurend de systeemgezondheid en stuurt e-mail waarschuwingen op basis van systeemgebeurtenissen. Bij een storing schakelt het automatisch over op de meest actuele stand-by en herconfigureert alle andere stand-by servers om de nieuwe primaire node te herkennen.<\/p>\n<p>Het herconfigureert ook load balancers (zoals pgPool) en voorkomt dat &#8220;split-brain&#8221; (wanneer twee knooppunten elk denken dat ze primair zijn) optreedt.<\/p>\n<h2>Samenvatting<\/h2>\n<p>Door de grote hoeveelheden gegevens zijn schaalbaarheid en beveiliging twee van de belangrijkste criteria geworden bij <a href=\"https:\/\/kinsta.com\/nl\/wordpress-hosting\/dedicated\/\">databasebeheer<\/a>, vooral in een transactie-omgeving. Hoewel we de schaalbaarheid verticaal kunnen verbeteren door meer resources\/hardware aan bestaande nodes toe te voegen, is dat niet altijd mogelijk, vaak door de kosten of beperkingen van het toevoegen van nieuwe hardware.<\/p>\n<p>Vandaar dat horizontale schaalbaarheid nodig is, wat inhoudt dat meer nodes aan bestaande netwerknodes worden toegevoegd in plaats van de functionaliteit van bestaande knooppunten te verbeteren. Dit is waar PostgreSQL replicatie in beeld komt.<\/p>\n\n<p>In dit artikel hebben we de soorten PostgreSQL replicaties besproken, de voordelen, de replicatiemodes, de installatie, en PostgreSQL failover tussen SMR en MMR. Nu zijn we benieuwd naar jou.<\/p>\n<p>Welke implementeer je meestal? Welke databasefunctie is voor jou het belangrijkst en waarom? We zouden graag je antwoord willen lezen! Deel ze in de comments hieronder.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zoals elke site-eigenaar je waarschijnlijk zal vertellen, kunnen gegevensverlies en downtime catastrofaal zijn &#8211; zelfs in minimale doses. Ze kunnen zonder aankondiging ieder moment toeslaan, met &#8230;<\/p>\n","protected":false},"author":117,"featured_media":45338,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[284,526,384,689],"topic":[869],"class_list":["post-45201","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-databases","tag-development","tag-postgresql","topic-postgresql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PostgreSQL replicatie: een uitgebreide handleiding<\/title>\n<meta name=\"description\" content=\"Leer meer over de belangrijkste aspecten van PostgreSQL replicatie, inclusief voordelen, elementen, typen en strategie\u00ebn voor naadloze databackups.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL replicatie: een uitgebreide handleiding\" \/>\n<meta property=\"og:description\" content=\"Leer meer over de belangrijkste aspecten van PostgreSQL replicatie, inclusief voordelen, elementen, typen en strategie\u00ebn voor naadloze databackups.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-23T14:31:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-22T12:22:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Leer meer over de belangrijkste aspecten van PostgreSQL replicatie, inclusief voordelen, elementen, typen en strategie\u00ebn voor naadloze databackups.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"PostgreSQL replicatie: een uitgebreide handleiding\",\"datePublished\":\"2022-08-23T14:31:37+00:00\",\"dateModified\":\"2023-05-22T12:22:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/\"},\"wordCount\":4511,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png\",\"keywords\":[\"database\",\"databases\",\"development\",\"PostgreSQL\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/\",\"url\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/\",\"name\":\"PostgreSQL replicatie: een uitgebreide handleiding\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png\",\"datePublished\":\"2022-08-23T14:31:37+00:00\",\"dateModified\":\"2023-05-22T12:22:06+00:00\",\"description\":\"Leer meer over de belangrijkste aspecten van PostgreSQL replicatie, inclusief voordelen, elementen, typen en strategie\u00ebn voor naadloze databackups.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png\",\"width\":1460,\"height\":730,\"caption\":\"PostgreSQL replicatie: een uitgebreide handleiding\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL\",\"item\":\"https:\/\/kinsta.com\/nl\/onderwerpen\/postgresql\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PostgreSQL replicatie: een uitgebreide handleiding\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/nl\/#website\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snelle, veilige, premium hostingoplossingen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\",\"https:\/\/x.com\/Kinsta_NL\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/nl\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL replicatie: een uitgebreide handleiding","description":"Leer meer over de belangrijkste aspecten van PostgreSQL replicatie, inclusief voordelen, elementen, typen en strategie\u00ebn voor naadloze databackups.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/","og_locale":"nl_NL","og_type":"article","og_title":"PostgreSQL replicatie: een uitgebreide handleiding","og_description":"Leer meer over de belangrijkste aspecten van PostgreSQL replicatie, inclusief voordelen, elementen, typen en strategie\u00ebn voor naadloze databackups.","og_url":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","article_published_time":"2022-08-23T14:31:37+00:00","article_modified_time":"2023-05-22T12:22:06+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Leer meer over de belangrijkste aspecten van PostgreSQL replicatie, inclusief voordelen, elementen, typen en strategie\u00ebn voor naadloze databackups.","twitter_image":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png","twitter_creator":"@salmanravoof","twitter_site":"@Kinsta_NL","twitter_misc":{"Geschreven door":"Salman Ravoof","Geschatte leestijd":"22 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"PostgreSQL replicatie: een uitgebreide handleiding","datePublished":"2022-08-23T14:31:37+00:00","dateModified":"2023-05-22T12:22:06+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/"},"wordCount":4511,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png","keywords":["database","databases","development","PostgreSQL"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/","url":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/","name":"PostgreSQL replicatie: een uitgebreide handleiding","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png","datePublished":"2022-08-23T14:31:37+00:00","dateModified":"2023-05-22T12:22:06+00:00","description":"Leer meer over de belangrijkste aspecten van PostgreSQL replicatie, inclusief voordelen, elementen, typen en strategie\u00ebn voor naadloze databackups.","breadcrumb":{"@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#primaryimage","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2022\/08\/postgresql-replicatie.png","width":1460,"height":730,"caption":"PostgreSQL replicatie: een uitgebreide handleiding"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/nl\/blog\/postgresql-replicatie\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/nl\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL","item":"https:\/\/kinsta.com\/nl\/onderwerpen\/postgresql\/"},{"@type":"ListItem","position":3,"name":"PostgreSQL replicatie: een uitgebreide handleiding"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/nl\/#website","url":"https:\/\/kinsta.com\/nl\/","name":"Kinsta\u00ae","description":"Snelle, veilige, premium hostingoplossingen","publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/nl\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","https:\/\/x.com\/Kinsta_NL","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/nl\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/45201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/comments?post=45201"}],"version-history":[{"count":14,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/45201\/revisions"}],"predecessor-version":[{"id":49320,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/45201\/revisions\/49320"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/nl"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/jp"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/translations\/dk"},{"href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/45201\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media\/45338"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media?parent=45201"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/tags?post=45201"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/topic?post=45201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}