{"id":49242,"date":"2023-01-24T06:30:16","date_gmt":"2023-01-24T06:30:16","guid":{"rendered":"https:\/\/kinsta.com\/se\/?p=49242&#038;preview=true&#038;preview_id=49242"},"modified":"2023-09-21T09:40:16","modified_gmt":"2023-09-21T09:40:16","slug":"postgresql-replikering","status":"publish","type":"post","link":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/","title":{"rendered":"Replikering av PostgreSQL: En omfattande guide"},"content":{"rendered":"<p>Alla webbplats\u00e4gare kan intyga att dataf\u00f6rlust och driftstopp, \u00e4ven i minimala doser, kan vara katastrofala. De kan drabba den of\u00f6rberedde n\u00e4r som helst och leda till minskad produktivitet, tillg\u00e4nglighet och minskat produktf\u00f6rtroende.<\/p>\n<p>F\u00f6r att skydda integriteten hos din webbplats s\u00e5 \u00e4r det viktigt att bygga upp ditt skydd mot driftstopp eller dataf\u00f6rlust.<\/p>\n<p>Det \u00e4r d\u00e4r som datareplikering kommer in i bilden.<br \/>\n<br \/>\nDatareplikering \u00e4r en automatiserad s\u00e4kerhetskopierings-process d\u00e4r dina data upprepade g\u00e5nger kopieras fr\u00e5n huvuddatabasen till en annan, avl\u00e4gsen plats f\u00f6r f\u00f6rvaring. Det \u00e4r en integrerad teknik f\u00f6r alla webbplatser eller appar som k\u00f6r en <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpressdatabasen\/\">databasserver<\/a>. Du kan \u00e4ven utnyttja den replikerade databasen f\u00f6r att bearbeta skrivskyddad SQL, vilket g\u00f6r att fler processer kan k\u00f6ras i systemet.<\/p>\n<p>Att st\u00e4lla in replikering mellan tv\u00e5 databaser ger en feltolerans mot ov\u00e4ntade miss\u00f6den. Det anses vara den b\u00e4sta strategin f\u00f6r att uppn\u00e5 en h\u00f6g tillg\u00e4nglighet vid katastrofer.<\/p>\n<p>I den h\u00e4r artikeln s\u00e5 kommer vi att djupdyka i de olika strategier som kan implementeras av <a href=\"https:\/\/kinsta.com\/blog\/backend-developer\/\">backend-utvecklare<\/a> f\u00f6r s\u00f6ml\u00f6s PostgreSQL-replikering.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Vad \u00e4r PostgreSQL-replikering?<\/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=\"Illustration av PostgreSQL-replikering (Bildk\u00e4lla: EnterpriseDB)\" width=\"945\" height=\"310\"><figcaption id=\"caption-attachment-128034\" class=\"wp-caption-text\">Illustration av PostgreSQL-replikering (Bildk\u00e4lla: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<p>PostgreSQL-replikering definieras som processen f\u00f6r kopiering av data fr\u00e5n en <a href=\"https:\/\/kinsta.com\/blog\/what-is-postgresql\/\">PostgreSQL-databasserver<\/a> till en annan server. K\u00e4lldatabasservern kallas \u00e4ven f\u00f6r den &#8221;prim\u00e4ra&#8221; servern. Databasservern som tar emot de kopierade uppgifterna kallas f\u00f6r &#8221;replika&#8221;-servern.<\/p>\n<p>PostgreSQL-databasen f\u00f6ljer en enkel replikerings-modell d\u00e4r alla skrivningar g\u00e5r till en prim\u00e4r nod. Den prim\u00e4ra noden kan sedan till\u00e4mpa dessa \u00e4ndringar och s\u00e4nda dem till sekund\u00e4ra noder.<\/p>\n<h3>Vad \u00e4r automatisk v\u00e4xling?<\/h3>\n<p>Failover \u00e4r en metod f\u00f6r att <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial\" target=\"_blank\" rel=\"noopener noreferrer\">\u00e5terst\u00e4lla data om den prim\u00e4ra servern av n\u00e5gon anledning ger upp<\/a>. S\u00e5 l\u00e4nge som du har konfigurerat PostreSQL f\u00f6r att hantera din fysiska str\u00f6mmande replikering s\u00e5 kommer du &#8211; och dina anv\u00e4ndare &#8211; att vara skyddade fr\u00e5n driftsstopp p\u00e5 grund av en prim\u00e4rserver som kr\u00e5nglar.<\/p>\n<p>Observera att failover-processen kan ta lite tid att konfigurera och initiera. Det finns inga inbyggda verktyg f\u00f6r att \u00f6vervaka och avgr\u00e4nsa serverfel i PostgreSQL, s\u00e5 du m\u00e5ste vara kreativ.<\/p>\n<p>Du beh\u00f6ver som tur \u00e4r inte vara beroende av PostgreSQL f\u00f6r failover. Det finns dedikerade verktyg som m\u00f6jligg\u00f6r automatisk failover och automatisk v\u00e4xling till standby, vilket minskar <a href=\"https:\/\/kinsta.com\/blog\/wordpress-repair-database\/\">nertiden f\u00f6r databasen<\/a>.<\/p>\n<p>Genom att st\u00e4lla in failover-replikering s\u00e5 garanterar du n\u00e4stan en h\u00f6g tillg\u00e4nglighet genom att se till att reserver finns tillg\u00e4ngliga om den prim\u00e4ra servern n\u00e5gonsin kollapsar.<\/p>\n<h2>F\u00f6rdelar med att anv\u00e4nda PostgreSQL-replikering<\/h2>\n<p>H\u00e4r \u00e4r n\u00e5gra viktiga f\u00f6rdelar med att anv\u00e4nda PostgreSQL-replikering:<\/p>\n<ul>\n<li><strong>Datamigrering:<\/strong> Du kan utnyttja PostgreSQL-replikering f\u00f6r datamigrering antingen genom byte av databasserverns h\u00e5rdvara eller genom systemdistribuering.<\/li>\n<li><strong>Feltolerans:<\/strong> Om den prim\u00e4ra servern g\u00e5r s\u00f6nder s\u00e5 kan standby-servern fungera som en server eftersom uppgifterna f\u00f6r b\u00e5de prim\u00e4ra servrar och standby-servrar \u00e4r desamma.<\/li>\n<li><strong>Prestanda f\u00f6r transaktionsbehandling p\u00e5 n\u00e4tet (OLTP):<\/strong> Du kan f\u00f6rb\u00e4ttra transaktionsbehandlingstiden och fr\u00e5getiden f\u00f6r ett OLTP-system genom att ta bort rapporterande fr\u00e5gelast. Transaktionsbehandlingstiden \u00e4r den tid som det tar f\u00f6r en viss s\u00f6kfr\u00e5ga att utf\u00f6ras innan en transaktion \u00e4r avslutad.<\/li>\n<li><strong>Systemtestning parallellt:<\/strong> N\u00e4r du uppgraderar ett nytt system s\u00e5 m\u00e5ste du f\u00f6rs\u00e4kra dig om att systemet klarar sig bra med befintliga data. Det finns d\u00e4rf\u00f6r ett behov att testa med en produktionsdatabaskopia innan det tas i bruk.<\/li>\n<\/ul>\n<h2>Hur PostgreSQL-replikering fungerar<\/h2>\n<p>Folk tror generellt att det bara finns ett s\u00e4tt att konfigurera <a href=\"https:\/\/kinsta.com\/se\/blog\/sakerhetskopierar-wordpresswebbplats\/\">s\u00e4kerhetskopior<\/a> och replikering, n\u00e4r man h\u00e5ller p\u00e5 med en prim\u00e4r och sekund\u00e4r arkitektur. PostgreSQL-implementeringar kan dock f\u00f6lja <a href=\"https:\/\/www.citusdata.com\/blog\/2018\/02\/21\/three-approaches-to-postgresql-replication\/\" target=\"_blank\" rel=\"noopener noreferrer\">n\u00e5gon av dessa tre metoder<\/a>:<\/p>\n<ol>\n<li><strong>Str\u00f6mnings-replikering:<\/strong> Replikerar data fr\u00e5n den prim\u00e4ra noden till den sekund\u00e4ra och kopierar sedan data till Amazon S3 eller Azure Blob f\u00f6r s\u00e4kerhetskopiering.<\/li>\n<li><strong>Replikering p\u00e5 volymniv\u00e5:<\/strong> Replikerar data p\u00e5 arkiv-lagret, med b\u00f6rjan fr\u00e5n den prim\u00e4ra noden till den sekund\u00e4ra noden, och kopierar sedan data till Amazon S3 eller Azure Blob f\u00f6r s\u00e4kerhetskopiering.<\/li>\n<li><strong>Inkrementella s\u00e4kerhetskopior:<\/strong> Replikerar data fr\u00e5n den prim\u00e4ra noden samtidigt som en ny sekund\u00e4r nod konstrueras fr\u00e5n Amazon S3- eller Azure Blob-lagring. Detta m\u00f6jligg\u00f6r str\u00f6mning direkt fr\u00e5n den prim\u00e4ra noden.<\/li>\n<\/ol>\n<h3>Metod 1: Str\u00f6mning<\/h3>\n<p>PostgreSQL str\u00f6mnings-replikering, \u00e4ven k\u00e4nt som WAL-replikering, kan konfigureras s\u00f6ml\u00f6st efter installation av PostgreSQL p\u00e5 alla servrar. Detta tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6r replikering bygger p\u00e5 att WAL-filerna flyttas fr\u00e5n den prim\u00e4ra databasen till m\u00e5ldatabasen.<\/p>\n<p>Du kan implementera PostgreSQL str\u00f6mnings-replikering genom att anv\u00e4nda en prim\u00e4r-sekund\u00e4r konfiguration. Den prim\u00e4ra servern \u00e4r den huvudinstans som hanterar den prim\u00e4ra databasen och all dess verksamhet. Den sekund\u00e4ra servern fungerar som den kompletterande instansen och utf\u00f6r alla \u00e4ndringar som g\u00f6rs i den prim\u00e4ra databasen p\u00e5 sig sj\u00e4lv. Detta genererar en identisk kopia i processen. Den prim\u00e4ra servern \u00e4r en l\u00e4s- och skrivserver medan den sekund\u00e4ra servern endast \u00e4r skrivskyddad.<\/p>\n<p>F\u00f6r den h\u00e4r metoden s\u00e5 m\u00e5ste du b\u00e5de konfigurera den prim\u00e4ra noden och reservnoden. I f\u00f6ljande avsnitt s\u00e5 beskrivs de steg som kr\u00e4vs f\u00f6r att konfigurera dem p\u00e5 ett enkelt s\u00e4tt.<\/p>\n<h4>Konfigurera den prim\u00e4ra noden<\/h4>\n<p>Du kan konfigurera den prim\u00e4ra noden f\u00f6r str\u00f6mmande replikering genom att utf\u00f6ra f\u00f6ljande steg:<\/p>\n<h5>Steg 1: Initialisera databasen<\/h5>\n<p>F\u00f6r att <a href=\"https:\/\/hevodata.com\/learn\/postgresql-streaming-replication\/#master1\" target=\"_blank\" rel=\"noopener noreferrer\">initialisera databasen<\/a> s\u00e5 kan du anv\u00e4nda kommandot <code>initdb<\/code>. D\u00e4refter s\u00e5 kan du skapa en ny anv\u00e4ndare med replikerings-r\u00e4ttigheter med hj\u00e4lp av f\u00f6ljande kommando:<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'example_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'example_password';<\/code><\/pre>\n<p>Anv\u00e4ndaren m\u00e5ste ange ett l\u00f6senord och ett anv\u00e4ndarnamn f\u00f6r den givna s\u00f6kfr\u00e5gan. Nyckelordet replikering anv\u00e4nds f\u00f6r att ge anv\u00e4ndaren de n\u00f6dv\u00e4ndiga privilegierna. En exempelfr\u00e5ga exempelvis kunna se ut s\u00e5 h\u00e4r:<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'rep_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'rep_password';<\/code><\/pre>\n<h5>Steg 2: Konfigurera egenskaper f\u00f6r str\u00f6mning<\/h5>\n<p>D\u00e4refter s\u00e5 kan du konfigurera str\u00f6mnings-egenskaperna med PostgreSQL-konfigurationsfilen (<strong>postgresql.conf<\/strong>) som kan \u00e4ndras p\u00e5 f\u00f6ljande s\u00e4tt:<\/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>H\u00e4r \u00e4r lite bakgrundsinformation om de parametrar som anv\u00e4ndes i f\u00f6reg\u00e5ende utdrag:<\/p>\n<ul>\n<li><strong><code>wal_log_hints<\/code>:<\/strong> Den h\u00e4r parametern kr\u00e4vs f\u00f6r <code>pg_rewind<\/code>-funktionen som \u00e4r praktisk n\u00e4r reservservern inte \u00e4r synkroniserad med den prim\u00e4ra servern.<\/li>\n<li><strong><code>wal_level<\/code>:<\/strong> Du kan anv\u00e4nda den h\u00e4r parametern f\u00f6r att aktivera PostgreSQL str\u00f6mings-replikering, med m\u00f6jliga v\u00e4rden som <code>minimal<\/code>, <code>replica<\/code> eller <code>logical<\/code>.<\/li>\n<li><strong><code>max_wal_size<\/code>:<\/strong> Detta kan anv\u00e4ndas f\u00f6r att ange storleken p\u00e5 WAL-filer som kan beh\u00e5llas i loggfiler.<\/li>\n<li><strong><code>hot_standby<\/code>:<\/strong> Du kan utnyttja den h\u00e4r parametern f\u00f6r en anslutning till den sekund\u00e4ra datorn n\u00e4r den \u00e4r inst\u00e4lld p\u00e5 ON.<\/li>\n<li><strong><code>max_wal_senders<\/code>:<\/strong> Du kan anv\u00e4nda <code>max_wal_senders<\/code> f\u00f6r att ange det maximala antalet samtidiga anslutningar som kan uppr\u00e4ttas med reserv-servrarna.<\/li>\n<\/ul>\n<h5>Steg 3: Skapa en ny post<\/h5>\n<p>N\u00e4r du har \u00e4ndrat parametrarna i filen <strong>postgresql.conf<\/strong> s\u00e5 sker n\u00e5t viktigt. D\u00e5 kan n\u00e4mligen en ny replikeringspost i filen <strong>pg_hba.conf<\/strong> g\u00f6ra det m\u00f6jligt f\u00f6r servrarna att uppr\u00e4tta en anslutning med varandra f\u00f6r replikering.<\/p>\n<p>Du hittar vanligtvis den h\u00e4r filen i PostgreSQL&#8217;s datakatalog. Du kan anv\u00e4nda f\u00f6ljande kodutdrag f\u00f6r samma sak:<\/p>\n<pre><code class=\"language-bash\">host replication rep_user IPaddress md5<\/code><\/pre>\n<p>N\u00e4r kodstycket exekveras s\u00e5 till\u00e5ter den prim\u00e4ra servern en anv\u00e4ndare som heter <code>rep_user<\/code> att ansluta och agera som reserv-server genom att anv\u00e4nda den angivna IP-adressen f\u00f6r replikering. Exempelvis:<\/p>\n<pre><code class=\"language-bash\">host replication rep_user 192.168.0.22\/32 md5<\/code><\/pre>\n<h4>Konfigurera standby-nod<\/h4>\n<p>F\u00f6lj de h\u00e4r stegen f\u00f6r att konfigurera standby-noden f\u00f6r str\u00f6mnings-replikering:<\/p>\n<h5>Steg 1: S\u00e4kerhetskopiera den prim\u00e4ra noden<\/h5>\n<p>F\u00f6r att konfigurera standby-noden s\u00e5 anv\u00e4nder du verktyget <code>pg_basebackup<\/code> f\u00f6r att skapa en s\u00e4kerhetskopia av den prim\u00e4ra noden. Detta kommer att fungera som utg\u00e5ngspunkt f\u00f6r standby-noden. Du kan anv\u00e4nda det h\u00e4r verktyget med f\u00f6ljande syntax:<\/p>\n<pre><code class=\"language-bash\">pg_basebackp -D  -h  -X stream -c fast -U rep_user -W<\/code><\/pre>\n<p>De parametrar som anv\u00e4nds i syntaxen ovan \u00e4r f\u00f6ljande:<\/p>\n<ul>\n<li><strong><code>-h<\/code>:<\/strong> Du kan anv\u00e4nda detta f\u00f6r att ange den prim\u00e4ra hosten.<\/li>\n<li><strong><code>-D<\/code>:<\/strong> Den h\u00e4r parametern anger den katalog som du f\u00f6r n\u00e4rvarande arbetar i.<\/li>\n<li><strong><code>-C<\/code>:<\/strong> Du kan anv\u00e4nda den h\u00e4r parametern f\u00f6r att ange kontrollpunkter.<\/li>\n<li><strong><code>-X<\/code>:<\/strong> Den h\u00e4r parametern kan anv\u00e4ndas f\u00f6r att inkludera de n\u00f6dv\u00e4ndiga transaktionsloggfilerna.<\/li>\n<li><strong><code>-W<\/code>:<\/strong> Du kan anv\u00e4nda den h\u00e4r parametern f\u00f6r att uppmana anv\u00e4ndaren att ange ett l\u00f6senord innan anslutning till databasen.<\/li>\n<\/ul>\n<h5>Steg 2: Konfigurera konfigurationsfilen f\u00f6r replikering<\/h5>\n<p>D\u00e4refter s\u00e5 m\u00e5ste du kontrollera om replikeringskonfigurationsfilen finns. Om den inte existerar s\u00e5 kan du generera replikeringskonfigurationsfilen som <strong>recovery.conf<\/strong>.<\/p>\n<p>Du b\u00f6r skapa den h\u00e4r filen i datakatalogen i PostgreSQL-installationen. Den kan genereras automatiskt genom alternativet <code>-R<\/code> i verktyget <code>pg_basebackup<\/code>.<\/p>\n<p>Filen <strong>recovery.conf<\/strong> b\u00f6r inneh\u00e5lla f\u00f6ljande kommandon:<\/p>\n<pre><code class=\"bash\">standby_mode = 'on'\n\nprimary_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\nrecovery_target_timeline = 'latest'<\/code><\/pre>\n<p>De parametrar som anv\u00e4nds i de ovann\u00e4mnda kommandona \u00e4r f\u00f6ljande:<\/p>\n<ul>\n<li><strong><code>primary_conninfo<\/code>:<\/strong> Du kan anv\u00e4nda detta f\u00f6r att skapa en anslutning mellan den prim\u00e4ra och sekund\u00e4ra servern genom att anv\u00e4nda en anslutningsstr\u00e4ng.<\/li>\n<li><strong><code>standby_mode<\/code>:<\/strong> Den h\u00e4r parametern kan f\u00e5 den prim\u00e4ra servern att starta som standby-server n\u00e4r den sl\u00e5s p\u00e5.<\/li>\n<li><strong><code>recovery_target_timeline<\/code>:<\/strong> Du kan anv\u00e4nda den h\u00e4r parametern f\u00f6r att st\u00e4lla in \u00e5terh\u00e4mtningstiden.<\/li>\n<\/ul>\n<p>Om du vill uppr\u00e4tta en anslutning s\u00e5 m\u00e5ste du ange anv\u00e4ndarnamn, IP-adress och l\u00f6senord som hosten f\u00f6r parametern primary_conninfo. Exempelvis:<\/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>Steg 3: Starta om den sekund\u00e4ra servern<\/h5>\n<p>Slutligen s\u00e5 kan du starta om den sekund\u00e4ra servern f\u00f6r att slutf\u00f6ra konfigurationen.<\/p>\n<p>Str\u00f6mnings-replikering inneb\u00e4r dock flera utmaningar, exempelvis:<\/p>\n<ul>\n<li>Olika PostgreSQL-klienter (skrivna i olika programmeringsspr\u00e5k) konverserar med en enda slutpunkt. N\u00e4r den prim\u00e4ra noden misslyckas s\u00e5 kommer dessa klienter att forts\u00e4tta att f\u00f6rs\u00f6ka upprepa samma DNS- eller IP-namn. Detta g\u00f6r att failover blir synligt f\u00f6r applikationen.<\/li>\n<li>PostgreSQL-replikering har ingen inbyggd failover och \u00f6vervakning. N\u00e4r den prim\u00e4ra noden misslyckas s\u00e5 m\u00e5ste du befordra en sekund\u00e4r nod till att bli den nya prim\u00e4ra noden. Denna befordran m\u00e5ste utf\u00f6ras p\u00e5 ett s\u00e5dant s\u00e4tt att klienterna skriver till endast en prim\u00e4r nod och att de inte observerar data-inkonsekvenser.<\/li>\n<li>PostgreSQL replikerar hela sitt tillst\u00e5nd. N\u00e4r du beh\u00f6ver utveckla en ny sekund\u00e4r nod s\u00e5 m\u00e5ste den sekund\u00e4ra noden \u00e5terskapa hela historiken \u00f6ver tillst\u00e5nds\u00e4ndringar fr\u00e5n den prim\u00e4ra noden. Detta \u00e4r resurskr\u00e4vande och g\u00f6r det kostsamt att eliminera huvud-noder och skapa nya.<\/li>\n<\/ul>\n<h3>Metod 2: Replikerad blockenhet<\/h3>\n<p>Metoden med replikerad blockenhet \u00e4r beroende av diskspegling (\u00e4ven k\u00e4nt som volymreplikering). I detta tillv\u00e4gag\u00e5ngss\u00e4tt s\u00e5 skrivs \u00e4ndringar till en best\u00e4ndig volym som speglas synkront till en annan volym.<\/p>\n<p>F\u00f6rdelen med den h\u00e4r metoden \u00e4r dess kompatibilitet och datadurabilitet i molnmilj\u00f6er med alla relationsdatabaser. Detta inkluderar exempelvis PostgreSQL, MySQL och <a href=\"https:\/\/kinsta.com\/se\/blog\/postgresql-vs-sql-server\/\">SQL Server<\/a>, f\u00f6r att n\u00e4mna n\u00e5gra.<\/p>\n<p>Diskspeglingsmetoden f\u00f6r PostgreSQL-replikering kr\u00e4ver dock att du b\u00e5de replikerar WAL-logg- och tabelldata. Eftersom varje skrivning till databasen nu m\u00e5ste g\u00e5 \u00f6ver n\u00e4tverket synkront s\u00e5 har du inte r\u00e5d att f\u00f6rlora en enda byte. Som ett resultat s\u00e5 kan detta n\u00e4mligen leda till att din databas hamnar i ett korrupt tillst\u00e5nd.<\/p>\n<p>Den h\u00e4r metoden anv\u00e4nds normalt med Azure PostgreSQL och Amazon RDS.<\/p>\n<h3>Metod 3: WAL<\/h3>\n<p>WAL best\u00e5r av segmentfiler (16 MB som standard). Varje segment har en eller flera poster. En loggsekvenspost (LSN) \u00e4r en pekare mot en post i WAL, som ger dig information om positionen\/platsen d\u00e4r posten har sparats i loggfilen.<\/p>\n<p>En standby-server utnyttjar WAL-segmenten &#8211; \u00e4ven kallade XLOGS i PostgreSQL-terminologi &#8211; f\u00f6r att kontinuerligt replikera \u00e4ndringar fr\u00e5n den prim\u00e4ra servern. Du kan anv\u00e4nda write-ahead logging f\u00f6r att ge h\u00e5llbarhet och atomicitet i ett DBMS. Detta g\u00f6rs genom serialisering av delar av byte-array-data (var och en med ett unikt LSN) till stabil lagring innan de till\u00e4mpas i en databas.<\/p>\n<p>Att till\u00e4mpa en mutation p\u00e5 en databas kan leda till olika filsystemoperationer. En relevant fr\u00e5ga som dyker upp \u00e4r f\u00f6ljande: Hur kan en databas garantera atomicitet i h\u00e4ndelse av ett serverfel p\u00e5 grund av str\u00f6mavbrott medan den \u00e4r mitt uppe i en filsystemuppdatering. N\u00e4r en databas startar upp s\u00e5 k\u00f6r den en start- eller \u00e5terspelningsprocess som kan l\u00e4sa de tillg\u00e4ngliga WAL-segmenten och j\u00e4mf\u00f6ra dem med det LSN som finns lagrat p\u00e5 varje datasida. Varje datasida \u00e4r markerad med LSN f\u00f6r den senaste WAL-posten som p\u00e5verkar sidan.<\/p>\n<h4>Replikering baserad p\u00e5 loggtransport (blockniv\u00e5)<\/h4>\n<p>Str\u00f6mnings-replikering f\u00f6rfinar loggf\u00f6rs\u00e4ndelseprocessen. I motsats till att v\u00e4nta p\u00e5 WAL-omkopplingen s\u00e5 skickas posterna n\u00e4r de skapas, vilket minskar replikeringsf\u00f6rdr\u00f6jningen.<\/p>\n<p>Str\u00f6mnings-replikering \u00e4r \u00e4ven b\u00e4ttre \u00e4n loggf\u00f6rs\u00e4ndelse eftersom reservservern \u00e4r kopplad till den prim\u00e4ra servern via n\u00e4tverket. Den utnyttjar ett replikeringsprotokoll. Som ett resultat s\u00e5 kan den prim\u00e4ra servern sedan skicka WAL-poster direkt \u00f6ver denna anslutning. Den \u00e4r inte beroende av skript som tillhandah\u00e5lls av slutanv\u00e4ndaren.<\/p>\n<h4>Replikering baserad p\u00e5 loggtransport (filniv\u00e5)<\/h4>\n<p>Loggf\u00f6rs\u00e4ndelse definieras som kopiering av loggfiler till en annan PostgreSQL-server f\u00f6r att generera en annan reservserver. Detta g\u00f6rs genom att spela om WAL-filer. Denna server \u00e4r konfigurerad f\u00f6r att arbeta i \u00e5terst\u00e4llningsl\u00e4ge och dess enda syfte \u00e4r att till\u00e4mpa nya WAL-filer n\u00e4r de dyker upp.<\/p>\n<p>Som ett resultat s\u00e5 blir den sekund\u00e4ra servern sedan en varm s\u00e4kerhetskopia av den prim\u00e4ra PostgreSQL-servern. Den kan \u00e4ven konfigureras f\u00f6r att vara en l\u00e4skopia, d\u00e4r den kan erbjuda skrivskyddade f\u00f6rfr\u00e5gningar, \u00e4ven kallat hot standby.<\/p>\n<h4>Kontinuerlig arkivering av WAL-filer<\/h4>\n<p>WAL-arkivering \u00e4r en duplicering av WAL-filer n\u00e4r de skapas till en annan plats \u00e4n underkatalogen <code>pg_wal<\/code> f\u00f6r att arkiveras. PostgreSQL anropar ett skript som anv\u00e4ndaren har angett f\u00f6r arkivering varje g\u00e5ng som en WAL-fil skapas.<\/p>\n<p>Skriptet kan utnyttja kommandot <code>scp<\/code> f\u00f6r att duplicera filen till en eller flera platser, t.ex. en NFS-montering. Som ett resultat av arkiveringen s\u00e5 kan WAL-segmentfilerna anv\u00e4ndas f\u00f6r att \u00e5terst\u00e4lla databasen vid vilken tidpunkt som helst.<\/p>\n<p>Andra loggbaserade konfigurationer inkluderar:<\/p>\n<ul>\n<li><strong>Synkron replikering:<\/strong> Innan varje synkron replikeringstransaktion bekr\u00e4ftas, v\u00e4ntar den prim\u00e4ra servern tills standbys bekr\u00e4ftar att de har f\u00e5tt data. F\u00f6rdelen med den h\u00e4r konfigurationen \u00e4r exempelvis att det inte uppst\u00e5r n\u00e5gra konflikter p\u00e5 grund av parallella skrivprocesser.<\/li>\n<li><strong>Synkron replikering med flera huvudansvariga:<\/strong> H\u00e4r kan varje server ta emot skrivf\u00f6rfr\u00e5gningar, och \u00e4ndrade data \u00f6verf\u00f6rs fr\u00e5n den ursprungliga servern till alla andra servrar innan varje transaktion bekr\u00e4ftas. Den utnyttjar 2PC-protokollet och f\u00f6ljer regeln om allt eller inget.<\/li>\n<\/ul>\n<h4>Detaljer om WAL-str\u00f6mningsprotokollet<\/h4>\n<p>En process som kallas WAL-mottagare och som k\u00f6rs p\u00e5 reservservern utnyttjar de anslutningsuppgifter som anges i parametern <code>primary_conninfo<\/code> i <strong>recovery.conf<\/strong>. Den ansluter till den prim\u00e4ra servern genom att utnyttja en TCP\/IP-anslutning.<\/p>\n<p>F\u00f6r att starta str\u00f6mnings-replikering s\u00e5 kan frontend skicka replikeringsparametern i startmeddelandet. Ett boolskt v\u00e4rde p\u00e5 true, yes, 1 eller ON l\u00e5ter <a href=\"https:\/\/kinsta.com\/blog\/backend-developer-salary\/\">backend<\/a> veta att den m\u00e5ste g\u00e5 in i fysiskt replikeringsl\u00e4ge f\u00f6r Wal-s\u00e4ndaren.<\/p>\n<p>WAL-s\u00e4ndaren \u00e4r en annan process som k\u00f6rs p\u00e5 den prim\u00e4ra servern och som ansvarar f\u00f6r att skicka WAL-posterna till reservservern n\u00e4r de genereras. Som ett resultat s\u00e5 sparar WAL-mottagaren WAL-posterna i WAL som om de skapades av klientaktivitet av lokalt anslutna klienter.<\/p>\n<p>N\u00e4r WAL-posterna v\u00e4l n\u00e5r WAL-segmentfilerna s\u00e5 forts\u00e4tter standby-servern st\u00e4ndigt att spela upp WAL-posterna s\u00e5 att prim\u00e4r- och standby-servern \u00e4r uppdaterade.<\/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=\"Fl\u00f6desdiagram f\u00f6r WAL-str\u00f6mningsprotokollet (bildk\u00e4lla: EnterpriseDB)\" width=\"1024\" height=\"1020\"><figcaption id=\"caption-attachment-128035\" class=\"wp-caption-text\">Fl\u00f6desdiagram f\u00f6r WAL-str\u00f6mningsprotokollet (bildk\u00e4lla: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<h2>Element av PostgreSQL-replikering<\/h2>\n<p>I det h\u00e4r avsnittet s\u00e5 f\u00e5r du en djupare f\u00f6rst\u00e5else f\u00f6r de vanligaste modellerna (replikering med en och flera huvudm\u00e4n), typerna (fysisk och logisk replikering) och s\u00e4tten (synkron och asynkron) f\u00f6r PostgreSQL-replikering.<\/p>\n<h3>Modeller f\u00f6r PostgreSQL-databasreplikering<\/h3>\n<p>Skalbarhet inneb\u00e4r att man l\u00e4gger till mer resurser\/h\u00e5rdvara till befintliga noder f\u00f6r att \u00f6ka databasens f\u00f6rm\u00e5ga att lagra och bearbeta mer data. Detta kan uppn\u00e5s horisontellt och vertikalt. PostgreSQL-replikering \u00e4r ett exempel p\u00e5 horisontell skalbarhet som \u00e4r mycket sv\u00e5rare att genomf\u00f6ra \u00e4n vertikal skalbarhet. Vi kan uppn\u00e5 horisontell skalbarhet fr\u00e4mst genom replikering med en enda huvudman (SMR) och replikering med flera huvudm\u00e4n (MMR).<\/p>\n<p>Replikering med en enda huvudman g\u00f6r det m\u00f6jligt att \u00e4ndra data i en enda nod, och dessa \u00e4ndringar replikeras till en eller flera noder. De replikerade tabellerna i replikeringsdatabasen f\u00e5r inte ta emot n\u00e5gra \u00e4ndringar, f\u00f6rutom de som kommer fr\u00e5n den prim\u00e4ra servern. \u00c4ven om de g\u00f6r detta s\u00e5 replikeras \u00e4ndringarna inte tillbaka till den prim\u00e4ra servern.<\/p>\n<p>F\u00f6r det mesta s\u00e5 r\u00e4cker SMR f\u00f6r applikationen. Det \u00e4r n\u00e4mligen mindre komplicerat att konfigurera och hantera och det finns ingen risk f\u00f6r konflikter. Replikering med en enda huvudserver \u00e4r \u00e4ven enkelriktad, eftersom replikeringsdata huvudsakligen fl\u00f6dar i en riktning, fr\u00e5n den prim\u00e4ra till replikdatabasen.<\/p>\n<p>I vissa fall r\u00e4cker det inte bara med SMR. Du kan beh\u00f6va implementera MMR. MMR g\u00f6r det m\u00f6jligt f\u00f6r fler \u00e4n en nod att agera som prim\u00e4r nod. Som ett resultat s\u00e5 replikeras \u00e4ndringar av tabellrader i mer \u00e4n en utsedd prim\u00e4rdatabas till motsvarande tabeller i alla andra prim\u00e4ra databaser. I den h\u00e4r modellen s\u00e5 anv\u00e4nds ofta konfliktl\u00f6sningsmetoder f\u00f6r att undvika problem som dubbla prim\u00e4rnycklar.<\/p>\n<p>Det finns n\u00e5gra f\u00f6rdelar med att anv\u00e4nda MMR:<\/p>\n<ul>\n<li>Om en host-dator misslyckas s\u00e5 kan andra host-datorer fortfarande tillhandah\u00e5lla uppdaterings- och inmatningstj\u00e4nster.<\/li>\n<li>De prim\u00e4ra noderna \u00e4r utspridda p\u00e5 flera olika platser, s\u00e5 risken f\u00f6r att alla prim\u00e4ra noder ska misslyckas \u00e4r mycket liten.<\/li>\n<li>Du f\u00e5r m\u00f6jlighet att anv\u00e4nda ett WAN (Wide Area Network) av prim\u00e4ra databaser som kan vara geografiskt n\u00e4ra grupper av kunder. Trots detta s\u00e5 kan du \u00e4nd\u00e5 uppr\u00e4tth\u00e5lla datakonsistens i hela n\u00e4tverket.<\/li>\n<\/ul>\n<p>Nackdelen med att inf\u00f6ra MMR \u00e4r dock komplexiteten och sv\u00e5righeten att l\u00f6sa konflikter.<\/p>\n<p>Flera grenar och program tillhandah\u00e5ller MMR-l\u00f6sningar eftersom PostgreSQL inte har n\u00e5got inbyggt st\u00f6d f\u00f6r detta. Dessa l\u00f6sningar kan vara med <a href=\"https:\/\/kinsta.com\/blog\/open-source-database\/\">\u00f6ppen k\u00e4llkod<\/a>, kostnadsfria eller betalda. Ett s\u00e5dant <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-databas-plugins\/\">till\u00e4gg<\/a> \u00e4r bidirektionell replikering (BDR) som \u00e4r asynkron och bygger p\u00e5 PostgreSQL&#8217;s logiska avkodningsfunktion.<\/p>\n<p>Eftersom BDR-applikationen \u00e5terger transaktioner p\u00e5 andra noder s\u00e5 kan \u00e5tergivningsoperationen misslyckas om det finns en konflikt mellan den transaktion som till\u00e4mpas och den transaktion som har bekr\u00e4ftats p\u00e5 den mottagande noden.<\/p>\n<h3>Typer av PostgreSQL-replikering<\/h3>\n<p>Det finns tv\u00e5 typer av PostgreSQL-replikering: logisk och fysisk replikering.<\/p>\n<p>En enkel <em>logisk<\/em> operation &#8211; <code>initdb<\/code> &#8211; skulle exempelvis utf\u00f6ra den fysiska operationen att skapa en baskatalog f\u00f6r ett kluster. P\u00e5 samma s\u00e4tt s\u00e5 skulle en enkel <em>logisk<\/em> operation <code>CREATE DATABASE<\/code> utf\u00f6ra den <em>fysiska<\/em> operationen att skapa en underkatalog i baskatalogen.<\/p>\n<p>Fysisk replikering handlar vanligtvis om filer och kataloger. Den vet inte vad dessa filer och kataloger representerar. Som ett resultat av dessa metoder s\u00e5 uppr\u00e4tth\u00e5lls en fullst\u00e4ndig kopia av alla data i ett enskilt kluster. Det sker vanligtvis p\u00e5 en annan maskin, och g\u00f6rs p\u00e5 filsystemniv\u00e5 eller diskniv\u00e5 och anv\u00e4nder exakta blockadresser.<\/p>\n<p>Logisk replikering \u00e4r ett s\u00e4tt att reproducera dataenheter och deras \u00e4ndringar, baserat p\u00e5 deras replikeringsidentitet (vanligtvis en prim\u00e4rnyckel). Till skillnad fr\u00e5n fysisk replikering s\u00e5 handlar den om databaser, tabeller och DML-operationer och utf\u00f6rs p\u00e5 databasklusterniv\u00e5. Den anv\u00e4nder en <em>publicerings-<\/em> och <em>prenumerationsmodell<\/em> d\u00e4r en eller flera <em>prenumeranter<\/em> prenumererar p\u00e5 en eller flera <em>publikationer<\/em>\u00a0 av en <em>publiceringsnod<\/em>.<\/p>\n<p>Replikeringsprocessen b\u00f6rjar med att ta en \u00f6gonblicksbild av data i publiceringsdatabasen och sedan kopiera den till prenumeranten. Prenumeranterna h\u00e4mtar data fr\u00e5n de publikationer som de prenumererar p\u00e5 och kan publicera data p\u00e5 nytt senare. De kan exempelvis m\u00f6jligg\u00f6ra kaskad-replikering eller mer komplexa konfigurationer. Prenumeranten till\u00e4mpar data i samma ordning som utgivaren s\u00e5 att transaktionskonsistens garanteras f\u00f6r publikationer inom en enda prenumeration, \u00e4ven kallat transaktions-replikering.<\/p>\n<p>De typiska anv\u00e4ndningsomr\u00e5dena f\u00f6r logisk replikering \u00e4r f\u00f6ljande:<\/p>\n<ul>\n<li>Skicka inkrementella \u00e4ndringar i en enskild databas (eller en delm\u00e4ngd av en databas) till prenumeranter n\u00e4r de intr\u00e4ffar.<\/li>\n<li>Delning av en delm\u00e4ngd av databasen mellan flera databaser.<\/li>\n<li>Utl\u00f6sning av enskilda \u00e4ndringar n\u00e4r de anl\u00e4nder till prenumeranten.<\/li>\n<li>Konsolidering av flera databaser till en enda.<\/li>\n<li>Tillg\u00e5ng till replikerade data f\u00f6r olika anv\u00e4ndargrupper.<\/li>\n<\/ul>\n<p>Prenumerant-databasen beter sig p\u00e5 samma s\u00e4tt som alla andra PostgreSQL-instanser. Den kan anv\u00e4ndas som utgivare f\u00f6r andra databaser genom att definiera dess publikationer.<\/p>\n<p>N\u00e4r prenumeranten behandlas som skrivskyddad av applikationen s\u00e5 blir det inga konflikter fr\u00e5n en enda prenumeration. Om det d\u00e4remot finns andra skrivningar som antingen g\u00f6rs av en applikation eller av andra prenumeranter till samma upps\u00e4ttning tabeller kan s\u00e5 konflikter uppst\u00e5.<\/p>\n<p>PostgreSQL st\u00f6der b\u00e5da mekanismerna samtidigt. Logisk replikering till\u00e5ter finkornig kontroll \u00f6ver b\u00e5de datareplikering och s\u00e4kerhet.<\/p>\n<h3>Replikeringsmetoder<\/h3>\n<p>Det finns huvudsakligen tv\u00e5 l\u00e4gen f\u00f6r PostgreSQL-replikering: synkron och asynkron. Synkron replikering till\u00e5ter att data skrivs till b\u00e5de den prim\u00e4ra och sekund\u00e4ra servern samtidigt. Asynkron replikering s\u00e4kerst\u00e4ller att data f\u00f6rst skrivs till hosten och sedan kopieras till den sekund\u00e4ra servern.<\/p>\n<p>Vid replikering i synkront l\u00e4ge s\u00e5 anses transaktioner i den prim\u00e4ra databasen vara avslutade f\u00f6rst n\u00e4r \u00e4ndringarna har replikerats till alla replikor. Replikerings-servrarna m\u00e5ste vara tillg\u00e4ngliga hela tiden f\u00f6r att transaktionerna ska kunna slutf\u00f6ras p\u00e5 den prim\u00e4ra. Det synkrona replikerings-l\u00e4get anv\u00e4nds i avancerade transaktionsmilj\u00f6er med krav p\u00e5 omedelbar v\u00e4xling vid fel.<\/p>\n<p>I asynkront l\u00e4ge s\u00e5 \u00e4r transaktioner p\u00e5 den prim\u00e4ra servern slutf\u00f6rda n\u00e4r \u00e4ndringarna har gjorts p\u00e5 endast den prim\u00e4ra servern. Dessa \u00e4ndringar replikeras senare i replikorna. Replikerings-servrarna kan f\u00f6rbli osynkroniserade under en viss tid, vilket kallas replikerings-f\u00f6rdr\u00f6jning. Vid en krasch s\u00e5 kan det uppst\u00e5 dataf\u00f6rlust. Det \u00f6verskott som asynkron replikering ger \u00e4r dock v\u00e4ldigt litet, s\u00e5 det \u00e4r acceptabelt i de flesta fall (det \u00f6verbelastar inte hosten). Failover fr\u00e5n den prim\u00e4ra databasen till den sekund\u00e4ra databasen tar l\u00e4ngre tid \u00e4n synkron replikering.<\/p>\n<h2>S\u00e5 h\u00e4r st\u00e4ller du in PostgreSQL-replikering<\/h2>\n<p>I det h\u00e4r avsnittet s\u00e5 kommer vi att demonstrera hur man st\u00e4ller in PostgreSQL-replikeringsprocessen p\u00e5 ett Linux-operativsystem. I det h\u00e4r fallet s\u00e5 anv\u00e4nder vi Ubuntu 18.04 LTS och PostgreSQL 10.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Kontrollera att du har installerat Linux Ubuntu-servern. Stegen f\u00f6r att installera PostgreSQL p\u00e5 en Linux-server n\u00e4mns nedan. Du f\u00e5r \u00e4ven l\u00e4ra dig att st\u00e4lla in replikering i den prim\u00e4ra och den sekund\u00e4ra servern.<\/p>\n<\/aside>\n\n<p>Nu s\u00e4tter vi ig\u00e5ng!<\/p>\n<h3>Installation<\/h3>\n<p>Du b\u00f6rjar med att installera PostgreSQL p\u00e5 Linux med dessa steg:<\/p>\n<ol>\n<li>F\u00f6rst s\u00e5 m\u00e5ste du importera PostgreSQL&#8217;s signeringsnyckel genom att skriva nedanst\u00e5ende kommando i terminalen:\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>L\u00e4gg sedan till PostgreSQL-arkivet genom att skriva nedanst\u00e5ende kommando i terminalen:\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>Uppdatera Arkiv Index genom att skriva f\u00f6ljande kommando i terminalen:\n<pre><code class=\"language-bash\">sudo apt-get update<\/code><\/pre>\n<\/li>\n<li>Installera PostgreSQL-paketet med kommandot apt:\n<pre><code class=\"language-bash\">sudo apt-get install -y postgresql-10<\/code><\/pre>\n<\/li>\n<li>Slutligen s\u00e5 anger du l\u00f6senordet f\u00f6r PostgreSQL-anv\u00e4ndaren med hj\u00e4lp av f\u00f6ljande kommando:\n<pre><code class=\"language-bash\">sudo passwd postgres<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Du m\u00e5ste installera PostgreSQL p\u00e5 b\u00e5de den prim\u00e4ra och den sekund\u00e4ra servern innan du startar PostgreSQL-replikeringsprocessen.<\/p>\n<p>N\u00e4r du har installerat PostgreSQL p\u00e5 b\u00e5da servrarna s\u00e5 kan du g\u00e5 vidare till replikeringskonfigurationen av den prim\u00e4ra och den sekund\u00e4ra servern.<\/p>\n<h3>Inst\u00e4llning av replikering p\u00e5 den prim\u00e4ra servern<\/h3>\n<p>Utf\u00f6r dessa steg n\u00e4r du har installerat PostgreSQL p\u00e5 b\u00e5de den prim\u00e4ra och sekund\u00e4ra servern.<\/p>\n<ol>\n<li>F\u00f6rst s\u00e5 loggar du in p\u00e5 PostgreSQL-databasen med f\u00f6ljande kommando:\n<pre><code class=\"language-bash\">su - postgres<\/code><\/pre>\n<\/li>\n<li>Skapa en replikeringsanv\u00e4ndare med f\u00f6ljande kommando:\n<pre><code class=\"language-bash\">psql -c \"CREATEUSER replication REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD'YOUR_PASSWORD';\"<\/code><\/pre>\n<\/li>\n<li>Redigera <strong>pg_hba.cnf<\/strong> med en nano-applikation i Ubuntu och l\u00e4gg till f\u00f6ljande konfiguration:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/pg_hba.conf<\/code><\/pre>\n<p>Konfigurera filen med f\u00f6ljande kommando:<\/p>\n<pre><code class=\"language-bash\">host replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>\u00d6ppna och redigera <strong>postgresql.conf<\/strong> och l\u00e4gg in f\u00f6ljande konfiguration p\u00e5 den prim\u00e4ra servern:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf<\/code><\/pre>\n<p>Anv\u00e4nd f\u00f6ljande konfigurationsinst\u00e4llningar:<strong><br \/>\n<\/strong><\/p>\n<pre><code class=\"language-bash\">listen_addresses = 'localhost,MasterIP'\nwal_level = replica\nwal_keep_segments = 64\nmax_wal_senders = 10<\/code><\/pre>\n<\/li>\n<li>Slutligen s\u00e5 startar du om PostgreSQL p\u00e5 den prim\u00e4ra huvudservern:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl restart postgresql<\/code><\/pre>\n<p>Du har nu slutf\u00f6rt installationen p\u00e5 den prim\u00e4ra servern.<\/p>\n<h3>Konfigurera replikering p\u00e5 den sekund\u00e4ra servern<\/h3>\n<p>F\u00f6lj de h\u00e4r stegen f\u00f6r att konfigurera replikering p\u00e5 den sekund\u00e4ra servern:<\/p>\n<ol>\n<li>Logga in p\u00e5 PostgreSQL RDMS med kommandot nedan:\n<pre><code class=\"language-bash\">su - postgres<\/code><\/pre>\n<\/li>\n<li>Stoppa PostgreSQL-tj\u00e4nsten s\u00e5 att vi kan arbeta med den med kommandot nedan:\n<pre><code class=\"language-bash\">systemctl stop postgresql<\/code><\/pre>\n<\/li>\n<li>Redigera filen <strong>pg_hba.conf<\/strong> med det h\u00e4r kommandot och l\u00e4gg till f\u00f6ljande konfiguration:\n<pre><code class=\"language-bash\">\/\/ \"Edit\" command\nnano \/etc\/postgresql\/10\/main\/pg_hba.conf\n\/\/ \"Configuration\" command\nhost replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>\u00d6ppna och redigera <strong>postgresql.conf<\/strong> p\u00e5 den sekund\u00e4ra servern och l\u00e4gg till f\u00f6ljande konfiguration eller ta bort kommentaren om den \u00e4r kommenterad:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf\nlisten_addresses = 'localhost,SecondaryIP'\nwal_keep_segments = 64\nwal_level = replica\nhot_standby = on\nmax_wal_senders = 10<\/code><\/pre>\n<p><code>SecondaryIP<\/code> \u00e4r adressen till den sekund\u00e4ra servern<\/li>\n<li>\u00d6ppna PostgreSQL-datakatalogen p\u00e5 den sekund\u00e4ra servern och ta bort allt:\n<pre><code class=\"language-bash\">cd \/var\/lib\/postgresql\/10\/main\nrm -rfv *<\/code><\/pre>\n<\/li>\n<li>Kopiera filerna i PostgreSQL-datakatalogen f\u00f6r den prim\u00e4ra servern till PostgreSQL-datakatalogen f\u00f6r den sekund\u00e4ra servern. Skriv sedan det h\u00e4r kommandot p\u00e5 den sekund\u00e4ra servern:\n<pre><code class=\"language-bash\">pg_basebackup -h MasterIP -D \/var\/lib\/postgresql\/11\/main\/ -P -U\nreplication --wal-method=fetch<\/code><\/pre>\n<\/li>\n<li>Skriv in PostgreSQL-l\u00f6senordet f\u00f6r den prim\u00e4ra servern och tryck p\u00e5 enter. L\u00e4gg sedan till f\u00f6ljande kommando f\u00f6r \u00e5terst\u00e4llningskonfigurationen:\n<pre><code class=\"language-bash\">\/\/ \"Edit\" Command\nnano \/var\/lib\/postgresql\/10\/main\/recovery.conf\n\/\/ Configuration\nstandby_mode   = 'on'\nprimary_conninfo = 'host=MasterIP port=5432 user=replication password=YOUR_PASSWORD'\ntrigger_file = '\/tmp\/MasterNow'<\/code><\/pre>\n<p>H\u00e4r \u00e4r <code>YOUR_PASSWORD<\/code> l\u00f6senordet f\u00f6r replikeringsanv\u00e4ndaren i PostgreSQL p\u00e5 den skapade prim\u00e4ra servern.<\/li>\n<li>N\u00e4r l\u00f6senordet har st\u00e4llts in s\u00e5 m\u00e5ste du starta om den sekund\u00e4ra PostgreSQL-databasen eftersom den stoppades:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl start postgresql<\/code><\/pre>\n<h3>Testa din installation<\/h3>\n<p>Nu n\u00e4r vi har utf\u00f6rt stegen s\u00e5 kan vi testa replikeringsprocessen och observera den sekund\u00e4ra serverdatabasen. F\u00f6r detta s\u00e5 skapar vi en tabell p\u00e5 den prim\u00e4ra servern och observerar om samma sak \u00e5terspeglas p\u00e5 den sekund\u00e4ra servern.<\/p>\n<p>L\u00e5t oss b\u00f6rja med det.<\/p>\n<ol>\n<li>Eftersom vi skapar tabellen p\u00e5 den prim\u00e4ra servern s\u00e5 m\u00e5ste du logga in p\u00e5 den:\n<pre><code class=\"language-bash\">su - postgres\npsql<\/code><\/pre>\n<\/li>\n<li>Nu skapar vi en enkel tabell som heter &#8221;testtable&#8221; och l\u00e4gger in data i tabellen genom att k\u00f6ra f\u00f6ljande PostgreSQL-f\u00f6rfr\u00e5gningar i terminalen:\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>Observera den sekund\u00e4ra serverns PostgreSQL-databas genom att logga in p\u00e5 den sekund\u00e4ra servern:\n<pre><code class=\"language-bash\">su - postgres psql<\/code><\/pre>\n<\/li>\n<li>Nu kontrollerar vi om tabellen &#8221;testtable&#8221; finns och kan returnera data genom att k\u00f6ra f\u00f6ljande PostgreSQL-f\u00f6rfr\u00e5gningar i terminalen. Detta kommando visar i princip hela tabellen.\n<pre><code class=\"language-bash\">select * from testtable;<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Detta \u00e4r resultatet av testtabellen:<\/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>Du b\u00f6r kunna se samma data som p\u00e5 den prim\u00e4ra servern.<\/p>\n<p>Om du ser ovanst\u00e5ende s\u00e5 har du framg\u00e5ngsrikt genomf\u00f6rt replikeringsprocessen!<\/p>\n<h2>Vilka \u00e4r PostgreSQL&#8217;s manuella steg f\u00f6r manuell failover?<\/h2>\n<p>L\u00e5t oss g\u00e5 igenom de manuella stegen f\u00f6r en PostgreSQL failover:<\/p>\n<ol>\n<li>Krascha den prim\u00e4ra servern.<\/li>\n<li>Promota standby-servern genom att k\u00f6ra f\u00f6ljande kommando p\u00e5 standby-servern:\n<pre><code class=\"language-bash\">.\/pg_ctl promote -D ..\/sb_data\/\nserver promoting<\/code><\/pre>\n<\/li>\n<li>Anslut till den fr\u00e4mjade standby-servern och l\u00e4gg in en rad:\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');<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Som ett resultat av en lyckad infogning s\u00e5 har standby-servern, som tidigare var en skrivskyddad server, blivit den nya prim\u00e4ra servern.<\/p>\n<h2>Hur man automatiserar Failover i PostgreSQL<\/h2>\n<p>Det \u00e4r enkelt att konfigurera automatisk failover.<\/p>\n<p>Du beh\u00f6ver EDB PostgreSQL failover manager (EFM). Efter att ha laddat ner och installerat EFM p\u00e5 varje prim\u00e4r- och standby-nod s\u00e5 kan du skapa ett EFM-kluster. Det best\u00e5r av en prim\u00e4rnod, en eller flera standby-noder och en valfri Witness-nod som bekr\u00e4ftar p\u00e5st\u00e5enden i h\u00e4ndelse av fel.<\/p>\n<p>EFM \u00f6vervakar kontinuerligt systemets h\u00e4lsa och skickar e-postvarningar baserat p\u00e5 systemh\u00e4ndelser. N\u00e4r ett fel intr\u00e4ffar s\u00e5 v\u00e4xlar den automatiskt \u00f6ver till den mest uppdaterade standby-noden. Den konfigurerar sedan om alla andra standby-servrar s\u00e5 att de k\u00e4nner igen den nya prim\u00e4ra noden.<\/p>\n<p>Den konfigurerar \u00e4ven om belastningsutj\u00e4mnare(t.ex. pgPool) och f\u00f6rhindrar att &#8221;split-brain&#8221; (n\u00e4r tv\u00e5 noder tror att var och en av dem \u00e4r prim\u00e4r) uppst\u00e5r.<\/p>\n<h2>Sammanfattning<\/h2>\n<p>P\u00e5 grund av stora datam\u00e4ngder s\u00e5 har skalbarhet och s\u00e4kerhet blivit tv\u00e5 av de viktigaste kriterierna f\u00f6r <a href=\"https:\/\/kinsta.com\/se\/wordpress-hosting\/dedikerad\/\">databashantering<\/a>, s\u00e4rskilt i en transaktionsmilj\u00f6. Vi kan visserligen f\u00f6rb\u00e4ttra skalbarheten vertikalt genom att l\u00e4gga till mer resurser\/h\u00e5rdvara till befintliga noder. Detta \u00e4r dock inte alltid m\u00f6jligt, ofta p\u00e5 grund av kostnaden eller begr\u00e4nsningarna f\u00f6r att l\u00e4gga till ny h\u00e5rdvara.<\/p>\n<p>Det kr\u00e4vs d\u00e4rf\u00f6r en horisontell skalbarhet, vilket inneb\u00e4r att man l\u00e4gger till fler noder till befintliga n\u00e4tverksnoder snarare \u00e4n f\u00f6rb\u00e4ttrar funktionaliteten hos befintliga noder. Det \u00e4r h\u00e4r som PostgreSQL-replikering kommer in i bilden.<br \/>\n<br \/>\nI den h\u00e4r artikeln s\u00e5 har vi diskuterat typerna av PostgreSQL-replikering, f\u00f6rdelar, replikeringsl\u00e4gen, installation och PostgreSQL failover mellan SMR och MMR. Nu vill vi h\u00f6ra vad du har att s\u00e4ga.<\/p>\n<p>Vilken av dem brukar du vanligtvis implementera? Vilken databasfunktion \u00e4r viktigast f\u00f6r dig och varf\u00f6r? Vi vill g\u00e4rna l\u00e4sa dina tankar! Dela dem i kommentarsf\u00e4ltet nedan.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Alla webbplats\u00e4gare kan intyga att dataf\u00f6rlust och driftstopp, \u00e4ven i minimala doser, kan vara katastrofala. De kan drabba den of\u00f6rberedde n\u00e4r som helst och leda till &#8230;<\/p>\n","protected":false},"author":117,"featured_media":49243,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[169,592,323,594],"topic":[806],"class_list":["post-49242","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>Replikering av PostgreSQL: En omfattande guide<\/title>\n<meta name=\"description\" content=\"L\u00e4s om nyckelaspekterna f\u00f6r PostgreSQL-replikering, inklusive deras f\u00f6rdelar, element, typer och strategier f\u00f6r s\u00f6ml\u00f6sa datas\u00e4kerhetskopior.\" \/>\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\/se\/blog\/postgresql-replikering\/\" \/>\n<meta property=\"og:locale\" content=\"sv_SE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Replikering av PostgreSQL: En omfattande guide\" \/>\n<meta property=\"og:description\" content=\"L\u00e4s om nyckelaspekterna f\u00f6r PostgreSQL-replikering, inklusive deras f\u00f6rdelar, element, typer och strategier f\u00f6r s\u00f6ml\u00f6sa datas\u00e4kerhetskopior.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstasweden\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-24T06:30:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-21T09:40:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.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=\"L\u00e4s om nyckelaspekterna f\u00f6r PostgreSQL-replikering, inklusive deras f\u00f6rdelar, element, typer och strategier f\u00f6r s\u00f6ml\u00f6sa datas\u00e4kerhetskopior.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_se\" \/>\n<meta name=\"twitter:label1\" content=\"Skriven av\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ber\u00e4knad l\u00e4stid\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minuter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Replikering av PostgreSQL: En omfattande guide\",\"datePublished\":\"2023-01-24T06:30:16+00:00\",\"dateModified\":\"2023-09-21T09:40:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/\"},\"wordCount\":4961,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png\",\"keywords\":[\"database\",\"databases\",\"development\",\"PostgreSQL\"],\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/\",\"url\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/\",\"name\":\"Replikering av PostgreSQL: En omfattande guide\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png\",\"datePublished\":\"2023-01-24T06:30:16+00:00\",\"dateModified\":\"2023-09-21T09:40:16+00:00\",\"description\":\"L\u00e4s om nyckelaspekterna f\u00f6r PostgreSQL-replikering, inklusive deras f\u00f6rdelar, element, typer och strategier f\u00f6r s\u00f6ml\u00f6sa datas\u00e4kerhetskopior.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#breadcrumb\"},\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/se\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL\",\"item\":\"https:\/\/kinsta.com\/se\/topics\/postgresql\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Replikering av PostgreSQL: En omfattande guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/se\/#website\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/se\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"sv-SE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/se\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstasweden\/\",\"https:\/\/x.com\/kinsta_se\",\"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\/se\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Replikering av PostgreSQL: En omfattande guide","description":"L\u00e4s om nyckelaspekterna f\u00f6r PostgreSQL-replikering, inklusive deras f\u00f6rdelar, element, typer och strategier f\u00f6r s\u00f6ml\u00f6sa datas\u00e4kerhetskopior.","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\/se\/blog\/postgresql-replikering\/","og_locale":"sv_SE","og_type":"article","og_title":"Replikering av PostgreSQL: En omfattande guide","og_description":"L\u00e4s om nyckelaspekterna f\u00f6r PostgreSQL-replikering, inklusive deras f\u00f6rdelar, element, typer och strategier f\u00f6r s\u00f6ml\u00f6sa datas\u00e4kerhetskopior.","og_url":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstasweden\/","article_published_time":"2023-01-24T06:30:16+00:00","article_modified_time":"2023-09-21T09:40:16+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"L\u00e4s om nyckelaspekterna f\u00f6r PostgreSQL-replikering, inklusive deras f\u00f6rdelar, element, typer och strategier f\u00f6r s\u00f6ml\u00f6sa datas\u00e4kerhetskopior.","twitter_image":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png","twitter_creator":"@salmanravoof","twitter_site":"@kinsta_se","twitter_misc":{"Skriven av":"Salman Ravoof","Ber\u00e4knad l\u00e4stid":"20 minuter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Replikering av PostgreSQL: En omfattande guide","datePublished":"2023-01-24T06:30:16+00:00","dateModified":"2023-09-21T09:40:16+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/"},"wordCount":4961,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png","keywords":["database","databases","development","PostgreSQL"],"inLanguage":"sv-SE","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/","url":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/","name":"Replikering av PostgreSQL: En omfattande guide","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png","datePublished":"2023-01-24T06:30:16+00:00","dateModified":"2023-09-21T09:40:16+00:00","description":"L\u00e4s om nyckelaspekterna f\u00f6r PostgreSQL-replikering, inklusive deras f\u00f6rdelar, element, typer och strategier f\u00f6r s\u00f6ml\u00f6sa datas\u00e4kerhetskopior.","breadcrumb":{"@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#breadcrumb"},"inLanguage":"sv-SE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/"]}]},{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#primaryimage","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/postgresql-replication.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/se\/blog\/postgresql-replikering\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/se\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL","item":"https:\/\/kinsta.com\/se\/topics\/postgresql\/"},{"@type":"ListItem","position":3,"name":"Replikering av PostgreSQL: En omfattande guide"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/se\/#website","url":"https:\/\/kinsta.com\/se\/","name":"Kinsta\u00ae","description":"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar","publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/se\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"sv-SE"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/se\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/se\/","logo":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstasweden\/","https:\/\/x.com\/kinsta_se","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\/se\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/49242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/comments?post=49242"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/49242\/revisions"}],"predecessor-version":[{"id":49404,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/49242\/revisions\/49404"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/nl"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/jp"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/translations\/dk"},{"href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/49242\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media\/49243"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media?parent=49242"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/tags?post=49242"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/topic?post=49242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}