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

Cloud Vendor Deep-Dive:PostgreSQL v Microsoft Azure

Pokud jste v poslední době sledovali Microsoft, nebude žádným překvapením, že do rozjetého vlaku PostgreSQL naskočil i poskytovatel konkurenčního databázového produktu, konkrétně SQL Server. Od vydání 60 000 patentů OIN až po platinový sponzor na PGCon, Microsoft jako jedna z organizací podporujících PostgreSQL. Využili jsme každé příležitosti k tomu, abychom ukázali, že nejen že můžete spustit PostgreSQL na Microsoftu, ale také opak je pravdou:Microsoft může prostřednictvím své cloudové nabídky spustit PostgreSQL za vás. Prohlášení bylo ještě jasnější s akvizicí Citus Data a vydáním jejich vlajkového produktu v Azure Cloud pod názvem Hyperscale. Dá se s jistotou říci, že přijetí PostgreSQL roste a nyní existuje ještě více dobrých důvodů, proč si jej vybrat.

Moje cesta cloudem Azure začala přímo na vstupní stránce, kde se setkávám s uchazeči:Jediný server a náhled (jinými slovy, bez smlouvy SLA) vydání Hyperscale (Citus). Tento blog se zaměří na ty první. Na této cestě jsem měl příležitost vyzkoušet si, o čem je open source – vracet se komunitě – v tomto případě poskytnutím zpětné vazby k dokumentaci, která – ke cti Microsoftu – to velmi usnadňuje tím, že zpětnou vazbu uvádí na pravou míru. do Github:

Kompatibilita PostgreSQL s Azure

Verze

Podle dokumentace k produktu Single Server cílí na verze PostgreSQL v hlavním rozsahu n-2:

Jako řešení vytvořené pro výkon se doporučuje Single Server pro datové sady 100 GB a větší. Servery poskytovaly předvídatelný výkon – instance databáze přicházejí s předdefinovaným počtem virtuálních jader a IOPS (na základě velikosti zřízeného úložiště).

Rozšíření

Existuje značný počet podporovaných rozšíření, přičemž některá z nich se instalují ihned po vybalení:

[email protected]:5432 postgres> select name, default_version, installed_version from pg_available_extensions where name !~ '^postgis' order by name;

            name             | default_version | installed_version

------------------------------+-----------------+-------------------

address_standardizer         | 2.4.3 |

address_standardizer_data_us | 2.4.3           |

btree_gin                    | 1.2 |

btree_gist                   | 1.5 |

chkpass                      | 1.0 |

citext                       | 1.4 |

cube                         | 1.2 |

dblink                       | 1.2 |

dict_int                     | 1.0 |

earthdistance                | 1.1 |

fuzzystrmatch                | 1.1 |

hstore                       | 1.4 |

hypopg                       | 1.1.1 |

intarray                     | 1.2 |

isn                          | 1.1 |

ltree                        | 1.1 |

orafce                       | 3.7 |

pg_buffercache               | 1.3 | 1.3

pg_partman                   | 2.6.3 |

pg_prewarm                   | 1.1 |

pg_qs                        | 1.1 |

pg_stat_statements           | 1.6 | 1.6

pg_trgm                      | 1.3 |

pg_wait_sampling             | 1.1 |

pgcrypto                     | 1.3 |

pgrouting                    | 2.5.2 |

pgrowlocks                   | 1.2 |

pgstattuple                  | 1.5 |

plpgsql                      | 1.0 | 1.0

plv8                         | 2.1.0 |

postgres_fdw                 | 1.0 |

tablefunc                    | 1.0 |

timescaledb                  | 1.1.1 |

unaccent                     | 1.1 |

uuid-ossp                    | 1.1 |

(35 rows)

Monitorování PostgreSQL v Azure

Monitorování serveru se opírá o sadu metrik, které lze úhledně seskupit a vytvořit tak vlastní řídicí panel:

Ti, kdo znají Graphviz nebo Blockdiag, pravděpodobně ocení možnost exportu celý řídicí panel do souboru JSON:

Další metriky mohou – a měly by – být propojeny s upozorněními:

Statistiky dotazů lze sledovat pomocí úložiště dotazů a vizualizovat pomocí výkonu dotazů Porozumění. K tomu bude potřeba povolit několik parametrů specifických pro Azure:

[email protected]:5432 postgres> select * from pg_settings where name ~ 'pgms_wait_sampling.query_capture_mode|pg_qs.query_capture_mode';

-[ RECORD 1 ]---+------------------------------------------------------------------------------------------------------------------

