sql >> Database >  >> RDS >> PostgreSQL

Een overzicht van replicatie op volumeniveau voor PostgreSQL met DRBD

Replicatie is het delen van transactiegegevens over meerdere servers om consistentie tussen redundante databaseknooppunten te garanderen. Een master zal invoegingen of updates nemen en deze toepassen op zijn dataset, terwijl de slaves hun gegevens zullen wijzigen in overeenstemming met de wijzigingen die zijn aangebracht in de masterdataset. De master wordt gewoonlijk een primary genoemd en registreert de aangebrachte wijzigingen in een Write Ahead Log (WAL). Aan de andere kant worden slaven secundairen genoemd en repliceren ze hun gegevens uit de REDO-logboeken - in dit geval de WAL.

Er zijn minstens 3 replicatiebenaderingen in PostgreSQL:

Ingebouwde replicatie of streamingreplicatie.

In deze benadering worden gegevens gerepliceerd van het primaire knooppunt naar het secundaire knooppunt. Het gaat echter gepaard met een aantal tegenslagen, namelijk:

  • Moeilijkheden bij het introduceren van een nieuwe secundaire. Het vereist dat je de hele staat repliceert, wat veel middelen kan vergen.
  • Gebrek aan ingebouwde bewaking en failover. Een secundaire moet worden gepromoveerd tot een primaire in het geval van de laatste mislukking. Vaak kan deze promotie leiden tot inconsistentie in de gegevens tijdens de afwezigheid van de primaire.

Reconstructie van WAL

Deze benadering maakt op de een of andere manier gebruik van de streaming-replicatiebenadering, aangezien de secundairen worden gereconstrueerd op basis van een back-up die door de primaire is gemaakt. De primaire maakt na elke dag een volledige databaseback-up, naast een incrementele back-up voor elke 60 seconden. Het voordeel van deze benadering is dat de primaire niet extra wordt belast totdat de secundairen dicht genoeg bij de primaire zijn, zodat ze het Write Ahead Log (WAL) gaan streamen om het in te halen. Met deze aanpak kunt u replica's toevoegen of verwijderen zonder de prestaties van uw PostgreSQL-database te beïnvloeden.

Replicatie op volumeniveau voor PostgreSQL (Disk Mirroring)

Dit is een generieke aanpak die niet alleen van toepassing is op PostgreSQL, maar ook op alle relationele databases. We maken gebruik van Distributed Replicated Block Device (DRBD), een gedistribueerd gerepliceerd opslagsysteem voor Linux. Het is bedoeld om te werken door de inhoud die is opgeslagen in de opslag van de ene server naar de andere te spiegelen. Hieronder ziet u een eenvoudige illustratie van de structuur.

DRBD kan worden beschouwd als een abstractie van het schijfapparaat dat de PostgreSQL-database host, maar het besturingssysteem zal nooit weten dat de gegevens zich ook op een andere server bevinden. Met deze aanpak kunt u niet alleen de gegevens, maar ook het bestandssysteem delen met meer dan 1 server. Schrijfacties naar de DRBD worden daarom verdeeld over alle servers waarbij elke server informatie schrijft naar een lokale fysieke harde schijf (block device). Wanneer een schrijfbewerking wordt toegepast op de primaire, wordt deze daarna opgenomen in de DRBD en vervolgens gedistribueerd naar de secundaire DRBD-servers. Aan de andere kant, als de secundaire de schrijfbewerkingen via de DRBD ontvangt, worden ze vervolgens naar het lokale fysieke apparaat geschreven. In het geval van failover-ondersteuning, biedt de DRBD een hoge beschikbaarheid van gegevens, aangezien de informatie wordt gedeeld tussen een primaire en vele secundaire knooppunten die synchroon zijn uitgelijnd op blokniveau.

Voor de DRBD-configuratie is een extra bron nodig, de Heartbeat genaamd, die we in een ander artikel zullen bespreken, om de ondersteuning voor automatische failover te verbeteren. Het pakket beheert in feite de interface op de meerdere servers en configureert automatisch een van de secundaire servers als primair in geval van storing.

Installatie en configuratie van de DRBD

De voorkeursmethode bij het installeren van DRBD is het gebruik van de pre-build binaire installatiepakketten. Zorg ervoor dat de kernelversie van de pakketten overeenkomt met uw actieve huidige kernel.

