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.
Az Azure Database for PostgreSQL szolgáltatásának rugalmas fürtjei a PostgreSQL-hez készült nyílt forráskódú Citus-bővítmény részeként felügyelt ajánlatok, amelyek lehetővé teszik a PostgreSQL horizontális feldarabolását.
Bár a Citus csak egy bővítmény, több PostgreSQL-példányt is összekapcsol. Ha egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldányt helyez üzembe a Citussal, az egyetlen erőforrásként több PostgreSQL-példány kezelését és konfigurációját kezeli. Emellett automatikusan beállítja a csomópontokat, és ismerteti őket a Citus-bővítménysel.
A szolgáltatás rugalmas fürtöi két horizontális skálázási modellt kínálnak: soralapú skálázást és sémaalapú horizontális skálázást. Ha többet szeretne megtudni, tekintse meg a horizontális skálázási modellek nyílt forráskódú dokumentációját.
Architektúra
A rugalmas fürtök egy vagy több rugalmas Azure Database for PostgreSQL-kiszolgálópéldányból állnak. Ezek a példányok automatikusan ismertetik egymást, és egy Citus-fürt létrehozásához kapcsolódnak egymáshoz. A csomópontoknak ugyanahhoz a számítási és tárolási szinthez kell tartozniuk, és egységesen fel- vagy leskálázhatók magasabb vagy alacsonyabb szintekre.
A rugalmas fürtök rugalmas kiszolgálók (úgynevezett csomópontok) példányait használják a "megosztott semmi" architektúra egymással való összehangolásához. Az architektúra lehetővé teszi az adatbázis skálázását is, ha további csomópontokat ad hozzá a fürthöz.
Ha az 5432-s port használatával csatlakozik a fürthöz, a kijelölt koordinátor csomóponton lesz. A rugalmas fürtök lehetővé teszik a kapcsolatok terheléselosztását a fürtön belül egy ötös tétel hash módszerrel, ha a 7432-s porton keresztül csatlakozik. A 7432 használatával továbbra is a koordinátorként kijelölt csomóponton landolt. Bizonyos fürtszintű műveletek, például a táblák elosztása esetén előfordulhat, hogy az 5432-s porton keresztül kell csatlakoznia. Határozottan javasoljuk, hogy mindig csatlakozzon az 5432-s porton, amikor alkalmazásséma-frissítéseket és hasonló módosításokat tervez végrehajtani. Ha rugalmas fürtökön engedélyezi a PgBouncert, a 8432-es port használatával egyensúlyozhatja a kapcsolatokat a PgBouncer-példányok között minden csomóponton (vagy használhatja a 6432-es portot a kijelölt koordinátor számára).
A Cosmos DB for PostgreSQL-hez hasonlóan a csomópontcímek nem lesznek külsőleg elérhetővé téve. Ha például pg_dist_nodea Citus metaadattábláit tekinti meg, akkor azt tapasztalhatja, hogy az összes csomópont azonos IP-címmel rendelkezik, mint a példában, 10.7.0.254 de különböző portszámokat.
select nodeid, nodename, nodeport from pg_dist_node;
nodeid | nodename | nodeport
--------+------------+----------
1 | 10.7.0.254 | 7000
2 | 10.7.0.254 | 7001
(2 rows)
Az Azure infrastruktúrájában ezek a csomópontok különböző virtuális gépeken élnek, annak ellenére, hogy úgy tűnhet, hogy ugyanazon a gépen különböző portok.
A Citusról a hivatalos nyílt forráskódú projektdokumentációban olvashat bővebben.
Alapértelmezés szerint a Citus használatával létrehozott táblák és sémák nem lesznek automatikusan elosztva a fürt között. El kell döntenie egy skálázási modellt, és vagy el kell osztania a sémákat, vagy el kell döntenie, hogy soralapú horizontális skálázással osztja el a táblaadatokat.
Az elosztott táblákon lévő lekérdezések esetében a lekérdezett csomópont vagy egyetlen csomóponthoz irányítja, vagy több csomóponton párhuzamosítja. A döntés attól függ, hogy a szükséges adatok egyetlen csomóponton vagy több csomóponton találhatók-e. Sémaalapú horizontális skálázás esetén a koordinátor közvetlenül a sémát futtató csomópontra irányítja a lekérdezéseket. A sémaalapú skálázás és a soralapú horizontális skálázás esetén a csomópont a metaadattáblák megtekintésével dönti el, hogy mi a teendő. Ezek a táblák nyomon követik a csomópontok helyét és állapotát, valamint az adatok csomópontok közötti elosztását.
Miután az adatok el vannak terjesztve az egyik szegmensmodell használatával, bármelyik csomóponthoz csatlakozhat a DML (Adatmódosítási nyelv) műveletek végrehajtásához (SELECT, UPDATE, INSERT, DELETE). Minden csomópont tartalmazza a lekérdezéshez szükséges adatok megkereséséhez szükséges metaadatokat, és képes beszerezni a lekérdezés megválaszolásához.
A DDL (Data Definition Language) és a fürtszintű műveletek jelenleg a koordinátori szerepkört tartalmazó csomópontra korlátozódnak. Győződjön meg arról, hogy DDL- és fürtszintű műveleteket hajt végre úgy, hogy a 7432-s port helyett az 5432-s porthoz csatlakozik.
A rugalmas fürtöket új csomópontok hozzáadásával és az adatok újraegyensúlyozásával skálázhatja fel. Az újraegyensúlyozás egy online művelet, és nem blokkolja a futó számítási feladatokat.
Szilánkok
Az előző szakasz azt ismertette, hogy az elosztott táblák hogyan tárolódnak szegmensekként a feldolgozó csomópontokon. Ez a szakasz további technikai részleteket tárgyal ezekről a szegmensekről.
A pg_dist_shard metaadattábla egy sort tartalmaz a rendszer egyes elosztott tábláinak egyes szegmenseihez. A sor megfelel egy szegmensazonosítónak (shardid) egy kivonattérben (shardminvalue, shardmaxvalue).
SELECT * from pg_dist_shard;
logicalrelid | shardid | shardstorage | shardminvalue | shardmaxvalue
---------------+---------+--------------+---------------+---------------
github_events | 102026 | t | 268435456 | 402653183
github_events | 102027 | t | 402653184 | 536870911
github_events | 102028 | t | 536870912 | 671088639
github_events | 102029 | t | 671088640 | 805306367
(4 rows)
Ha a csomópont meg szeretné határozni, hogy melyik szegmens tartalmaz egy sort github_events, kivonatot ad a sor terjesztési oszlopának értékéről. Ezután a csomópont ellenőrzi, hogy melyik szegmens tartománya tartalmazza a kivonatolt értéket. A tartományok úgy vannak definiálva, hogy a kivonatfüggvény képe a különálló egyesítésük legyen.
Szegmenselhelyezések
Tegyük fel, hogy a szegmens 102027 a szóban forgó sorhoz van társítva. A sor egy, az egyik feldolgozóban hívott github_events_102027 táblában olvasható vagy írható. A metaadattáblákban tárolt információk alapján a bővítmény határozza meg, hogy mi az adott feldolgozó. A szegmensek munkavégzőhöz való leképezését szegmenselhelyezésnek nevezzük.
A csomópont a lekérdezéseket olyan töredékekre írja át, amelyek az adott táblákra hivatkoznak, például github_events_102027 a megfelelő feldolgozókon futtatják ezeket a töredékeket. Íme egy példa egy olyan lekérdezésre, amely a színfalak mögött fut, és megkeresi a szegmenst tároló csomópontot 102027 azonosítóval.
SELECT
shardid,
node.nodename,
node.nodeport
FROM pg_dist_placement placement
JOIN pg_dist_node node
ON placement.groupid = node.groupid
AND node.noderole = 'primary'::noderole
WHERE shardid = 102027;
┌─────────┬───────────┬──────────┐
│ shardid │ nodename │ nodeport │
├─────────┼───────────┼──────────┤
│ 102027 │ localhost │ 5433 │
└─────────┴───────────┴──────────┘