name            | pg_qs.query_capture_mode

setting         | top

unit            |

category        | Customized Options

short_desc      | Selects which statements are tracked by pg_qs. Need to reload the config to make change take effect.

extra_desc      |

context         | superuser

vartype         | enum

source          | configuration file

min_val         |

max_val         |

enumvals        | {none,top,all}

boot_val        | none

reset_val       | top

sourcefile      |

sourceline      |

pending_restart | f

-[ RECORD 2 ]---+------------------------------------------------------------------------------------------------------------------

name            | pgms_wait_sampling.query_capture_mode

setting         | all

unit            |

category        | Customized Options

short_desc      | Selects types of wait events are tracked by this extension. Need to reload the config to make change take effect.

extra_desc      |

context         | superuser

vartype         | enum

source          | configuration file

min_val         |

max_val         |

enumvals        | {none,all}

boot_val        | none

reset_val       | all

sourcefile      |

sourceline      |

pending_restart | f

Za účelem vizualizace pomalých dotazů a čekání přejdeme k widgetu Výkon dotazů:

Dlouho běžící dotazy​​​​

Statistika čekání

Přihlašování PostgreSQL v Azure

Standardní protokoly PostgreSQL lze stáhnout nebo exportovat do služby Log Analytics pro pokročilejší analýzu:

Výkon a škálování PostgreSQL s Azure

I když lze počet virtuálních jader snadno zvýšit nebo snížit, tato akce spustí restart serveru:

Aby bylo dosaženo nulových prostojů, musí být aplikace schopny elegantně zvládnout přechodné chyby .

Pro ladění dotazů poskytuje Azure DBA kromě předinstalovaných rozšíření pg_statements a pg_buffercache také doporučení výkonu:

Vysoká dostupnost a replikace v Azure

Vysoká dostupnost databázového serveru je dosažena pomocí hardwarové replikace založené na uzlu. Tím je zajištěno, že v případě selhání hardwaru lze během desítek sekund vyvolat nový uzel.

Azure poskytuje redundantní bránu jako koncový bod síťového připojení pro všechny databázové servery v rámci regionu.

Zabezpečení PostgreSQL v Azure

Ve výchozím nastavení pravidla brány firewall odmítají přístup k instanci PostgreSQL. Protože databázový server Azure je ekvivalentem databázového clusteru, pravidla přístupu se budou vztahovat na všechny databáze hostované na serveru.

Kromě IP adres mohou pravidla brány firewall odkazovat na virtuální síť, což je funkce dostupná pouze pro úrovně General Purpose a Memory Optimized.

Jedna věc, kterou jsem na webovém rozhraní firewallu našel zvláštní — nemohl jsem se v něm orientovat pryč ze stránky během ukládání změn:

Uložená data jsou šifrována pomocí klíče spravovaného serverem a uživatelé cloudu nemohou deaktivovat šifrování. Přenášená data jsou také šifrována — požadované SSL lze změnit až po vytvoření databázového serveru. Stejně jako data v klidu jsou zálohy šifrovány a šifrování nelze deaktivovat.

Pokročilá ochrana před hrozbami poskytuje upozornění a doporučení na řadu požadavků na přístup k databázi, které jsou považovány za bezpečnostní riziko. Funkce je aktuálně v náhledu. Pro demonstraci jsem nasimuloval heslo útok hrubou silou:

~ $ while : ; do psql -U $(pwgen -s 20 1)@pg10 ; sleep 0.1 ; done

psql: FATAL:  password authentication failed for user "AApT6z4xUzpynJwiNAYf"

psql: FATAL:  password authentication failed for user "gaNeW8VSIflkdnNZSpNV"

psql: FATAL:  password authentication failed for user "SWZnY7wGTxdLTLcbqnUW"

psql: FATAL:  password authentication failed for user "BVH2SC12m9js9vZHcuBd"

psql: FATAL:  password authentication failed for user "um9kqUxPIxeQrzWQXr2v"

psql: FATAL:  password authentication failed for user "8BGXyg3KHF3Eq3yHpik1"

psql: FATAL:  password authentication failed for user "5LsVrtBjcewd77Q4kaj1"

....

Zkontrolujte protokoly PostgreSQL:

2019-08-19 07:13:50 UTC-5d5a4c2e.138-FATAL:  password authentication failed

for user "AApT6z4xUzpynJwiNAYf"

2019-08-19 07:13:50 UTC-5d5a4c2e.138-DETAIL:  Role "AApT6z4xUzpynJwiNAYf" does not exist.

   Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"

