sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL Streaming vs Logická replikace – srovnání

Replikace informací uložených ve vaší databázi je nezbytná pro distribuci dat a zajištění zálohy, kterou lze použít pro obnovu po havárii pro případ, že by se něco pokazilo.

Replikace PostgreSQL přichází ve dvou formách a obě mají svá specifická použití. Pochopení toho, jak použít jednu nebo obě tyto metody replikace dat, může zefektivnit vaše procesy distribuce dat. Poslední věc, kterou chcete, je ztratit zásadní práci, kterou jste na databázi vykonali.

Pojďme se podívat na klady, zápory a případy použití streamovací replikace a logiky v PostgreSQL.

Definování replikace dat v PostgreSQL

Pokud jste již obeznámeni s tím, co je replikace dat, můžete pokračovat a posunout se dolů k další části. Ale v případě, že jste v databázovém inženýrství nováčkem, chceme základ položit opravdu rychle.

Jak název napovídá, replikace je proces častého kopírování dat z jedné databáze na počítačovém serveru do jiné databáze na jiném serveru, takže všichni uživatelé mají přístup ke stejné úrovni informací. Ve výpočetní technice se replikace používá k odstranění chyb v digitálním systému.

Replikace odstraňuje datová sila, chrání cenné informace a zefektivňuje vývoj.

V PostgreSQL jsou dvě možnosti replikace:logická a streamingová replikace. Tyto metody jsou skvělé pro různé případy použití a jako vývojář možná zjistíte, že budete více používat jednu přes druhou. Je však dobré porozumět tomu, jak používat obojí, abyste se mohli rozhodnout, který použít v různých scénářích.

Logická replikace v PostgreSQL


Byla zavedena streamovaná replikace pro použití s ​​PostgreSQL v10.0. Logická replikace funguje tak, že kopíruje/replikuje datové objekty a jejich změny na základě jejich replikační identity.

V mnoha případech je primárním klíčem identita dat. V PostgreSQL poskytuje uživatelům podrobnou kontrolu nad replikovanými daty a zabezpečením informací.

Termín logická se používá k odlišení od fyzické replikace, která využívá replikaci bajt po bajtu a přesné adresy bloků. Přečtěte si více v oficiální dokumentaci PostgreSQL zde.

Prostřednictvím modelu publikování a odběru funguje tak, že umožňuje jednomu nebo více odběratelům přihlásit se k odběru jedné nebo více publikací v uzlu vydavatele. Předplatitelé mohou čerpat informace z publikací a znovu publikovat data pro kaskádovou replikaci nebo složitější konfiguraci.

Logická replikace dat může mít také podobu transakční replikace. Pokud chce technik zkopírovat tabulku, může použít tuto metodu replikace k pořízení snímku dat na straně vydavatele a odeslání do databáze předplatitele.

Jak předplatitelé provádějí změny v původních datech, databáze vydavatelů přijímá aktualizace v reálném čase. Aby byla zajištěna transakční konzistence v publikacích s jedním předplatným, musí předplatitel použít data ve stejném pořadí jako vydavatel.

Výhody logické replikace v PostgreSQL

Logická replikace umožňuje uživatelům používat cílový server pro zápisy a umožňuje vývojářům mít různé indexy a definice zabezpečení. To poskytuje zvýšenou flexibilitu pro přenos dat mezi vydavateli a předplatiteli.

Podpora více verzí

Navíc přichází s podporou různých verzí a lze jej nastavit mezi různými verzemi PostgreSQL. Poskytuje také filtrování založené na událostech. Publikace mohou mít několik předplatných, což usnadňuje sdílení dat v široké síti.

Minimální zatížení serveru

Ve srovnání s řešeními založenými na spouštěči má minimální zatížení serveru a zároveň poskytuje flexibilitu úložiště díky replikaci menších sad. Jak bylo uvedeno výše, logická replikace dat může dokonce kopírovat data obsažená v základních dělených tabulkách.

Je také důležité zmínit, že logická replikace dat umožňuje transformaci dat, i když jsou nastavována, a umožňuje paralelní streamování napříč vydavateli.

Nevýhody logické replikace v PostgreSQL

Logická replikace nebude kopírovat sekvence, velké objekty, materializované pohledy, kořenové tabulky oddílů a cizí tabulky.

V PostgreSQL je logická replikace dat podporována pouze operacemi DML. Vývojáři nemohou používat DDL ani ořezávat a schéma musí být definováno předem. Navíc nepodporuje vzájemnou (obousměrnou) replikaci.

Pokud uživatelé narazí na konflikty s omezeními replikovaných dat v tabulce, replikace se zastaví. Replikaci lze obnovit pouze tehdy, pokud je příčina konfliktu vyřešena.

Neúmyslný konflikt může zastavit dynamiku vašeho týmu, takže musíte pochopit, jak rychle vyřešit jakékoli problémy.

