Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A rugalmas Azure Database for PostgreSQL-kiszolgálópéldányok a következő logikai adatkinyerési és replikációs módszereket támogatják:
Logikai replikáció
- A PostgreSQL natív logikai replikációja adatobjektumok replikálásához. A logikai replikáció lehetővé teszi az adatreplikáció, például a táblaszintű adatreplikáció finomhangolt szabályozását.
- Pglogical extension használata, amely logikai streamelési replikációt és további képességeket biztosít, például az adatbázis kezdeti sémájának másolását, a TRUNCATE támogatását, a DDL replikálásának képességét stb.
Logikai dekódolás, amely az írási napló (WAL) tartalmának dekódolásával valósul meg.
Logikai replikáció és logikai dekódolás összehasonlítása
A logikai replikáció és a logikai dekódolás számos hasonlósággal rendelkezik. Mindkettő:
Lehetővé teszi az adatok postgresből való replikálását.
Használja az előre írt naplót (WAL) a módosítások forrásaként.
Logikai replikációs pontok használata adatok küldéséhez. A pontok a változások adatfolyamát jelölik.
A tábla REPLICA IDENTITY tulajdonságával meghatározhatja, hogy milyen módosítások küldhetők el.
Ne replikálja a DDL-módosításokat.
A két technológia különbségeket mutat:
Logikai replikáció:
- Lehetővé teszi a replikálni kívánt tábla vagy táblakészlet megadását.
Logikai dekódolás:
- Kinyeri az adatbázis összes táblájában lévő módosításokat.
A logikai replikáció és a logikai dekódolás előfeltételei
Nyissa meg a kiszolgálóparaméterek lapját a portálon.
Állítsa be a kiszolgálóparamétert
wal_levela következőrelogical: .Ha pglogicális bővítményt szeretne használni, keressen rá a
shared_preload_libraries, ésazure.extensionsa paraméterekre, és válasszonpglogicala legördülő listából.Frissítse
max_worker_processesa paraméter értékét legalább 16-ra. Ellenkező esetben olyan problémák merülhetnek fel, mint aWARNING: out of background worker slots.Mentse a módosításokat, és indítsa újra a kiszolgálót a módosítások alkalmazásához.
Ellenőrizze, hogy a rugalmas Azure Database for PostgreSQL-kiszolgálópéldány engedélyezi-e a hálózati forgalmat a csatlakozó erőforrásból.
Adjon meg rendszergazdai felhasználói replikációs engedélyeket.
ALTER ROLE <adminname> WITH REPLICATION;Érdemes lehet meggyőződni arról, hogy a használt szerepkör rendelkezik jogosultságokkal a replikált sémán. Ellenkező esetben előfordulhat, hogy olyan hibákba ütközik, mint a
Permission denied for schema.
Feljegyzés
A replikációs felhasználót mindig érdemes elkülöníteni a normál rendszergazdai fióktól.
Logikai replikáció és logikai dekódolás használata
A natív logikai replikáció használata a legegyszerűbb módja az adatok replikálásának a rugalmas Azure Database for PostgreSQL-kiszolgálópéldányból. A módosítások felhasználásához használhatja az SQL-felületet vagy a streamelési protokollt. Az SQL-felülettel logikai dekódolással is felhasználhatja a módosításokat.
Natív logikai replikáció
A logikai replikáció a "közzétevő" és az "előfizető" kifejezést használja.
- A közzétevő az Azure Database for PostgreSQL rugalmas kiszolgálópéldány-adatbázis, amelyről adatokat küld.
- Az előfizető az Azure Database for PostgreSQL rugalmas kiszolgálópéldány-adatbázis, amelybe adatokat küld.
Íme néhány mintakód, a logikai replikáció kipróbálásához.
Csatlakozzon a közzétevő adatbázisához. Hozzon létre egy táblát, és adjon hozzá néhány adatot.
CREATE TABLE basic (id INTEGER NOT NULL PRIMARY KEY, a TEXT); INSERT INTO basic VALUES (1, 'apple'); INSERT INTO basic VALUES (2, 'banana');Hozzon létre egy kiadványt a táblához.
CREATE PUBLICATION pub FOR TABLE basic;Csatlakozzon az előfizetői adatbázishoz. Hozzon létre egy táblát ugyanazzal a sémával, mint a közzétevőn.
CREATE TABLE basic (id INTEGER NOT NULL PRIMARY KEY, a TEXT);Hozzon létre egy előfizetést, amely csatlakozik a korábban létrehozott kiadványhoz.
CREATE SUBSCRIPTION sub CONNECTION 'host=<server>.postgres.database.azure.com user=<rep_user> dbname=<dbname> password=<password>' PUBLICATION pub;Most már lekérdezheti a táblát az előfizetőn. Láthatja, hogy adatokat kapott a közzétevőtől.
SELECT * FROM basic;További sorokat adhat hozzá a közzétevő táblához, és megtekintheti az előfizető módosításait.
Ha nem látja az adatokat, váltson egy olyan felhasználóra, aki tagja a
azure_pg_adminszerepkörnek, és ellenőrizze a tábla tartalmát.
A logikai replikációval kapcsolatos további információkért tekintse meg a PostgreSQL dokumentációját.
Logikai replikáció használata ugyanazon a kiszolgálón található adatbázisok között
Amikor logikai replikációt szeretne beállítani az ugyanazon rugalmas Azure Database for PostgreSQL-kiszolgálópéldányon található különböző adatbázisok között, alapvető fontosságú, hogy konkrét irányelveket kövessen a jelenleg érvényben lévő implementációs korlátozások elkerülése érdekében. Egy olyan előfizetés létrehozása, amely ugyanahhoz az adatbázisfürthöz csatlakozik, csak akkor lesz sikeres, ha a replikációs pont nem ugyanabban a parancsban jön létre; ellenkező esetben a CREATE SUBSCRIPTION hívás lefagy egy várakozási LibPQWalReceiverReceive eseményen. Ez a Postgres motoron belüli meglévő korlátozás miatt következik be, amely a későbbi kiadásokban el lesz távolítva.
Ha hatékonyan szeretne logikai replikációt beállítani a "forrás" és a "cél" adatbázis között ugyanazon a kiszolgálón, miközben megkerüli ezt a korlátozást, kövesse az alábbi lépéseket:
Először hozzon létre egy "basic" nevű táblát, amely a forrás- és céladatbázisokban is azonos sémával rendelkezik:
-- Run this on both source and target databases
CREATE TABLE basic (id INTEGER NOT NULL PRIMARY KEY, a TEXT);
Ezután a forrásadatbázisban hozzon létre egy kiadványt a táblához, és külön hozzon létre egy logikai replikációs pontot a pg_create_logical_replication_slot függvény használatával, amely segít elhárítani a függő problémát, amely általában akkor fordul elő, ha a pont ugyanabban a parancsban jön létre, mint az előfizetés. A beépülő modult kell használnia pgoutput :
-- Run this on the source database
CREATE PUBLICATION pub FOR TABLE basic;
SELECT pg_create_logical_replication_slot('myslot', 'pgoutput');
Ezt követően hozzon létre egy előfizetést a céladatbázisban a korábban létrehozott kiadványhoz. Biztosítsa, hogy create_slotfalse értékre legyen állítva, hogy megakadályozza az Azure Database for PostgreSQL rugalmas kiszolgálópéldány esetében egy új slot létrejöttét. Helyesen adja meg az előző lépésben létrehozott slot nevét. A parancs futtatása előtt cserélje le a kapcsolati sztring helyőrzőit a tényleges adatbázis-hitelesítő adatokra:
-- Run this on the target database
CREATE SUBSCRIPTION sub
CONNECTION 'dbname=<source dbname> host=<server>.postgres.database.azure.com port=5432 user=<rep_user> password=<password>'
PUBLICATION pub
WITH (create_slot = false, slot_name='myslot');
A logikai replikáció beállítása után tesztelheti azt úgy, hogy beszúr egy új rekordot a forrásadatbázis "alapszintű" táblájába, majd ellenőrzi, hogy replikálja-e a céladatbázisba:
-- Run this on the source database
INSERT INTO basic SELECT 3, 'mango';
-- Run this on the target database
TABLE basic;
Ha minden megfelelően van konfigurálva, a céladatbázis forrásadatbázisából származó új rekordnak kell megjelennie, megerősítve a logikai replikáció sikeres beállítását.
pglogical extension
Íme egy példa a pglogical konfigurálására a szolgáltatói adatbázis-kiszolgálón és az előfizetőnél. További részletekért tekintse meg a pglogical extension dokumentációját . Győződjön meg arról is, hogy elvégezte a fent felsorolt előfeltétel-feladatokat.
Telepítse a pglogical bővítményt az adatbázisba mind a szolgáltató, mind az előfizető adatbázis-kiszolgálókon.
\c myDB CREATE EXTENSION pglogical;Ha a replikációs felhasználó nem a kiszolgálófelügyeleti felhasználó (aki létrehozta a kiszolgálót), győződjön meg arról, hogy a felhasználónak szerepköri
azure_pg_admintagságot ad, és replikációs és BEJELENTKEZÉSI attribútumokat rendel a felhasználóhoz. Részletekért tekintse meg a pglogical dokumentációt .GRANT azure_pg_admin to myUser; ALTER ROLE myUser REPLICATION LOGIN;A szolgáltatói (forrás/közzétevő) adatbázis-kiszolgálón hozza létre a szolgáltató csomópontot.
select pglogical.create_node( node_name := 'provider1', dsn := ' host=myProviderServer.postgres.database.azure.com port=5432 dbname=myDB user=myUser password=<password>');Replikációs csoport létrehozása.
select pglogical.create_replication_set('myreplicationset');Adja hozzá az adatbázis összes táblát a replikációs csoporthoz.
SELECT pglogical.replication_set_add_all_tables('myreplicationset', '{public}'::text[]);Alternatív módszerként táblákat is hozzáadhat egy adott sémából (például testUser) egy alapértelmezett replikációs csoporthoz.
SELECT pglogical.replication_set_add_all_tables('default', ARRAY['testUser']);Az előfizetői adatbázis-kiszolgálón hozzon létre egy előfizetői csomópontot.
select pglogical.create_node( node_name := 'subscriber1', dsn := ' host=mySubscriberServer.postgres.database.azure.com port=5432 dbname=myDB user=myUser password=<password>' );Hozzon létre egy előfizetést a szinkronizálás és a replikációs folyamat elindításához.
select pglogical.create_subscription ( subscription_name := 'subscription1', replication_sets := array['myreplicationset'], provider_dsn := 'host=myProviderServer.postgres.database.azure.com port=5432 dbname=myDB user=myUser password=<password>');Ezután ellenőrizheti az előfizetés állapotát.
SELECT subscription_name, status FROM pglogical.show_subscription_status();
Figyelemfelhívás
A Pglogical jelenleg nem támogatja az automatikus DDL-replikációt. A kezdeti séma manuálisan másolható pg_dump --schema-only használatával. A DDL-utasítások a pglogical.replicate_ddl_command függvénnyel egyidejűleg végrehajthatók a szolgáltatón és az előfizetőn. Vegye figyelembe az itt felsorolt bővítmény egyéb korlátozásait.
Logikai dekódolás
A logikai dekódolás a streamelési protokollon vagy az SQL-interfészen keresztül használható.
Streamelési protokoll
A módosítások streamelési protokoll használatával történő használata gyakran előnyösebb. Létrehozhat saját fogyasztót/ összekötőt, vagy használhat egy külső szolgáltatást, például a Debeziumot.
A wal2json dokumentációjában talál egy példát a streamelési protokoll pg_recvlogical használatával.
SQL-felület
Az alábbi példában az SQL-felületet a wal2json beépülő modullal használjuk.
Hozzon létre egy pontot.
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');SQL-parancsok kiadása. Példa:
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';Használja fel a módosításokat.
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');A kimenet a következőképpen fog kinézni:
{ "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"] } } ] }Ha végzett a használattal, dobja el a pontot.
SELECT pg_drop_replication_slot('test_slot');
A logikai dekódolással kapcsolatos további információkért tekintse meg a PostgreSQL dokumentációját.
Kijelző
Figyelnie kell a logikai dekódolást. A nem használt replikációs pontot el kell dobni. A pontok a változások beolvasásáig a Postgres WAL-naplókat és a vonatkozó rendszerkatalógusokat tartják. Ha az előfizető vagy a fogyasztó meghibásodik, vagy helytelenül van konfigurálva, a nem megadott naplók halmozódnak fel, és kitöltik a tárterületet. Emellett a nem megadott naplók növelik a tranzakcióazonosító körbefuttatásának kockázatát. Mindkét esetben előfordulhat, hogy a kiszolgáló elérhetetlenné válik. Ezért a logikai replikációs tárolóhelyeket folyamatosan kell használni. Ha a logikai replikációs pont már nincs használatban, azonnal dobja el.
A nézet "aktív" oszlopa pg_replication_slots azt jelzi, hogy van-e fogyasztó csatlakoztatva egy ponthoz.
SELECT * FROM pg_replication_slots;
Riasztásokat állíthat be a maximálisan használt tranzakcióazonosítókról és a felhasznált tárterület-metrikákról , hogy értesítést küldhessenek, ha az értékek túllépik a normál küszöbértékeket.
Korlátozások
Az itt dokumentált logikai replikációs korlátozások érvényesek.
Tárolóhelyek és HA-feladatátvétel – Ha az Azure Database for PostgreSQL magas rendelkezésre állású (HA) kiszolgálóit használja, vegye figyelembe, hogy a logikai replikációs slotok nem őrződnek meg feladatátvételi események során. A logikai replikációs pontok fenntartásához és a feladatátvétel utáni adatkonzisztenciához ajánlott a PG Feladatátvevő pontok bővítmény használata. A bővítmény engedélyezésével kapcsolatos további információkért tekintse meg a dokumentációt.
Fontos
Ha a megfelelő előfizető már nem létezik, el kell dobnia a logikai replikációs pontot az elsődleges kiszolgálón. Ellenkező esetben a WAL-fájlok az elsődleges helyen halmozódnak fel, feltöltve a tárterületet. Az elsődleges kiszolgáló automatikusan írásvédett üzemmódra vált, ha a tárterület kihasználtsága eléri a 95%-ot, vagy ha a rendelkezésre álló kapacitás kisebb, mint 5 GiB. Tegyük fel, hogy a tárolási küszöbérték túllép egy bizonyos korlátot, és a logikai replikációs pont nincs használatban (nem elérhető előfizető miatt), ebben az esetben a rugalmas Azure Database for PostgreSQL-kiszolgálópéldány automatikusan elveti a nem használt logikai replikációs pontot. Ez a művelet felszabadítja a halmozott WAL-fájlokat, és megakadályozza, hogy a kiszolgáló elérhetetlenné váljon a tároló betöltődött állapota miatt.