2019-08-19 07:13:51 UTC-5d5a4c2f.13c-LOG:  connection received: host=173.180.222.170 port=27248 pid=316

2019-08-19 07:13:51 UTC-5d5a4c2f.13c-FATAL:  password authentication failed for user "gaNeW8VSIflkdnNZSpNV"

2019-08-19 07:13:51 UTC-5d5a4c2f.13c-DETAIL:  Role "gaNeW8VSIflkdnNZSpNV" does not exist.

   Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"

2019-08-19 07:13:52 UTC-5d5a4c30.140-LOG:  connection received: host=173.180.222.170 port=58256 pid=320

2019-08-19 07:13:52 UTC-5d5a4c30.140-FATAL:  password authentication failed for user "SWZnY7wGTxdLTLcbqnUW"

2019-08-19 07:13:52 UTC-5d5a4c30.140-DETAIL:  Role "SWZnY7wGTxdLTLcbqnUW" does not exist.

   Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"

2019-08-19 07:13:53 UTC-5d5a4c31.148-LOG:  connection received: host=173.180.222.170 port=32984 pid=328

2019-08-19 07:13:53 UTC-5d5a4c31.148-FATAL:  password authentication failed for user "BVH2SC12m9js9vZHcuBd"

2019-08-19 07:13:53 UTC-5d5a4c31.148-DETAIL:  Role "BVH2SC12m9js9vZHcuBd" does not exist.

   Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"

2019-08-19 07:13:53 UTC-5d5a4c31.14c-LOG:  connection received: host=173.180.222.170 port=43384 pid=332

2019-08-19 07:13:54 UTC-5d5a4c31.14c-FATAL:  password authentication failed for user "um9kqUxPIxeQrzWQXr2v"

2019-08-19 07:13:54 UTC-5d5a4c31.14c-DETAIL:  Role "um9kqUxPIxeQrzWQXr2v" does not exist.

   Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"

2019-08-19 07:13:54 UTC-5d5a4c32.150-LOG:  connection received: host=173.180.222.170 port=27672 pid=336

2019-08-19 07:13:54 UTC-5d5a4c32.150-FATAL:  password authentication failed for user "8BGXyg3KHF3Eq3yHpik1"

2019-08-19 07:13:54 UTC-5d5a4c32.150-DETAIL:  Role "8BGXyg3KHF3Eq3yHpik1" does not exist.

   Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"

2019-08-19 07:13:55 UTC-5d5a4c33.154-LOG:  connection received: host=173.180.222.170 port=12712 pid=340

2019-08-19 07:13:55 UTC-5d5a4c33.154-FATAL:  password authentication failed for user "5LsVrtBjcewd77Q4kaj1"

2019-08-19 07:13:55 UTC-5d5a4c33.154-DETAIL:  Role "5LsVrtBjcewd77Q4kaj1" does not exist.

E-mailové upozornění přišlo asi o 30 minut později:

Za účelem umožnění jemného přístupu k databázovému serveru poskytuje Azure RBAC, což je cloudová nativní funkce řízení přístupu, jen jeden další nástroj v arzenálu PostgreSQL Cloud DBA. To je tak blízko, jak se můžeme dostat k všudypřítomným pravidlům přístupu pg_hba.

PostgreSQL Backup and Recovery v Azure

Bez ohledu na cenové úrovně jsou zálohy uchovávány mezi 7 a 35 dny. Cenová úroveň také ovlivňuje schopnost obnovit data.

Obnova bodu v čase je k dispozici prostřednictvím Azure Portal nebo rozhraní příkazového řádku a podle dokumentace až do pěti minut. Funkčnost portálu je dosti omezená – widget pro výběr data slepě zobrazuje posledních 7 dní jako možná data k výběru, ačkoli jsem server vytvořil dnes. Také se neprovádí žádné ověření cílového času obnovy – očekával jsem, že zadání hodnoty mimo interval obnovy spustí chybu, která zabrání průvodci pokračovat:

Po spuštění procesu obnovy se zobrazí chyba, pravděpodobně způsobená výpadkem hodnoty rozsahu, zobrazí se asi o minutu později:

…ale bohužel chybová zpráva nebyla příliš užitečná:

Záložní úložiště je zdarma po dobu uchování až 7 dní. To by se mohlo ukázat jako velmi užitečné pro vývojová prostředí.

Rady a tipy

Omezení

Zvykněte si na limity jednoho serveru.

Připojení

Vždy použijte připojovací řetězec, aby bylo připojení směrováno na správný databázový server.

Replikace