Pokud se konflikt rychle nevyřeší, replikační slot zamrzne ve svém aktuálním stavu, uzel vydavatele začne shromažďovat protokoly WAL (Write-Ahead Logs) a uzel nakonec dojde místo na disku.

Případy použití pro logickou replikaci v PostgreSQL

Mnoho techniků bude používat logickou replikaci pro:

  • Distribuce změn v rámci jedné databáze nebo podmnožiny databází odběratelům v reálném čase
  • Sloučení více databází do jedné centrální databáze (často pro analytické použití)
  • Vytváření replikací napříč různými verzemi PostgreSQL
  • Nasazení replikací mezi instancemi PostgreSQL na různých platformách, jako je Linux na Windows
  • Sdílení replikovaných dat s jinými uživateli nebo skupinami
  • Distribuce podmnožiny databáze mezi více databázemi

Streamování replikace v PostgreSQL


Byla zavedena streamovaná replikace pro použití s ​​PostgreSQL 9.0. Proces odesílá a aplikuje soubory WAL (Write-Ahead Logging) z hlavního nebo primárního databázového serveru do repliky nebo přijímající databáze. WAL se používají pro replikaci a pro zajištění integrity dat.

Jak funguje streamovaná replikace

Streamingová replikace funguje tak, že překlene mezeru mezi datovými přenosy, které jsou vlastní při odesílání protokolů založených na souborech, které čekají, dokud WAL nedosáhne maximální kapacity pro odesílání dat.

Streamováním záznamů WAL databázové servery streamují záznamy WAL po částech za účelem synchronizace dat. Pohotovostní server se připojí k replice a přijímá části WAL, jakmile jsou odesílány.

U streamingové replikace se uživatel musí rozhodnout, zda nastavit asynchronní nebo synchronní replikaci. Když je streamovaná replikace zpočátku nasazena, bude ve výchozím nastavení použita asynchronní replikace.

To znamená, že existuje zpoždění mezi počáteční změnou na primárním a odrazem této změny na replice. Asynchronizace otevírá dveře potenciální ztrátě dat, pokud se hlavní server zhroutí před zkopírováním změn nebo pokud replika není tak synchronizovaná s originálem, že již zahodila příslušná data a provedla změny.

Synchronní replikace je mnohem bezpečnější možností, protože provádí změny v reálném čase. Přenos z hlavního serveru do repliky je považován za neúplný, dokud oba servery neověří informace. Jakmile jsou změny dat potvrzeny, přenos je zaznamenán na WAL obou serverů.

Ať už používáte asynchronní nebo synchronní replikaci, repliky musí být připojeny k hlavnímu serveru prostřednictvím síťového připojení. Kromě toho je nezbytné, aby si uživatelé nastavili přístupová oprávnění pro streamy WAL repliky, aby informace nebyly ohroženy.

Výhody replikace streamování v PostgreSQL

Jednou z nejvýznamnějších výhod používání streamingové replikace je, že jediným způsobem, jak ztratit data, je selhání primárního i přijímajícího serveru ve stejnou dobu. Pokud předáváte důležité informace, streamingová replikace zaručuje, že kopie vaší práce bude uložena.

Uživatelé mohou k primárnímu serveru připojit více než jeden pohotovostní server a protokoly budou streamovány z primárního do každého z připojených pohotovostních režimů. Pokud se jedna z replik zpozdí nebo se odpojí, streamování bude pokračovat do ostatních replik.

Nastavení odesílání protokolů prostřednictvím streamované replikace nebude narušovat nic, co uživatel aktuálně spouští v primární databázi. Pokud je třeba vypnout primární datový server, počká, dokud nebudou aktualizované záznamy odeslány do repliky, a poté se vypne.

Nevýhody replikace streamování v PostgreSQL

Streamová replikace nezkopíruje informace do jiné verze nebo architektury, nezmění informace záložních serverů a nenabízí granulární replikaci.

Zejména při asynchronní replikaci datových proudů mohou být starší soubory WAL, které ještě nebyly zkopírovány do repliky, recyklovány, když uživatel provede změny na hlavním serveru. Aby se zajistilo, že se důležité soubory neztratí, může uživatel nastavit wal_keep_segments na vyšší hodnotu.

Bez nastavení přihlašovacích údajů pro ověření uživatele pro replikační servery může být snadné extrahovat citlivá data. Aby mezi hlavním serverem a replikou docházelo k aktualizacím v reálném čase, musí uživatel změnit metodu replikace z výchozí asynchronní replikace na synchronní replikaci.

Případy použití pro replikaci streamování v PostgreSQL