De configuratiebestanden voor alle knooppunten die primair of secundair zijn, moeten identiek zijn. Als het nodig is om je kernelversie te upgraden, zorg er dan voor dat de corresponderende kernel-module-drdb beschikbaar is voor je nieuwe kernelversie.

DRBD-configuratie voor primair knooppunt

Dit is de eerste stap waarbij u een DRBD-blokapparaat en een bestandssysteem moet maken waarmee u uw gegevens kunt opslaan. Het configuratiebestand is te vinden op /etc/drbd.conf. Het bestand definieert een aantal parameters voor de DRBD-configuratie, waaronder:blokgroottes, definitie van beveiligingsinformatie van de DRBD-apparaten die u wilt maken en frequentie van updates. De configuraties kunnen worden beperkt tot globaal of gebonden aan een bepaalde bron. De betrokken stappen zijn:

  1. Synchronisatiesnelheid die de snelheid definieert waarmee apparaten synchroon op de achtergrond worden gekoppeld na een schijfvervanging, storing of initiële installatie. Dit kan worden ingesteld door de parameter rate in het syncerblok te bewerken:

    syncer{
    rate 15M
    }
  2. Verificatie-instellingen om ervoor te zorgen dat alleen hosts met hetzelfde gedeelde geheim lid kunnen worden van de DRBD-knooppuntgroep. Het wachtwoord is een hash-uitwisselingsmechanisme dat wordt ondersteund in de DRBD.

    cram-hmac-alg “sha1”
    shared-secret “hash-password-string”
  3. Hostinformatie configureren. De knooppuntinformatie, zoals de host, is te vinden in het drbd.conf-bestand van elk knooppunt. Enkele van de te configureren parameters zijn:

    • Adres:IP-adres en poortnummer van de host die het DRBD-apparaat bevat.
    • Apparaat:het pad van het logische blokapparaat gemaakt door de DRBD.
    • Schijf:het verwijst naar het blokapparaat dat de gegevens opslaat.
    • Meta-schijf:het slaat de metadata van het DRBD-apparaat op. De grootte kan oplopen tot 128 MB. Je kunt dit instellen als de interne schijf, zodat de DRBD een fysiek blokapparaat gebruikt om deze informatie op te slaan in de laatste secties van de schijf.

    Een eenvoudige configuratie voor de primaire:

    on drbd-one {
    device /dev/drbd0;
    disk /dev/sdd1;
    address 192.168.103.40:8080;
    meta-disk internal;
    }

    De configuratie moet worden herhaald met de secundairen met het IP-adres dat overeenkomt met de corresponderende host.

    on drbd-two {
    device /dev/drbd0;
    disk /dev/sdd1;
    address 192.168.103.41:8080;
    meta-disk internal;
    }
  4. De metadata voor de apparaten maken met deze opdracht:

    $ drbdadm create create-md all
    Dit proces is verplicht voordat u het primaire knooppunt start.
  5. Start de DRBD met dit commando:
    $ /etc/init.d/drbd start
    Hierdoor kan de DRBD de door DRBD gedefinieerde apparaten starten, initialiseren en maken.
  6. Markeer het nieuwe apparaat als primair en initialiseer het apparaat met deze opdracht:
    $ drbdadm -- --overwrite-data-of-peer primary all
    Maak een bestandssysteem op het blokapparaat om een ​​standaard blokapparaat gemaakt door de DRBD bruikbaar te maken.
  7. Maak de primary gebruiksklaar door het bestandssysteem te mounten. Dit commando zou het voor je moeten voorbereiden:
    $ mkdir /mnt/drbd
    $ mount /dev/drbd0 /mnt/drbd
    $ echo “DRBD Device” > /mnt/drbd/example_file

DRBD-configuratie voor het secundaire knooppunt

U kunt dezelfde stappen hierboven gebruiken, behalve voor het maken van het bestandssysteem op een secundair knooppunt, aangezien de informatie automatisch wordt overgedragen vanaf het primaire knooppunt.

  1. Kopieer het bestand /etc/drbd.conf van het primaire knooppunt naar het secundaire knooppunt. Dit bestand bevat de benodigde informatie en configuratie.

  2. Maak op het onderliggende schijfapparaat de DRBD-metadata aan met het commando:

    $ drbdadm create-md all
  3. Start de DRBD met het commando:

    $ /etc/init.d/drbd start
    DRBD begint met het kopiëren van gegevens van het primaire knooppunt naar het secundaire knooppunt en de tijd hangt af van de grootte van de gegevens die moeten worden overgedragen. Als u het bestand /proc/drbd bekijkt, kunt u de voortgang bekijken.
    $ cat /proc/drbd
    version: 8.0.0 (api:80/proto:80)
      SVN Revision: 2947 build by [email protected], 2018-08-24 16:43:05
       0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
           ns:252284 nr:0 dw:0 dr:257280 al:0 bm:15 lo:0 pe:7 ua:157 ap:0
           [==>.................] sync'ed: 12.3% (1845088/2097152)K
           finish: 0:06:06 speed: 4,972 (4,580) K/sec
           resync: used:1/31 hits:15901 misses:16 starving:0 dirty:0 changed:16
           act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
  4. Bewaak de synchronisatie met behulp van het horloge-commando op specifieke intervallen

    $ watch -n 10 ‘cat /proc/drbd‘

