Logické dekódování

PLATÍ PRO: Azure Database for PostgreSQL – Jednoúčelový server

Důležité

Jednoúčelový server Azure Database for PostgreSQL je na cestě vyřazení. Důrazně doporučujeme upgradovat na flexibilní server Azure Database for PostgreSQL. Další informace o migraci na flexibilní server Azure Database for PostgreSQL najdete v tématu Co se děje s jednoúčelovým serverem Azure Database for PostgreSQL?

Logické dekódování v PostgreSQL umožňuje streamovat změny dat do externích příjemců. Logické dekódování se často používá pro scénáře streamování událostí a zachytávání dat změn.

Logické dekódování používá výstupní modul plug-in k dopřednému protokolování (WAL) systému Postgres do čitelného formátu. Azure Database for PostgreSQL poskytuje výstupní moduly plug-in wal2json, test_decoding a pgoutput. Nástroj pgoutput je dostupný službou PostgreSQL z PostgreSQL verze 10 a novější.

Přehled toho, jak funguje logické dekódování Postgres, najdete na našem blogu.

Poznámka:

U jednoúčelového serveru Azure Database for PostgreSQL se nepodporuje logická replikace s využitím publikování a odběru PostgreSQL.

Nastavení serveru

Logické dekódování a repliky pro čtení jsou závislé na hlavičkovém protokolu Postgres (WAL) pro informace. Tyto dvě funkce vyžadují různé úrovně protokolování z Postgres. Logické dekódování vyžaduje vyšší úroveň protokolování než repliky pro čtení.

Ke konfiguraci správné úrovně protokolování použijte parametr podpory replikace Azure. Podpora replikace Azure má tři možnosti nastavení:

  • Vypnuto - Umístí nejmenší informace do WAL. Toto nastavení není k dispozici na většině serverů Azure Database for PostgreSQL.
  • Replika – více podrobných než Vypnuto. Toto je minimální úroveň protokolování potřebná k tomu, aby repliky pro čtení fungovaly . Toto nastavení je výchozí na většině serverů.
  • Logické – více podrobné než replika. Toto je minimální úroveň protokolování, aby logické dekódování fungovalo. V tomto nastavení fungují také repliky pro čtení.

Použití Azure CLI

  1. Nastavte azure.replication_support na logicalhodnotu .

    az postgres server configuration set --resource-group mygroup --server-name myserver --name azure.replication_support --value logical
    
  2. Restartujte server, aby se změna použila.

    az postgres server restart --resource-group mygroup --name myserver
    
  3. Pokud používáte Postgres 9.5 nebo 9.6 a používáte přístup k veřejné síti, přidejte pravidlo brány firewall pro zahrnutí veřejné IP adresy klienta, ze kterého spustíte logickou replikaci. Název pravidla brány firewall musí obsahovat _replrule. Například test_replrule. Pokud chcete na serveru vytvořit nové pravidlo brány firewall, spusťte příkaz az postgres server firewall-rule create .

Pomocí webu Azure Portal

  1. Nastavte podporu replikace Azure na logickou. Zvolte Uložit.

    Azure Database for PostgreSQL – Replikace – Podpora replikace Azure

  2. Výběrem možnosti Ano restartujte server, aby se změna použila.

    Azure Database for PostgreSQL – Replikace – Potvrzení restartování

  3. Pokud používáte Postgres 9.5 nebo 9.6 a používáte přístup k veřejné síti, přidejte pravidlo brány firewall pro zahrnutí veřejné IP adresy klienta, ze kterého spustíte logickou replikaci. Název pravidla brány firewall musí obsahovat _replrule. Například test_replrule. Pak vyberte Uložit.

    Azure Database for PostgreSQL – Replikace – Přidání pravidla brány firewall

Zahájení logického dekódování

Logické dekódování je možné využívat prostřednictvím protokolu streamování nebo rozhraní SQL. Obě metody používají sloty replikace. Slot představuje datový proud změn z jedné databáze.

Použití slotu replikace vyžaduje oprávnění replikace Postgres. V tuto chvíli je oprávnění replikace k dispozici pouze pro uživatele správce serveru.

Protokol streamování

Používání změn pomocí protokolu streamování je často vhodnější. Můžete vytvořit vlastní příjemce nebo konektor nebo použít nástroj, jako je Debezium.

Příklad použití protokolu streamování s pg_recvlogical najdete v dokumentaci wal2jsonu.

Rozhraní SQL

V následujícím příkladu používáme rozhraní SQL s modulem plug-in wal2json.

  1. Vytvořte slot.

    SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');
    
  2. Vydávat příkazy SQL Příklad:

    CREATE TABLE a_table (
       id varchar(40) NOT NULL,
       item varchar(40),
       PRIMARY KEY (id)
    );
    
    INSERT INTO a_table (id, item) VALUES ('id1', 'item1');
    DELETE FROM a_table WHERE id='id1';
    
  3. Spotřebovávejte změny.

    SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');
    

    Výstup bude vypadat takto:

    {
          "change": [
          ]
    }
    {
          "change": [
                   {
                            "kind": "insert",
                            "schema": "public",
                            "table": "a_table",
                            "columnnames": ["id", "item"],
                            "columntypes": ["character varying(40)", "character varying(40)"],
                            "columnvalues": ["id1", "item1"]
                   }
          ]
    }
    {
          "change": [
                   {
                            "kind": "delete",
                            "schema": "public",
                            "table": "a_table",
                            "oldkeys": {
                                  "keynames": ["id"],
                                  "keytypes": ["character varying(40)"],
                                  "keyvalues": ["id1"]
                            }
                   }
          ]
    }
    
  4. Jakmile slot dokončíte, zahoďte ho.

    SELECT pg_drop_replication_slot('test_slot'); 
    

Monitorovací sloty

Musíte monitorovat logické dekódování. Všechny nevyužité sloty replikace se musí vynechat. Sloty uchovávají protokoly Postgres WAL a relevantní systémové katalogy, dokud uživatel změny nepřečte. Pokud váš příjemce selže nebo nebyl správně nakonfigurovaný, budou se nepotřebné protokoly hromadit a vyplnit úložiště. Také nekonsumované protokoly zvyšují riziko zalamování ID transakce. Obě situace můžou způsobit nedostupnost serveru. Proto je důležité, aby se sloty logické replikace spotřebovávají nepřetržitě. Pokud se slot logické replikace už nepoužívá, okamžitě ho zahoďte.

Sloupec "aktivní" v zobrazení pg_replication_slots bude indikovat, jestli je uživatel připojený ke slotu.

SELECT * FROM pg_replication_slots;

Nastavte upozornění na využité úložiště a maximální prodlevu mezi metrikami replik, které vás upozorní, když hodnoty zvyšují prahové hodnoty za normální dobu.

Důležité

Musíte vynechat nepoužívané sloty replikace. Pokud to neuděláte, může to vést k nedostupnosti serveru.

Jak zahodit slot

Pokud slot replikace aktivně nepoužíváte, měli byste ho odstranit.

Vyřazení slotu replikace volaný test_slot pomocí SQL:

SELECT pg_drop_replication_slot('test_slot');

Důležité

Pokud přestanete používat logické dekódování, změňte azure.replication_support zpět na replica nebo off. Podrobnosti WAL, které logical si zachovají, jsou více podrobné a měly by být zakázány, pokud se nepoužívá logické dekódování.

Další kroky

  • Další informace o logickém dekódování najdete v dokumentaci k Postgres.
  • Pokud máte dotazy ohledně logického dekódování, spojte se s naším týmem .
  • Přečtěte si další informace o replikách pro čtení.