Pro scénáře obnovy po havárii vyhledejte repliky čtení v jedné ze spárovaných oblastí.

Role

Stejně jako v případě AWS a GCloud neexistuje přístup superuživatele.

GUC

Parametry vyžadující restart serveru nebo přístup superuživatele nelze nakonfigurovat.

Škálování

Během automatického škálování by se aplikace měly opakovat, dokud se nevyvolá nový uzel.

Velikost paměti a IOPS nelze specifikovat – paměť je přidělena v jednotkách GB na vCore, maximálně 320 GB (32vCores x 10 GB) a IOPS závisí na velikosti zřízeného úložiště maximálně 6000 IOPS. V současné době Azure nabízí možnost náhledu velkého úložiště s maximálně 20 000 IOPS.

Servery vytvořené v základní úrovni nelze upgradovat na General Purpose nebo Memory Optimized.

Úložiště

Ujistěte se, že je povolena funkce automatického růstu – pokud množství dat překročí vyhrazený úložný prostor, databáze vstoupí v režimu pouze pro čtení.

Úložiště lze pouze zvětšit. Stejně jako u všech ostatních poskytovatelů cloudu nelze alokaci úložiště snížit a nenašel jsem žádné vysvětlení. Vzhledem k nejmodernějšímu vybavení, které si velcí cloudoví hráči mohou dovolit, by neměl být důvod neposkytovat funkce podobné online přemisťování dat LVM. Úložiště je v dnešní době opravdu levné, opravdu není důvod přemýšlet o zmenšení až do příští velké aktualizace verze.

Firewall

V některých případech může šíření aktualizací pravidel brány firewall trvat až pět minut.

Server se nachází ve stejné podsíti jako aplikační servery nebudou dosažitelné, dokud nebudou zavedena příslušná pravidla brány firewall.

Pravidla virtuální sítě neumožňují přístup napříč oblastmi a v důsledku toho nelze dblink a postgres_fdw použít k připojení k databázím mimo cloud Azure.

Přístup virtuální sítě/podsítě nelze použít na webové aplikace, protože jejich připojení pocházejí z veřejných IP adres.

Velké virtuální sítě nebudou dostupné, dokud budou povoleny koncové body služby.

Šifrování

Pro aplikace, které vyžadují ověření certifikátu serveru, je soubor k dispozici ke stažení z Digicert. Microsoft to usnadnil a do roku 2025 byste se neměli starat o obnovení:

~ $ openssl x509 -in BaltimoreCyberTrustRoot.crt.pem -noout -dates

notBefore=May 12 18:46:00 2000 GMT

notAfter=May 12 23:59:00 2025 GMT

Systém detekce narušení

Ukázková verze pokročilé ochrany před hrozbami není k dispozici pro instance základní úrovně.

Zálohování a obnovení

U aplikací, které si nemohou dovolit výpadek regionu, zvažte konfiguraci serveru s geograficky redundantním úložištěm záloh. Tuto volbu lze povolit pouze v době vytváření databázového serveru.

Požadavek na překonfigurování pravidel cloudového firewallu po operaci PITR je zvláště důležitý.

Odstranění databázového serveru odstraní všechny zálohy.

Po obnovení budou muset být provedeny určité úlohy po obnovení.

Nepřihlášené tabulky jsou doporučeny pro hromadné vkládání, aby se zvýšil výkon, ale nejsou replikovány.

Monitorování

Metriky se zaznamenávají každou minutu a ukládají se po dobu 30 dnů.

Protokolování

Query Store je globální volba, což znamená, že platí pro všechny databáze. Transakce pouze pro čtení a dotazy delší než 6 000 bajtů jsou problematické. Ve výchozím nastavení jsou zachycené dotazy uchovávány po dobu 7 dnů.

Výkon

Doporučení Statistik výkonu dotazu jsou v současnosti omezena na vytváření a rušení indexu.

Deaktivujte pg_stat_staements, když není potřeba.

Nahraďte uuid_generate_v4 pomocí gen_random_uuid(). To je v souladu s doporučením v oficiální dokumentaci PostgreSQL, viz Vytváření uuid-ossp.

Vysoká dostupnost a replikace

Je limit pěti přečtených replik. Aplikace náročné na zápis by se měly vyhnout používání replik pro čtení, protože mechanismus replikace je asynchronní, což přináší určitá zpoždění, která musí aplikace tolerovat. Čtené repliky mohou být umístěny v jiné oblasti.

Podporu REPLIC lze povolit až po vytvoření serveru. Tato funkce vyžaduje restart serveru:

