PgBouncer je odlehčený fond připojení pro PostgreSQL. PgBouncer 1.7 byl oznámen 18. prosince 2015. V tomto příspěvku na blogu budeme hovořit o hlavních nových vylepšeních v PgBouncer.
Nejbarevnější funkce
- PgBouncer 1.7 podporuje připojení TLS a myslím, že toto je největší vylepšení nového vydání. Jako backend implementaci této funkce použili knihovny OpenSSL/LibreSSL.
- PgBouncer nyní podporuje ověření prostřednictvím klientského certifikátu TLS .
Pojďme se ponořit do podrobností o nastavení TLS PgBouncer. Existuje 14 konfiguračních parametrů souvisejících s nastavením TLS (strana klienta + nastavení na straně serveru).
Pro přiřazení režimu TLS, který se má použít pro připojení od klientů, bychom měli nastavit client_tls_sslmode parametr. Připojení TLS jsou ve výchozím nastavení zakázána. Pokud je povoleno, client_tls_key_file a client_tls_cert_file musí být také nakonfigurován pro nastavení klíče a certifikátu, který PgBouncer používá k přijímání klientských připojení.
K ověření klientských certifikátů můžeme přiřadit kořenový certifikát nastavením client_tls_ca_file parametr, výchozí hodnota není nastavena.
Můžeme určit, které verze protokolu TLS jsou povoleny, nastavením client_tls_protocols parametr, výchozí je all.
Pro podrobnější nastavení na straně klienta můžete zkontrolovat client_tls_ciphers , client_tls_ecdhcurve a client_tls_dheparams parametry.
Nyní si promluvme o konfiguračních parametrech na straně serveru TLS. Nejprve musíme deklarovat režim TLS, který se má použít pro připojení k serverům PostgreSQL pomocí server_tls_sslmode parametr. Připojení TLS jsou ve výchozím nastavení zakázána. Serveru CA můžeme přiřadit server_tls_ca_file parametr. Pokud bychom chtěli přiřadit soukromý klíč pro PgBouncer k ověření proti PostgreSQL serveru, můžeme použít server_tls_key_file můžeme dokonce přiřadit certifikát pro soukromý klíč, který PostgreSQL server může ověřit pomocí server_tls_cert_file parametr. Stejně jako v nastavení připojení TLS na straně klienta můžeme pomocí server_tls_protocols deklarovat, které verze protokolu TLS jsou povoleny parametr.
- Po podpoře TLS je další významnou novou funkcí podpora ověřování „peer“ na soketech Unix.
- Jako poslední hlavní rys této verze bych rád zmínil podporu souboru řízení přístupu založeného na hostiteli, jako je pg_hba.conf v Postgresu. To umožňuje konfigurovat TLS pro síťová připojení a ověřování „peer“ pro místní připojení.
Můžeme nakonfigurovat způsob ověřování uživatelů pomocí auth_type parametr PgBouncer. Všechny konfigurační parametry jsou definovány v konfiguračním souboru pgbouncer.ini. Podívejme se na podrobnosti auth_type parametr.
auth_type parametru lze přiřadit jednu ze 6 níže uvedených hodnot. Podívejme se na vysvětlení a použití těchto hodnot.
- hba : Pokud parametr auth_type nastavíme na hodnotu hba , měli bychom nastavit auth_hba_file parametr také pro zobrazení kterého pg_hba.conf soubor bude použit jako konfigurace. Tímto způsobem umožníme načtení skutečného typu autentizace ze souboru auth_hba_file. To znamená, že můžeme použít různé metody ověřování pro různé přístupové cesty. Například u verze 1.7 připojení přes soket Unix použijte metodu peer autentizace, zároveň připojení přes TCP musí používat TLS. Formát souboru HBA zatím nepodporuje všechny autentizační metody pg_hba.conf. Podporované metody jsou:důvěřovat, odmítat, md5, heslo, peer a cert.
- certifikát: Klient se musí připojit přes TLS spojení s platným klientským certifikátem. Uživatelské jméno je pak převzato z CommonName pole z certifikátu.
- md5: Použijte kontrolu hesla na základě MD5. auth_file (název souboru, ze kterého se mají načíst uživatelská jména a hesla ) mohou obsahovat hesla zašifrovaná MD5 i hesla ve formátu prostého textu. Toto je výchozí metoda ověřování.
- prostý : Heslo s čistým textem je odesíláno po drátě. Zastaralé.
- důvěra: Neprovádí se žádná autentizace. Uživatelské jméno musí stále existovat v auth_file .
- jakýkoli: Stejně jako metoda důvěry, ale zadané uživatelské jméno je ignorováno. Vyžaduje, aby byly všechny databáze nakonfigurovány pro přihlášení jako konkrétní uživatel. Databáze konzole navíc umožňuje každému uživateli přihlásit se jako správce.
Další lesklé funkce
V této verzi je vydáno více funkcí. Můžete navštívit stránku PgBouncer changelog nebo se podívat na seznam níže, kde najdete další vylepšení:
- Nastavte query_wait_timeout ve výchozím nastavení na 120 s. Tento parametr definuje maximální čas, který mohou dotazy strávit čekáním na provedení. Pokud během této doby není dotaz přiřazen k serveru, klient je odpojen. To se používá, aby se zabránilo nereagujícím serverům v získávání připojení. Pomáhá také, když je server mimo provoz nebo databáze z jakéhokoli důvodu odmítá připojení. Pokud je toto zakázáno, budou klienti řazeni do fronty donekonečna. Aktuální výchozí nastavení (0) způsobuje nekonečné řazení do fronty, což není užitečné. Pokud má klient ve verzi 1.7 nevyřízený dotaz a nebyl přiřazen k připojení k serveru, bude připojení klienta ve výchozím nastavení po 120 sekundách přerušeno.
- Zakažte server_reset_query_always ve výchozím stavu. Nyní se resetovací dotaz používá pouze ve fondech, které jsou v režimu relace.
- Zvyšte pkt_buf až 4096 bajtů. Zlepšuje výkon s TLS . Toto chování je pravděpodobně závislé na zatížení, ale mělo by být bezpečné, protože od verze 1.2 jsou paketové vyrovnávací paměti rozděleny z připojení a líně používány z fondu.
- Očekává se počet zřetězení podpory ReadyForQuery pakety. Tím se zabrání předčasnému uvolnění serveru. Opravy č. 52.
- Vylepšeno sbuf_loopcnt logika – soket je zaručen, že bude znovu zpracován, i když nedojde k žádné události ze soketu. Vyžadováno pro TLS protože má vlastní vyrovnávací paměť.
- Přizpůsobte systémové testy práci s moderním BSD a MacOS . (Eric Radman )
- Odstraňte crypt auth. Je zastaralý a není podporován PostgreSQL od 8.4 .
- Opravte prosté „–s-pečlivě“ configure option – bez argumentu byla porušena.
Co je PgBouncer?
PgBouncer je nástroj pro správu klientských připojení k databázi PostgreSQL. Stručně řečeno, udržuje fond připojení k serveru PostgreSQL a znovu používá tato existující připojení. I když to může být užitečné pro snížení režie připojení klienta, umožňuje to také omezit maximální počet otevřených připojení k databázovému serveru. Může být také použit pro tvarování provozu, jako je přesměrování připojení k jedné nebo více databázím na různé databázové servery. Kromě toho lze PgBouncer použít pro správu zabezpečení na úrovni uživatele a dokonce i na úrovni databáze.
PgBouncer si můžete stáhnout přes jejich stránku pro stahování a začít ho používat hned teď!
Pro více informací o PgBouncer se můžete podívat na můj předchozí blogový příspěvek o PgBouncer.
Příjemné čtení!