Škálovatelnost je vlastnost systému zvládat rostoucí množství požadavků přidáváním zdrojů. Důvody tohoto množství požadavků mohou být dočasné, například pokud spouštíte slevu na výprodej, nebo trvalé pro nárůst zákazníků nebo zaměstnanců. V každém případě byste měli být schopni přidávat nebo odebírat zdroje pro řízení těchto změn podle požadavků nebo nárůstu provozu.
K dispozici jsou různé přístupy ke škálování databáze. V tomto blogu se podíváme na to, co tyto přístupy jsou a jak škálovat vaši PostgreSQL databázi pomocí Connection Poolers a Load Balancers.
Horizontální a vertikální měřítko
Existují dva hlavní způsoby škálování databáze.
- Horizontální měřítko (scale-out):Provádí se přidáním více databázových uzlů vytvořením nebo zvýšením databázového clusteru. Může vám pomoci zlepšit výkon čtení a vyrovnat provoz mezi uzly.
- Vertikální měřítko (scale-up):Provádí se přidáním dalších hardwarových prostředků (CPU, Paměť, Disk) do existujícího databázového uzlu. Může být potřeba změnit nějaký konfigurační parametr, aby PostgreSQL umožnil používat nový nebo lepší hardwarový prostředek.
Poolery připojení a nástroje pro vyrovnávání zatížení
V horizontálním i vertikálním škálování může být užitečné přidat externí nástroj ke snížení zatížení databáze, což zlepší výkon. Možná to nestačí, ale je to dobrý výchozí bod. Za tímto účelem je vhodné implementovat sdružovač připojení a vyrovnávání zatížení. Řekl jsem „a“, protože jsou navrženy pro různé role.
Sdružování připojení je metoda vytváření fondu připojení a jejich opětovného použití, aby se zabránilo neustálému otevírání nových připojení k databázi, což výrazně zvýší výkon vašich aplikací. PgBouncer je populární sdružovač připojení navržený pro PostgreSQL.
Použití nástroje pro vyrovnávání zatížení je způsob, jak mít v topologii databáze vysokou dostupnost, a je také užitečné zvýšit výkon vyvážením provozu mezi dostupnými uzly. Za tímto účelem je HAProxy dobrou volbou pro PostgreSQL, protože je to open-source proxy, kterou lze použít k implementaci vysoké dostupnosti, vyvažování zátěže a proxy pro aplikace založené na TCP a HTTP.
Jak implementovat kombinaci HAProxy, PgBouncer a PostgreSQL
Kombinace obou technologií, HAProxy a PgBouncer, je pravděpodobně nejlepší způsob, jak škálovat a zlepšit výkon ve vašem prostředí PostgreSQL. Takže uvidíme, jak to implementovat pomocí následující architektury:
Předpokládáme, že máte nainstalovaný ClusterControl, pokud ne, můžete přejít na oficiální stránky, nebo se dokonce podívejte na oficiální dokumentaci k instalaci.
Nejprve musíte nasadit svůj PostgreSQL cluster s HAProxy před ním. Za tímto účelem postupujte podle kroků v tomto příspěvku na blogu a nasaďte PostgreSQL i HAProxy pomocí ClusterControl.
V tuto chvíli budete mít něco takového:
Nyní můžete nainstalovat PgBouncer na každý databázový uzel nebo na externí počítač .
Pro získání softwaru PgBouncer můžete přejít do sekce stahování PgBouncer nebo použít úložiště RPM nebo DEB. V tomto příkladu použijeme CentOS 8 a nainstalujeme jej z oficiálního úložiště PostgreSQL.
Nejprve si stáhněte a nainstalujte odpovídající úložiště z webu PostgreSQL (pokud jej ještě nemáte):
$ wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ rpm -Uvh pgdg-redhat-repo-latest.noarch.rpm
Potom nainstalujte balíček PgBouncer:
$ yum install pgbouncer
Po dokončení budete mít nový konfigurační soubor umístěný v /etc/pgbouncer/pgbouncer.ini. Jako výchozí konfigurační soubor můžete použít následující příklad:
$ cat /etc/pgbouncer/pgbouncer.ini
[databases]
world = host=127.0.0.1 port=5432 dbname=world
[pgbouncer]
logfile = /var/log/pgbouncer/pgbouncer.log
pidfile = /var/run/pgbouncer/pgbouncer.pid
listen_addr = *
listen_port = 6432
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
admin_users = admindb
A ověřovací soubor:
$ cat /etc/pgbouncer/userlist.txt
"admindb" "root123"
Toto je pouze základní příklad. Chcete-li získat všechny dostupné parametry, můžete se podívat na oficiální dokumentaci.
Takže v tomto případě jsem nainstaloval PgBouncer do stejného databázového uzlu, naslouchá všem IP adresám a připojuje se k databázi PostgreSQL s názvem „world“. Také spravuji povolené uživatele v souboru userlist.txt pomocí hesla ve formátu prostého textu, které lze v případě potřeby zašifrovat.
Pro spuštění služby PgBouncer stačí spustit následující příkaz:
$ pgbouncer -d /etc/pgbouncer/pgbouncer.ini
Nyní spusťte následující příkaz pomocí místních informací (port, hostitel, uživatelské jméno a název databáze), abyste získali přístup k databázi PostgreSQL:
$ psql -p 6432 -h 127.0.0.1 -U admindb world
Password for user admindb:
psql (12.4)
Type "help" for help.
world=#
Toto je základní topologie. Můžete to vylepšit, například přidáním dvou nebo více uzlů load balanceru, abyste se vyhnuli jedinému bodu selhání, a použitím nějakého nástroje jako „Keepalived“, abyste zajistili dostupnost. Lze to provést také pomocí ClusterControl.
Další informace o PgBouncer a jeho použití naleznete v tomto příspěvku na blogu.
Závěr
Pokud potřebujete škálovat svůj PostgreSQL cluster, přidání HAProxy a PgBouncer je dobrý způsob, jak škálovat a škálovat současně, protože můžete přidat další aktivní pohotovostní uzly pro vyvážení provozu a zlepšíte výkon opětovným použitím otevřených připojení.
ClusterControl poskytuje celou řadu funkcí, od monitorování, upozornění, automatického převzetí služeb při selhání, zálohování, obnovení v určitém okamžiku, ověření zálohy až po škálování přečtených replik. To vám může pomoci škálovat vaši PostgreSQL databázi horizontálním nebo vertikálním způsobem z přátelského a intuitivního uživatelského rozhraní.