DRBD-installatiebeheer

Om de status van het DRBD-apparaat bij te houden, gebruiken we de /proc/drbd.

U kunt de status van alle lokale apparaten als primair instellen met het commando

$ drbdadm primary all

Maak een primair apparaat secundair

$ drbdadm secondary all

DRBD-knooppunten loskoppelen

$ drbdadm disconnect all

Verbind de DRBD-knooppunten opnieuw

$ drbd connect all
Download de whitepaper vandaag PostgreSQL-beheer en -automatisering met ClusterControlLees wat u moet weten om PostgreSQL te implementeren, bewaken, beheren en schalenDownload de whitepaper

PostgreSQL configureren voor DRBD

Dit omvat het selecteren van een apparaat waarvoor de PostgreSQL gegevens zal opslaan. Voor een nieuwe installatie kunt u ervoor kiezen om de PostgreSQL volledig op het DRBD-apparaat te installeren of een gegevensmap die zich op het nieuwe bestandssysteem moet bevinden en zich in het primaire knooppunt moet bevinden. Dit komt omdat het primaire knooppunt de enige is die een DRBD-apparaatbestandssysteem als lezen/schrijven mag koppelen. De Postgres-gegevensbestanden worden vaak gearchiveerd in /var/lib/pgsql, terwijl de configuratiebestanden worden opgeslagen in /etc/sysconfig/pgsql.

PostgreSQL instellen om het nieuwe DRBD-apparaat te gebruiken

  1. Als je PostgreSQL draait, stop ze dan met dit commando:

    $  /etc/init.d/postgresql -9.0
  2. Werk het DRBD-apparaat bij met de configuratiebestanden met behulp van de opdrachten:

    $ mkdir /mnt/drbd/pgsql/sysconfig
    $ cp /etc/sysconfig/pgsql/* /mnt/drbd/pgsql/sysconfig
  3. Werk de DRBD bij met PostgreSQL-gegevensdirectory en systeembestanden met:

    $ cp -pR /var/lib/pgsql /mnt/drbd/pgsql/data
  4. Maak een symbolische link naar de nieuwe configuratiemap op het DRBD-apparaatbestandssysteem vanuit /etc/sysconfig/pgsql met het commando:

    $ ln -s /mnt/drbd/pgsql/sysconfig  /etc/sysconfig/pgsql
  5. Verwijder de map /var/lib/pgsql, ontkoppel /mnt/drbd/pgsql en koppel het drbd-apparaat aan /var/lib/pgsql.

  6. Start de PostgreSQL met het commando:

    $ /etc/init.d/postgresql -9.0 start

De PostgreSQL-gegevens zouden nu aanwezig moeten zijn op het bestandssysteem dat op uw DRBD-apparaat wordt uitgevoerd onder het geconfigureerde apparaat. De inhoud van de databases wordt ook gekopieerd naar het secundaire DRBD-knooppunt, maar is niet toegankelijk omdat het DRBD-apparaat dat in het secundaire knooppunt werkt, mogelijk afwezig is.

Belangrijke kenmerken met de DRBD-aanpak

  • De afstemmingsparameters zijn in hoge mate aanpasbaar.
  • Bestaande implementaties kunnen eenvoudig worden geconfigureerd met DRBD zonder enig gegevensverlies.
  • Leesverzoeken zijn gelijk verdeeld
  • De gedeeld-geheime authenticatie beveiligt de configuratie en de bijbehorende gegevens.

  1. psycopg2 lekt geheugen na grote zoekopdracht

  2. hoe het type waarde in postgres te controleren

  3. SQL Server-databases verplaatsen naar de cloud

  4. Geef de dag, maand en jaar terug in MySQL