Služby AWS PostgreSQL spadají pod zastřešení RDS, což je nabídka DaaS společnosti Amazon pro všechny známé databázové stroje.
Služby spravované databáze nabízejí určité výhody, které jsou přitažlivé pro zákazníky, kteří hledají nezávislost na údržbě infrastruktury, a vysoce dostupné konfigurace. Jako vždy neexistuje univerzální řešení. Aktuálně dostupné možnosti jsou zvýrazněny níže:
Aurora PostgreSQL
Stránka Amazon Aurora FAQ poskytuje důležité podrobnosti, které je třeba zvážit, než se ponoříte do produktu. Například se dozvídáme, že úložná vrstva je virtualizovaná a je umístěna na proprietárním virtualizovaném úložném systému zálohovaném SSD.
Cena
Pokud jde o ceny, je třeba poznamenat, že Aurora PostgreSQL není k dispozici v AWS Free Tier.
Kompatibilita
Stejná stránka FAQ objasňuje, že Amazon netvrdí 100% kompatibilitu s PostgreSQL. Většina (můj důraz) aplikací bude v pořádku, např. varianta AWS PostgreSQL je kabelově kompatibilní s PostgreSQL 9.6. Výsledkem je, že Wireshark PostgreSQL Dissector bude fungovat dobře.
Výkon
Výkon je také spojen s typem instance, například maximální počet připojení je ve výchozím nastavení nakonfigurován na základě velikosti instance.
Pokud jde o kompatibilitu, důležitá je také velikost stránky, která byla zachována na 8 kB, což je výchozí velikost stránky PostgreSQL. Když už mluvíme o stránkách, stojí za to citovat FAQ:„Na rozdíl od tradičních databázových strojů Amazon Aurora nikdy neposouvá upravené databázové stránky do úložné vrstvy, což vede k dalším úsporám spotřeby IO. To je možné, protože Amazon změnil způsob správy mezipaměti stránek, což umožňuje, aby zůstala v paměti v případě selhání databáze. Tato funkce také přináší výhody restartování databáze po havárii, což umožňuje obnovení mnohem rychleji než při tradičním způsobu přehrávání protokolů.
Podle výše uvedených častých dotazů poskytuje Aurora PostgreSQL třikrát vyšší výkon než PostgreSQL při operacích SELECT a UPDATE. Podle Bílé knihy PostgreSQL Benchmark společnosti Amazon byly nástroje použité k měření výkonu pgbench a sysbench. Pozoruhodná je závislost výkonu na typu instance, výběru regionu a výkonu sítě. Ptáte se, proč není zmíněno INSERT? Je to proto, že shoda s PostgreSQL ACID (dále jen „C“) vyžaduje, aby byl aktualizovaný záznam vytvořen pomocí odstranění následovaného vložením.
Aby bylo možné plně využít vylepšení výkonu, Amazon doporučuje, aby aplikace byly navrženy tak, aby interagovaly s databází pomocí velkého počtu souběžných dotazů a transakcí . Tento důležitý faktor je často přehlížen, což vede ke špatnému výkonu přičítanému implementaci.
Omezení
Při plánování migrace je třeba vzít v úvahu některá omezení:
-
huge_pages nelze upravit, ale ve výchozím nastavení je zapnuto:
template1=> select aurora_version(); aurora_version ---------------- 1.0.11 (1 row) template1=> show huge_pages ; huge_pages ------------ on (1 row)
- pg_hba nelze použít, protože vyžaduje restart serveru. Jako vedlejší poznámka, to musí být překlep v dokumentaci Amazonu, protože PostgreSQL je třeba pouze znovu načíst. Namísto spoléhání se na pg_hba budou muset administrátoři použít bezpečnostní skupiny AWS a PostgreSQL GRANT.
- Úroveň podrobnosti PITR je 5 minut.
- Replikace napříč oblastmi není aktuálně pro PostgreSQL dostupná.
- Maximální velikost tabulek je 64 TiB
- Až 15 přečtených replik
Škálovatelnost
Škálování nahoru a dolů instance databáze je v současné době ruční proces, který lze provést prostřednictvím konzoly AWS nebo CLI, ačkoli automatické škálování již funguje, ale podle FAQ Amazon Aurora bude dostupné pouze pro MySQL.
Výpočetní zdroje škálování protokolu událostíAby bylo možné horizontálně škálovat aplikace, musí využívat AWS SDK API, například k dosažení rychlého převzetí služeb při selhání.
Vysoká dostupnost
Když přejdeme k vysoké dostupnosti, v případě selhání primárního uzlu poskytuje Aurora PostgreSQL koncový bod clusteru jako záznam DNS A, který se automaticky interně aktualizuje, aby ukazoval na repliku vybranou jako hlavní.
Zálohy
Za zmínku stojí, že pokud je databáze smazána, veškeré snímky ruční zálohy budou zachovány, zatímco automatické snímky budou odstraněny.
Replikace
Protože repliky sdílejí stejné základní úložiště jako primární instance, zpoždění replikace je teoreticky v rozsahu milisekund.
Amazon doporučuje číst repliky, aby se zkrátila doba převzetí služeb při selhání. S načtenou replikou v pohotovostním režimu trvá proces převzetí služeb při selhání asi 30 sekund, zatímco bez repliky očekávejte až 15 minut.
Další dobrou zprávou je, že je podporována také logická replikace, jak je ukázáno na straně 22.
Ačkoli Amazon Aurora FAQ neposkytuje podrobnosti o replikaci jako u MySQL, Aurora PostgreSQL Best Practices poskytuje užitečný dotaz pro ověření stavu replikace:
select server_id, session_id, highest_lsn_rcvd,
cur_replay_latency_in_usec, now(), last_update_timestamp from
aurora_replica_status();
Výše uvedený dotaz dává:
-[ RECORD 1 ]--------------+-------------------------------------
server_id | testdb
session_id | 9e268c62-9392-11e8-87fc-a926fa8340fe
highest_lsn_rcvd | 46640889
cur_replay_latency_in_usec | 8830
now | 2018-07-29 20:14:55.434701-07
last_update_timestamp | 2018-07-29 20:14:54-07
-[ RECORD 2 ]--------------+-------------------------------------
server_id | testdb-us-east-1b
session_id | MASTER_SESSION_ID
highest_lsn_rcvd |
cur_replay_latency_in_usec |
now | 2018-07-29 20:14:55.434701-07
last_update_timestamp | 2018-07-29 20:14:55-07
Vzhledem k tomu, že replikace je tak důležité téma, stálo za to nastavit test pgbench, jak je nastíněno ve výše uvedené referenční bílé knize:
[[email protected] ~]$ whoami
ec2-user
[[email protected] ~]$ tail -n 2 .bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib
export PATH=$PATH:/usr/local/pgsql/bin/
[[email protected] ~]$ which pgbench
/usr/local/pgsql/bin/pgbench
[[email protected] ~]$ pgbench --version
pgbench (PostgreSQL) 9.6.8
Tip: Vyhněte se zbytečnému psaní vytvořením souboru pgpass a exportem proměnných hostitele, databáze a uživatelského prostředí, např.:
[[email protected] ~]# tail -n 3 ~/.bashrc export
PGUSER=dbadmin
export PGHOST=c1.cluster-ctfirtyhadgr.us-east-1.rds.amazonaws.com
export PGDATABASE=template1
[[email protected] ~]# cat ~/.pgpass
*:*:*:dbadmin:password
Spusťte příkaz pro inicializaci dat:
[[email protected] ~]$ pgbench -i --fillfactor=90 --scale=10000 postgres
Zatímco probíhá inicializace dat, zachyťte zpoždění replikace pomocí výše uvedeného SQL volaného z následujícího skriptu:
while : ; do
psql -t -q \
-c 'select server_id, session_id, highest_lsn_rcvd,
cur_replay_latency_in_usec, now(), last_update_timestamp
from aurora_replica_status();' postgres
sleep 1
done
Filtrování výstupu screenlogu pomocí následujícího příkazu:
[[email protected] ~]# awk -F '|' '{print $4,$5,$6}' screenlog.2 | sort -k1,1 -n | tail
513116 2018-07-30 04:30:44.394729+00 2018-07-30 04:30:43+00
529294 2018-07-30 04:20:54.261741+00 2018-07-30 04:20:53+00
544139 2018-07-30 04:41:57.538566+00 2018-07-30 04:41:57+00
1001902 2018-07-30 04:42:54.80136+00 2018-07-30 04:42:53+00
2376951 2018-07-30 04:38:06.621681+00 2018-07-30 04:38:06+00
2376951 2018-07-30 04:38:07.672919+00 2018-07-30 04:38:07+00
5365719 2018-07-30 04:36:51.608983+00 2018-07-30 04:36:50+00
5365719 2018-07-30 04:36:52.912731+00 2018-07-30 04:36:51+00
6308586 2018-07-30 04:45:22.951966+00 2018-07-30 04:45:21+00
8210986 2018-07-30 04:46:14.575385+00 2018-07-30 04:46:13+00
Ukázalo se, že replikace byla zpožděna až o 8 sekund!
V související poznámce, metrika AWS CloudWatch AuroraReplicaLagMaximum nesouhlasí s výsledky z výše uvedeného příkazu SQL. Rád bych věděl proč, takže zpětná vazba je velmi ceněná.
Graf zpoždění maximální repliky RDS CloudWatchZabezpečení
-
Šifrování je k dispozici a musí být povoleno při vytváření databáze, protože jej nelze později změnit.
Odstraňování problémů
Tato krátká část je důležitým kouskem Ujistěte se, že PostgreSQL work_mem je správně vyladěn, takže operace řazení nezapisují data na disk.
Nastavení
Postupujte podle průvodce nastavením v konzole AWS:
-
Otevřete Amazon RDS konzole pro správu.
Konzola pro správu RDS -
Vyberte Amazon Aurora a PostgreSQL vydání.
Průvodce Aurora PostgreSQL -
Zadejte podrobnosti DB a poznamenejte si omezení hesla Aurora PostgreSQL:
Podrobnosti o databázi průvodce Aurora PostgreSQLMaster Password must be at least eight characters long, as in "mypassword". Can be any printable ASCII character except "/", """, or "@".
-
Nakonfigurujte možnosti databáze:
- V době psaní tohoto článku je k dispozici pouze PostgreSQL 9.6. Pokud potřebujete podporu pro novější verze, včetně beta náhledů, použijte PostgreSQL na Amazon RDS.
-
Nakonfigurujte prioritu převzetí služeb při selhání a vyberte počet replik.
Popis fotografie -
Nastavte uchování zálohy (maximum je 35 dní).
Uchování záloh průvodce Aurora PostgreSQL -
Vyberte plán údržby. K dispozici jsou automatické upgrady menších verzí, je však důležité ověřit u podpory AWS, zda lze plán oprav urychlit v případě, že projekt PostgreSQL vydá nějaké naléhavé aktualizace. Například trvalo více než dva měsíce, než AWS prosadilo aktualizace 2018-05-10.
Plán údržby průvodce Aurora PostgreSQL -
Pokud byla databáze úspěšně vytvořena, zobrazí se odkaz na pokyny, jak se k ní připojit:
Nastavení průvodce Aurora PostgreSQL dokončeno
Připojování k databázi
Přečtěte si podrobné pokyny pro dostupné možnosti připojení na základě nastavení infrastruktury. V nejjednodušším scénáři se připojení provádí prostřednictvím veřejné instance EC2.
Poznámka:Klient musí být kompatibilní s PostgreSQL 9.6.3 nebo vyšší.
[[email protected] ~]# psql -U dbadmin -h c1.cluster-ctfirtyhadgr.us-east-1.rds.amazonaws.com template1
Password for user dbadmin:
psql (9.6.8, server 9.6.3)
SSL connection (protocol: TLSv1.2, cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
Monitorování
Amazon poskytuje různé metriky pro monitorování databáze, příklad níže ukazuje metriky instance:
Metriky instance RDSStáhněte si dokument Whitepaper Today PostgreSQL Management &Automation with ClusterControlZjistěte, co potřebujete vědět k nasazení, monitorování, spravovat a škálovat PostgreSQLStáhněte si dokument WhitepaperRDS pro PostgreSQL
Toto je nabídka umožňující větší granularitu, pokud jde o možnosti konfigurace. Například na rozdíl od Aurory, která používá proprietární úložný systém, nabízí RDS konfigurovatelné úložiště pomocí svazků EBS, které mohou být buď General Purpose SSD (GP2), nebo Provisioned IOPS, nebo magnetické (nedoporučuje se).
S cílem pomoci velkým instalacím, které vyžadují přizpůsobení, které není k dispozici v nabídce Aurora, Amazon nedávno vydal doporučení osvědčených postupů, která jsou k dispozici pouze pro RDS.
Vysoká dostupnost musí být nakonfigurována ručně (nebo automatizovaně pomocí některého ze známých nástrojů AWS) a doporučuje se nastavit nasazení Multi-AZ.
Replikace je implementována pomocí nativní replikace PostgreSQL.
Pro instance PostgreSQL DB existují určitá omezení, která je třeba vzít v úvahu.
S ohledem na výše uvedené poznámky zde uvádíme návod k nastavení prostředí RDS PostgreSQL Multi-AZ:
-
Z Konzoly pro správu RDS spusťte průvodce
Průvodce RDS PostgreSQL -
Vyberte si mezi produkčním a vývojovým nastavením.
Výběr případu použití databáze průvodce RDS PostgreSQL -
Zadejte podrobnosti o vašem novém databázovém clusteru.
Podrobnosti databáze průvodce RDS PostgreSQL Nastavení databáze průvodce RDS PostgreSQL -
Na další stránce nastavte plán sítě, zabezpečení a údržby:
Pokročilá nastavení průvodce RDS PostgreSQL Zabezpečení a údržba pomocí průvodce RDS PostgreSQL
Závěr
Služby Amazon RDS pro PostgreSQL zahrnují RDS PostgreSQL a Aurora PostgreSQL, obě jsou spravovanými nabídkami DaaS. Nabité spoustou funkcí a solidním backendovým úložištěm mají oproti tradičnímu nastavení určitá omezení, avšak při pečlivém plánování mohou tyto nabídky poskytnout dobře vyvážený poměr ceny a funkčnosti. Amazon RDS pro PostgreSQL je zaměřen na uživatele, kteří vyžadují více možností pro konfiguraci svých prostředí, a je obecně dražší. Většina uživatelů bude mít prospěch ze spuštění s Aurora PostgreSQL a propracování se do složitějších konfigurací.