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

Sdružování připojení PostgreSQL:Část 3 – Pgpool-II

V našich předchozích příspěvcích v této sérii jsme diskutovali o případu sdružování připojení a představili PgBouncer. V tomto příspěvku budeme diskutovat o jeho nejoblíbenější alternativě – Pgpool-II.

Pgpool-II je švýcarský armádní nůž middlewaru PostgreSQL. Podporuje vysokou dostupnost, poskytuje automatické vyvažování zátěže a má inteligenci pro vyrovnávání zátěže mezi mastery a slave, takže zátěž při zápisu je vždy směrována na master, zatímco čtená zátěž je směrována na slave. Pgpool-II také poskytuje logickou replikaci. I když se jeho použití a význam snížily s tím, jak se zlepšily možnosti vestavěné replikace na straně serveru PostgreSQL, stále zůstává cennou možností pro starší verze PostgreSQL. Kromě toho také poskytuje sdružování připojení!

Na první pohled

Nastavení Pgpool-II

Chcete-li nastavit Pgpool-II, povolit služby fondu připojení, které potřebujete, a připojit se k serveru PostgreSQL, postupujte podle těchto kroků. Přečtěte si nyní

Jak to funguje

Podívejte se na architekturu Pgpool-II, která podporuje všechny její funkce, a zjistěte, jak funguje pooler připojení. Přečtěte si nyní

Co Pgpool-II nedělá?

Projděte si omezení Pgpool-II a zjistěte, zda je to ten správný fond připojení pro vaši aplikaci. Přečtěte si nyní

Nastavení Pgpool-II

Binární soubory Pgpool-II jsou distribuovány prostřednictvím repozitářů Pgpool-II – více o instalaci si můžete přečíst v tomto dokumentu nápovědy. Po instalaci musíme nakonfigurovat Pgpool-II, aby povolil služby, které chceme, a připojit se k serveru PostgreSQL. Více si o tom můžete přečíst zde.

Chcete-li získat minimální nastavení sdružování, musíte poskytnout následující:

  • Uživatelské jméno a heslo zašifrované md5 uživatele (uživatelů), kteří se připojí k Pgpool-II – musí být definováno v samostatném souboru, který lze snadno vygenerovat pomocí nástroje pg_md5.
  • Rozhraní/IP adresy a číslo portu pro naslouchání příchozím připojením – to musí být definováno v konfiguračním souboru.
  • Název hostitele backendového serveru (serverů) [Více než jeden server je určen pouze v případě, že chceme použít replikaci a/nebo vyvažování zátěže].
  • Služby, které chcete povolit. Ve výchozím nastavení je sdružování připojení zapnuto a ostatní služby jsou v konfiguračním souboru nainstalovaném s binárními soubory vypnuté.

A je to – jsme připraveni vyrazit! Zatímco konfigurace dostupné s Pgpool-II mohou být na první pohled skličující, lidé za Pgpool-II nám to opravdu usnadnili!

Jak to funguje

Pgpool-II má propracovanější architekturu než PgBouncer, aby podporoval všechny funkce, které má. V této části se však omezíme na popis toho, jak funguje sdružování připojení.

Rodičovský proces Pgpool-II standardně rozvětvuje 32 podřízených procesů – ty jsou k dispozici pro připojení. Architektura je podobná PostgreSQL serveru:jeden proces =jedno připojení. Také rozvětvuje „proces PCp“, který se používá pro administrativní úkoly a přesahuje rámec tohoto příspěvku. 32 dětí je nyní připraveno přijmout spojení. Stejně jako PgBouncer také emulují PostgreSQL server – klienti se mohou připojit přesně stejným připojovacím řetězcem jako k normálnímu PostgreSQL serveru.

Jádro směruje příchozí připojení k jednomu z podřízených procesů, které se zaregistrovaly jako posluchači. Ani hlavní proces Pgpool-II, ani koncoví uživatelé nemají žádnou kontrolu nad tím, který podřízený proces odpoví na příchozí požadavek. Požadavek si může vyzvednout každé nečinné dítě. Pokud nebudou nalezeni žádné nečinné potomky, požadavek na připojení bude zařazen do fronty na straně jádra – to může způsobit, že aplikace jako pgbench zamrznou a čekají na připojení klientů.

Jakmile nečinný potomek Pgpool-II obdrží požadavek na připojení:

  1. Zkontroluje uživatelské jméno v souboru s hesly. Pokud není nalezen, odmítne připojení.
  2. Pokud je uživatelské jméno nalezeno, zkontroluje poskytnuté heslo proti md5 hash uloženému v tomto souboru.
  3. Jakmile je ověření úspěšné, zkontroluje, zda již má pro tuto kombinaci databáze a uživatele připojení v mezipaměti.
  4. Pokud ano, vrátí připojení ke klientovi. Pokud ne, otevře se nové připojení.
  5. Všechny požadavky a odpovědi procházejí Pgpool-II, zatímco čeká na odpojení klienta.
  6. Jakmile se klient odpojí, Pgpool-II se musí rozhodnout, zda uložit připojení do mezipaměti:
    • Pokud má prázdný slot, uloží jej do mezipaměti.
    • Pokud nemá prázdný slot (to znamená, že ukládání tohoto připojení do mezipaměti by překročilo povolenou max_pool_size), rozhodne se na základě interního algoritmu.
  7. Pokud se rozhodne uložit připojení do mezipaměti, spustí předkonfigurovaný resetovací dotaz, aby vyčistil všechny podrobnosti relace a zajistil ji pro opětovné použití jiným klientem.
  8. Nyní může podřízený proces navázat další spojení.

Tip odborníka

Je důležité neustále sledovat stav vašeho hlavního a podřízeného serveru MySQL, abyste mohli odhalit potenciální problémy a podniknout nápravná opatření.

Co Pgpool-II nedělá?

Bohužel pro ty, kteří se zaměřují pouze na sdružování připojení, to, co Pgpool-II příliš nedělá, je sdružování připojení, zejména pro malý počet klientů. Protože každý podřízený proces má svůj vlastní fond a neexistuje způsob, jak ovládat, který klient se připojuje ke kterému podřízenému procesu, příliš mnoho je ponecháno na štěstí, pokud jde o opětovné použití připojení.

Jak můžete vidět, Pgpool a PgBouncer mají dost odlišné silné stránky – v našem posledním příspěvku seriálu provedeme přímé testování a srovnání funkcí! Zůstaňte naladěni!

PostgreSQL Connection Pooling Series

  • Část 1 – Klady a zápory
  • Část 2 – PgBouncer
  • Část 3 – Pgpool-II
  • Část 4 – PgBouncer vs. Pgpool-II


  1. ExecuteReader vyžaduje otevřené a dostupné připojení. Aktuální stav připojení je Připojování

  2. Přidejte týdny k datu v PostgreSQL

  3. Jak nainstalovat WordPress:Serverový software

  4. SQLite Kromě