Čtené repliky nedědí pravidla brány firewall z hlavního uzlu:

Selhání při čtení repliky není automatické. Mechanismus převzetí služeb při selhání je založen na uzlu.

Existuje dlouhý seznam úvah, které je třeba zkontrolovat před konfigurací čtených replik.

Vytváření replik trvá dlouho, i když jsem testoval s relativně malým souborem dat:

 Vakuum

Vakuum

Zkontrolujte klíčové parametry, protože Azure Database for PostgreSQL se dodává s výchozími hodnotami vakua:

[email protected]:5432 postgres> select name,setting from pg_settings where name ~ '^autovacuum.*';

               name                 | setting

-------------------------------------+-----------

autovacuum                          | on

autovacuum_analyze_scale_factor     | 0.05

autovacuum_analyze_threshold        | 50

autovacuum_freeze_max_age           | 200000000

autovacuum_max_workers              | 3

autovacuum_multixact_freeze_max_age | 400000000

autovacuum_naptime                  | 15

autovacuum_vacuum_cost_delay        | 20

autovacuum_vacuum_cost_limit        | -1

autovacuum_vacuum_scale_factor      | 0.05

autovacuum_vacuum_threshold         | 50

autovacuum_work_mem                 | -1

(12 rows)

Upgrady

Automatické velké upgrady nejsou podporovány. Jak již bylo zmíněno dříve, toto je příležitost k úsporám nákladů tím, že se zmenšuje automaticky rostoucí úložiště.

Vylepšení PostgreSQL Azure

Časové řady

TimescaleDB je k dispozici jako rozšíření (není součástí modulů PostgreSQL), je však vzdáleno jen několik kliknutí. Jedinou nevýhodou je starší verze 1.1.1, zatímco upstream verze je aktuálně na  1.4.1 (2019-08-01).

[email protected]:5432 postgres> CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

WARNING:

WELCOME TO

_____ _                               _ ____________

|_   _(_)                             | | | _ \ ___ \

| |  _ _ __ ___   ___ ___ ___ __ _| | ___| | | | |_/ /

| | | |  _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \

| | | | | | | | |  __/\__ \ (_| (_| | |  __/ |/ /| |_/ /

|_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/

               Running version 1.1.1

For more information on TimescaleDB, please visit the following links:



1. Getting started: https://docs.timescale.com/getting-started

2. API reference documentation: https://docs.timescale.com/api

3. How TimescaleDB is designed: https://docs.timescale.com/introduction/architecture




CREATE EXTENSION



[email protected]:5432 postgres> \dx timescaledb

                                    List of installed extensions

   Name     | Version | Schema |                            Description

-------------+---------+--------+-------------------------------------------------------------------

timescaledb | 1.1.1   | public | Enables scalable inserts and complex queries for time-series data

(1 row)

Protokolování

Kromě možností protokolování PostgreSQL lze Azure Database for PostgreSQL nakonfigurovat tak, aby zaznamenávala další diagnostické události.

Firewall

Azure Portal obsahuje praktickou funkci umožňující připojení z IP adres přihlášených k portálu:

Tuto funkci jsem si všiml, protože usnadňuje vývojářům a správcům systému povolit, a vyčnívá to jako funkce, kterou nenabízí ani AWS, ani GCloud.

Závěr

Azure Database for PostgreSQL Single Server nabízí služby na podnikové úrovni, avšak mnoho z těchto služeb je stále v režimu náhledu:Query Store, Performance Insight, Performance Recommendation, Advanced Threat Protection, Large Storage, Cross-region Přečtěte si Repliky.

Zatímco pro správu PostgreSQL v cloudu Azure již nejsou vyžadovány znalosti operačního systému, očekává se, že DBA získá dovednosti, které se neomezují na samotnou databázi – Azure networking (VNet), zabezpečení připojení (firewall ), prohlížeč protokolů a analýzy spolu s KQL, Azure CLI pro praktické skriptování a seznam pokračuje.

Pro ty, kteří plánují migraci svých úloh PostgreSQL do Azure, je k dispozici řada zdrojů spolu s vybraným seznamem partnerů Azure včetně Credativ, jednoho z hlavních sponzorů a přispěvatelů PostgreSQL.

P>
  1. java.lang.ClassNotFoundException:org.postgresql.Driver, Android

  2. Dotazovací jazyk Neo4j – Cypher

  3. 4 způsoby, jak vybrat duplicitní řádky v PostgreSQL

  4. IntentService zamrzá uživatelské rozhraní mé aplikace