Mnoho techniků bude používat streamingovou replikaci pro:

  • Vytvoření zálohy primární databáze pro případ selhání serveru nebo ztráty dat
  • Podpora řešení s vysokou dostupností s co nejmenším zpožděním replikace
  • Vyřizování velkých dotazů, aby se uvolnilo určité zatížení primárního systému
  • Distribuce databázových úloh na několik počítačů, zejména pro formáty pouze pro čtení

Co je připraveno pro budoucnost?

Globální vývojová skupina PostgreSQL oznámila vydání PostgreSQL 14 30. září 2021. Nová verze přišla nabitá upgrady jak ve streamování, tak v logických replikacích prostřednictvím platformy.

Pro streamování replikace umožňuje verze 14 uživatelům:

  • Nastavte parametr serveru log_recovery_conflict_waits automaticky hlásit dlouhé čekací doby konfliktu obnovy
  • Pozastavení obnovy na serveru v aktivním pohotovostním režimu při změně parametrů na primárním serveru (místo okamžitého vypnutí pohotovostního režimu)
  • Použijte funkci pg_get_wal_replay_pause_state() podrobněji nahlásit stav obnovy
  • Zadejte parametr serveru pouze pro čtení in_hot_standby
  • Rychle zkraťte malé tabulky během obnovy na klastrech, které mají velký počet sdílených vyrovnávacích pamětí
  • Povolit synchronizaci systému souborů při zahájení obnovy po havárii prostřednictvím systému Linux
  • Použijte funkci pg_xact_commit_timestamp_origin() na zadanou transakci vrátit časové razítko potvrzení a počátek replikace
  • Použijte funkci pg_last_committed_xact() přidat počátek replikace do vráceného záznamu
  • Použijte standardní ovládací prvky oprávnění funkcí ke změně funkcí původu replikace (výchozí nastavení stále omezuje přístup na superuživatele)

Pro logickou replikaci umožňuje verze 14 uživatelům:

  • Streamujte dlouhé probíhající transakce předplatitelům pomocí rozhraní API logické replikace
  • Povolit více transakcí během replikací tabulek
  • Generujte okamžité dílčí transakce protokolu WAL a přidružení XID nejvyšší úrovně
  • Použijte funkci pg_create_logical_replication_slot() k vylepšení rozhraní API pro logické dekódování pro dvoufázové odevzdání
  • Přidejte zprávy o zrušení platnosti mezipaměti do WAL během dokončení příkazu, abyste umožnili logické streamování probíhajících transakcí
  • Ovládejte, které zprávy logického dekódování se odesílají do replikačního proudu
  • Pro rychlejší replikace použijte režim binárního přenosu
  • Filtrovat dekódování podle XID

PostgreSQL již pracuje na verzi 15, která má být vydána ve třetím čtvrtletí roku 2022. Jedním z problémů souvisejících s replikací, který je třeba řešit v nejnovější verzi, je zabránění použití proměnných zděděných ze serverového prostředí při streamování replikace. Ale jak se stále více uživatelů přizpůsobuje verzi 14, PostgreSQL pravděpodobně přidá další úkoly pro zlepšení replikačních funkcí.

Rychlé srovnání replikace PostgreSQL:Logická vs. streamovaná replikace

Logická replikace Streamování replikace
Model Vydavatel odběrateli Předloha na repliku
Transakční replikace Ano Ne
Mezery v replikaci Konflikt zastaví replikaci Asynchronní – může způsobit zpoždění mezi přenosem dat mezi primární a replikou; synchronní – data se ztratí pouze v případě, že se všechny připojené servery zhroutí současně
Replikace napříč různými platformami nebo verzemi PostgreSQL Ano Ne
Zabezpečení Přístup k datům je omezen na odběratele Musíte nastavit přístupové údaje, aby byla data v bezpečí
Velikost replikací Lepší pro podrobné replikace Lepší pro replikace ve velkém měřítku
Obzvláště užitečné pro Sloučení více systémů do jedné databáze Vytvoření záložní databáze

Závěr

Doufáme, že se vám tato příručka bude hodit při nastavování funkcí replikace. Pokud máte nějaké dotazy nebo byste chtěli vědět cokoli jiného o tom, jak vám ScaleGrid může pomoci s nasazením PostgreSQL, kontaktujte jednoho z našich mnoha odborníků na databáze.

Chcete se dozvědět více o ScaleGrid?

Chcete-li se dozvědět více o tom, jak vám ScaleGrid může pomoci spravovat vaše databáze, kontaktujte nás a my vám ukážeme vše, co naše DBaaS nabízí. Zjistěte více o tom, jak vám ScaleGrid umožní soustředit se více na vývoj vašeho produktu a méně na správu databází.


  1. Relační model

  2. Vyberte (načtěte) všechny záznamy z více schémat pomocí Postgres

  3. chyba mysql 1364 Pole nemá výchozí hodnoty

  4. Cizí klíč MySQL InnoDB mezi různými databázemi