Replikace je sdílení transakčních dat mezi více servery pro zajištění konzistence mezi redundantními databázovými uzly. Master bude přijímat vložky nebo aktualizace a aplikovat je na svou datovou sadu, zatímco podřízené jednotky budou měnit svá data v souladu se změnami provedenými v hlavní datové sadě. Master se běžně označuje jako primární a zaznamenává provedené změny do protokolu WAL (Write Ahead Log). Na druhou stranu, podřízené jsou označovány jako sekundární a replikují svá data z REDO logů - v tomto případě WAL.
V PostgreSQL existují alespoň 3 replikační přístupy:
Builtin Replication nebo Streaming Replication.
V tomto přístupu jsou data replikována z primárního uzlu do sekundárního uzlu. Přichází však s řadou překážek, kterými jsou:
- Potíže se zaváděním nového sekundárního programu. Bude to vyžadovat, abyste replikovali celý stav, což může být náročné na zdroje.
- Nedostatek vestavěného monitorování a převzetí služeb při selhání. Sekundární musí být povýšen na primární v případě selhání druhého. Tato propagace může často vést k nekonzistenci dat během nepřítomnosti primárního zástupce.
Rekonstrukce z WAL
Tento přístup nějak využívá přístup streamingové replikace, protože sekundární soubory jsou rekonstruovány ze zálohy vytvořené primárním. Primární provádí úplnou zálohu databáze po každém dni kromě přírůstkové zálohy každých 60 sekund. Výhodou tohoto přístupu je, že primárnímu zdroji není vystavena žádná další zátěž, dokud sekundární součásti nejsou dostatečně blízko k primárnímu zdroji, takže začnou vysílat protokol WAL (Write Ahead Log), aby jej dohnaly. S tímto přístupem můžete přidávat nebo odebírat repliky, aniž byste ovlivnili výkon vaší PostgreSQL databáze.
Volume Level Replication for PostgreSQL (Disk Mirroring)
Toto je obecný přístup, který se nevztahuje pouze na PostgreSQL, ale také na všechny relační databáze. Využijeme Distributed Replicated Block Device (DRBD), distribuovaný replikovaný úložný systém pro Linux. Má fungovat zrcadlením obsahu uloženého v úložišti jednoho serveru do druhého. Jednoduchá ilustrace struktury je uvedena níže.
DRBD lze považovat za abstrakci od diskového zařízení, které hostí databázi PostgreSQL, ale operační systém se nikdy nedozví, že se jeho data nacházejí také na jiném serveru. Pomocí tohoto přístupu můžete nejen sdílet data, ale také souborový systém na více než 1 server. Zápisy do DRBD jsou proto distribuovány mezi všechny servery, přičemž každý server bude zapisovat informace na místní fyzický pevný disk (blokové zařízení). Když je operace zápisu aplikována na primární, je poté zaznamenána na DRBD a poté distribuována na sekundární servery DRBD. Na druhou stranu, pokud sekundární přijme operace zápisu prostřednictvím DRBD, jsou pak zapsány na místní fyzické zařízení. V případě podpory převzetí služeb při selhání poskytuje DRBD vysokou dostupnost dat, protože informace jsou sdíleny mezi primárním a mnoha sekundárními uzly, které jsou synchronně řazeny na úrovni bloku.
Konfigurace DRBD by vyžadovala další zdroj známý jako Heartbeat, o kterém pojednáme v jiném článku, aby se zlepšila podpora automatického převzetí služeb při selhání. Balíček v podstatě spravuje rozhraní na více serverech a automaticky konfiguruje jeden ze sekundárních serverů na primární v případě selhání.
Instalace a konfigurace DRBD
Preferovanou metodou při instalaci DRBD je použití předem sestavených binárních instalačních balíčků. Ujistěte se, že verze balíčků odpovídá aktuálnímu aktivnímu jádru.
Konfigurační soubory pro všechny uzly, které jsou primární nebo sekundární, by měly být identické. Pokud je pro vás nutné upgradovat verzi jádra, ujistěte se, že je pro vaši novou verzi jádra k dispozici odpovídající modul kernel-module-drdb.
Nastavení DRBD pro primární uzel
Toto je první krok, kdy budete muset vytvořit blokové zařízení DRBD a souborový systém, pomocí kterého můžete ukládat svá data. Konfigurační soubor lze nalézt na /etc/drbd.conf. Soubor definuje řadu parametrů pro konfiguraci DRBD, které zahrnují:velikosti bloků, definici bezpečnostních informací zařízení DRBD, která chcete vytvořit, a frekvenci aktualizací. Konfigurace mohou být omezeny tak, aby byly globální nebo svázané s určitým zdrojem. Jedná se o následující kroky:
-
Rychlost synchronizace, která definuje rychlost, jakou jsou zařízení synchronně propojena na pozadí po výměně disku, selhání nebo počátečním nastavení. To lze nastavit úpravou parametru rate v synchronizačním bloku:
syncer{ rate 15M }
-
Nastavení autentizace pro zajištění toho, že se do skupiny uzlů DRBD mohou připojit pouze hostitelé se stejným sdíleným tajným klíčem. Heslo je mechanismus výměny hash podporovaný v DRBD.
cram-hmac-alg “sha1” shared-secret “hash-password-string”
-
Konfigurace informací o hostiteli. Informace o uzlu, jako je hostitel, lze nalézt v souboru drbd.conf každého z uzlů. Některé z parametrů, které je třeba nakonfigurovat, jsou:
- Adresa:IP adresa a číslo portu hostitele, který drží zařízení DRBD.
- Zařízení:Cesta zařízení logického bloku vytvořeného DRBD.
- Disk:Označuje blokové zařízení ukládající data.
- Meta-disk:Ukládá metadata zařízení DRBD. Jeho velikost může být až 128 MB. Můžete jej nastavit jako interní disk, takže DRBD používá fyzické blokové zařízení k ukládání těchto informací do posledních částí disku.
Jednoduchá konfigurace pro primární:
on drbd-one { device /dev/drbd0; disk /dev/sdd1; address 192.168.103.40:8080; meta-disk internal; }
Konfigurace se musí zopakovat se sekundárními servery s IP adresou odpovídající příslušnému hostiteli.
on drbd-two { device /dev/drbd0; disk /dev/sdd1; address 192.168.103.41:8080; meta-disk internal; }
-
Vytvoření metadat pro zařízení pomocí tohoto příkazu:
Tento proces je povinný před spuštěním primárního uzlu.$ drbdadm create create-md all
- Spusťte DRBD pomocí tohoto příkazu:
To umožňuje DRBD spouštět, inicializovat a vytvářet zařízení definovaná DRBD.$ /etc/init.d/drbd start
- Označte nové zařízení jako primární a inicializujte zařízení pomocí tohoto příkazu:
Vytvořte souborový systém na blokovém zařízení, aby bylo možné použít standardní blokové zařízení vytvořené pomocí DRBD.$ drbdadm -- --overwrite-data-of-peer primary all
- Připravte primární připojení k použití připojením systému souborů. Tyto příkazy by jej měly připravit:
$ mkdir /mnt/drbd $ mount /dev/drbd0 /mnt/drbd $ echo “DRBD Device” > /mnt/drbd/example_file
Nastavení DRBD pro sekundární uzel
Můžete použít stejné kroky výše, s výjimkou vytvoření systému souborů na sekundárním uzlu, protože informace jsou automaticky přenášeny z primárního uzlu.
-
Zkopírujte soubor /etc/drbd.conf z primárního uzlu do sekundárního uzlu. Tento soubor obsahuje potřebné informace a konfiguraci.
-
Na základním diskovém zařízení vytvořte metadata DRBD pomocí příkazu:
$ drbdadm create-md all
-
Spusťte DRBD příkazem:
DRBD začne kopírovat data z primárního uzlu do sekundárního uzlu a čas závisí na velikosti přenášených dat. Pokud si prohlédnete soubor /proc/drbd, můžete vidět průběh.$ /etc/init.d/drbd start
$ 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
-
Monitorujte synchronizaci pomocí příkazu watch v určitých intervalech
$ watch -n 10 ‘cat /proc/drbd‘
Správa instalace DRBD
Ke sledování stavu zařízení DRBD používáme /proc/drbd.
Stav všech lokálních zařízení můžete nastavit jako primární pomocí příkazu
$ drbdadm primary all
Udělejte z primárního zařízení sekundární
$ drbdadm secondary all
Chcete-li odpojit uzly DRBD
$ drbdadm disconnect all
Znovu připojte uzly DRBD
$ drbd connect all
Stáhněte si Whitepaper Today Správa a automatizace PostgreSQL s ClusterControlZjistěte, co potřebujete vědět k nasazení, monitorování, správě a škálování PostgreSQLStáhněte si Whitepaper Konfigurace PostgreSQL pro DRBD
To zahrnuje výběr zařízení, pro které bude PostgreSQL ukládat data. Pro novou instalaci můžete zvolit instalaci PostgreSQL zcela na zařízení DRBD nebo datový adresář, který se má nacházet v novém systému souborů a musí být v primárním uzlu. Důvodem je, že primární uzel je jediný, kterému je povoleno připojit souborový systém zařízení DRBD jako čtení/zápis. Datové soubory Postgresu jsou často archivovány v /var/lib/pgsql, zatímco konfigurační soubory jsou uloženy v /etc/sysconfig/pgsql.
Nastavení PostgreSQL pro použití nového zařízení DRBD
-
Pokud máte nějaké spuštěné PostgreSQL, zastavte je tímto příkazem:
$ /etc/init.d/postgresql -9.0
-
Aktualizujte zařízení DRBD pomocí konfiguračních souborů pomocí příkazů:
$ mkdir /mnt/drbd/pgsql/sysconfig $ cp /etc/sysconfig/pgsql/* /mnt/drbd/pgsql/sysconfig
-
Aktualizujte DRBD s datovým adresářem PostgreSQL a systémovými soubory pomocí:
$ cp -pR /var/lib/pgsql /mnt/drbd/pgsql/data
-
Vytvořte symbolický odkaz na nový konfigurační adresář v systému souborů zařízení DRBD z /etc/sysconfig/pgsql pomocí příkazu:
$ ln -s /mnt/drbd/pgsql/sysconfig /etc/sysconfig/pgsql
-
Odeberte adresář /var/lib/pgsql, odpojte /mnt/drbd/pgsql a připojte zařízení drbd do /var/lib/pgsql.
-
Spusťte PostgreSQL příkazem:
$ /etc/init.d/postgresql -9.0 start
Data PostgreSQL by nyní měla být přítomna v systému souborů běžícím na vašem zařízení DRBD pod nakonfigurovaným zařízením. Obsah databází je také zkopírován do sekundárního uzlu DRBD, ale nelze k němu získat přístup, protože zařízení DRBD pracující v sekundárním uzlu může chybět.
Důležité funkce s přístupem DRBD
- Parametry ladění jsou vysoce přizpůsobitelné.
- Stávající nasazení lze snadno konfigurovat pomocí DRBD bez ztráty dat.
- Požadavky na čtení jsou stejně vyvážené
- Sdílené tajné ověřování zajišťuje konfiguraci a její data.