sql >> Database >  >> RDS >> PostgreSQL

Cloud Vendor Deep-Dive:PostgreSQL op Microsoft Azure

Als je Microsoft de laatste tijd hebt gevolgd, zal het geen verrassing zijn dat de aanbieder van een concurrerend databaseproduct, namelijk SQL Server, ook op de PostgreSQL-trein is gesprongen. Van het vrijgeven van 60.000 patenten aan OIN tot het zijn van Platinum-sponsor bij PGCon, Microsoft als een van de PostgreSQL-ondersteunende organisaties. Grijpte elke gelegenheid aan om te laten zien dat je niet alleen PostgreSQL op Microsoft kunt draaien, maar dat ook het omgekeerde waar is:Microsoft kan, via zijn cloudaanbod, PostgreSQL voor je draaien. De uitspraak werd nog duidelijker met de overname van Citus Data en de release van hun vlaggenschipproduct in de Azure Cloud onder de naam Hyperscale. Het is veilig om te zeggen dat de acceptatie van PostgreSQL groeit en dat er nu nog meer goede redenen zijn om ervoor te kiezen.

Mijn reis door de Azure-cloud begon precies op de landingspagina waar ik de kanshebbers ontmoette:Single Server en een preview (met andere woorden geen SLA meegeleverd) release van Hyperscale (Citus). Deze blog gaat over het eerste. Tijdens deze reis kreeg ik de kans om te oefenen wat open source inhoudt - teruggeven aan de gemeenschap - in dit geval, door feedback te geven aan de documentatie die, tot eer van Microsoft, ze dit heel gemakkelijk maken door de feedback recht door te spitten naar Github:

PostgreSQL-compatibiliteit met Azure

Versiebeheer

Volgens de productdocumentatie richt Single Server zich op PostgreSQL-versies in het n-2 hoofdbereik:

Als een prestatiegerichte oplossing wordt Single Server aanbevolen voor datasets van 100 GB en groter. De servers leverden voorspelbare prestaties - de database-instances worden geleverd met een vooraf gedefinieerd aantal vCores en IOPS (op basis van de grootte van de ingerichte opslag).

Extensies

Er is een behoorlijk aantal ondersteunde extensies, waarvan sommige kant-en-klaar worden geïnstalleerd:

[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)

PostgreSQL-bewaking op Azure

Serverbewaking is gebaseerd op een reeks meetwaarden die netjes kunnen worden gegroepeerd om een ​​aangepast dashboard te maken:

Degenen die bekend zijn met Graphviz of Blockdiag zullen waarschijnlijk de mogelijkheid waarderen om de hele dashboard naar een JSON-bestand:

Verdere statistieken kunnen - en moeten - worden gekoppeld aan waarschuwingen:

Querystatistieken kunnen worden gevolgd door middel van Query Store en worden gevisualiseerd met Query Performance In zicht. Daarvoor moeten een aantal Azure-specifieke parameters worden ingeschakeld:

[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

Om de trage zoekopdrachten en wachttijden te visualiseren, gaan we verder met de widget Query Performance:

Langlopende zoekopdrachten

Wachtstatistieken

PostgreSQL-logboekregistratie op Azure

De standaard PostgreSQL-logboeken kunnen worden gedownload of geëxporteerd naar Log Analytics voor geavanceerdere parsering:

PostgreSQL-prestaties en schalen met Azure

Hoewel het aantal vCores gemakkelijk kan worden verhoogd of verlaagd, zal deze actie een herstart van de server veroorzaken:

Om nul downtime te bereiken, moeten applicaties tijdelijke fouten gracieus kunnen afhandelen .

Voor afstemmingsquery's biedt Azure de DBA prestatieaanbevelingen, naast de vooraf geladen pg_statements en pg_buffercache-extensies:

Hoge beschikbaarheid en replicatie op Azure

Hoge beschikbaarheid van databaseservers wordt bereikt door middel van hardwarereplicatie op basis van nodes. Dit zorgt ervoor dat bij hardwarestoringen binnen tientallen seconden een nieuwe node kan worden opgeroepen.

Azure biedt een redundante gateway als netwerkverbindingseindpunt voor alle databaseservers binnen een regio.

PostgreSQL-beveiliging op Azure

Standaard weigeren firewallregels de toegang tot de PostgreSQL-instantie. Aangezien een Azure-databaseserver het equivalent is van een databasecluster, zijn de toegangsregels van toepassing op alle databases die op de server worden gehost.

Naast IP-adressen kunnen firewallregels verwijzen naar een virtueel netwerk, een functie die alleen beschikbaar is voor de lagen voor algemeen gebruik en geoptimaliseerd voor geheugen.

Eén ding vond ik merkwaardig in de webinterface van de firewall:ik kon niet navigeren weg van de pagina terwijl wijzigingen werden opgeslagen:

Gegevens in rust worden versleuteld met een door de server beheerde sleutel en cloudgebruikers kunnen dit niet de codering uitschakelen. Gegevens die onderweg zijn, worden ook gecodeerd. De vereiste SSL kan alleen worden gewijzigd nadat de databaseserver is gemaakt. Net als de gegevens in rust, worden back-ups gecodeerd en kan codering niet worden uitgeschakeld.

Advanced Threat Protection biedt waarschuwingen en aanbevelingen voor een aantal verzoeken om toegang tot de database die als een beveiligingsrisico worden beschouwd. De functie is momenteel in preview. Om te demonstreren heb ik een brute force-aanval met een wachtwoord gesimuleerd:

~ $ 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"

....

Controleer de PostgreSQL-logboeken:

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.

De e-mailwaarschuwing arriveerde ongeveer 30 minuten later:

Om fijnmazige toegang tot de databaseserver mogelijk te maken, biedt Azure RBAC, wat een cloudeigen toegangscontrolefunctie is, slechts een extra tool in het arsenaal van de PostgreSQL Cloud DBA. Dit komt zo dicht mogelijk bij de alomtegenwoordige pg_hba-toegangsregels.

PostgreSQL back-up en herstel op Azure

Ongeacht de prijsniveaus, back-ups worden tussen de 7 en 35 dagen bewaard. Het prijsniveau is ook van invloed op de mogelijkheid om gegevens te herstellen.

Point-in-time recovery is beschikbaar via de Azure Portal of de CLI en volgens de documentatie zo gedetailleerd als maximaal vijf minuten. De functionaliteit van de portal is nogal beperkt - de datumkiezer-widget toont blindelings de laatste 7 dagen als mogelijke datums om te selecteren, hoewel ik de server vandaag heb gemaakt. Er is ook geen verificatie uitgevoerd op de hersteldoeltijd — ik verwachtte dat het invoeren van een waarde buiten het herstelinterval een fout zou veroorzaken waardoor de wizard niet verder kon gaan:

Zodra het herstelproces is gestart, verschijnt er een fout, vermoedelijk veroorzaakt door de van bereikwaarde, verschijnt ongeveer een minuut later:

...maar helaas was de foutmelding niet erg behulpzaam:

Ten slotte is back-upopslag gratis voor een bewaarperiode van maximaal 7 dagen. Dat zou erg handig kunnen zijn voor ontwikkelomgevingen.

Hints en tips

Grenzen

Word vertrouwd met de limieten voor één server.

Connectiviteit

Gebruik altijd de verbindingsreeks om de verbinding naar de juiste databaseserver te routeren.

Replicatie

Voor scenario's voor noodherstel zoekt u naar leesreplica's in een van de gekoppelde regio's.

Rollen

Net als bij AWS en GCloud is er geen superuser-toegang.

GUC's

Parameters die een herstart van de server of superuser-toegang vereisen, kunnen niet worden geconfigureerd.

Schaal

Tijdens automatisch schalen moeten toepassingen het opnieuw proberen totdat het nieuwe knooppunt wordt weergegeven.

Geheugenhoeveelheid en IOPS kunnen niet worden opgegeven — geheugen wordt toegewezen in eenheden van GB per vCore, tot een maximum van 320 GB (32vCores x 10 GB), en IOPS is afhankelijk van de grootte van de ingerichte opslag maximaal 6000 IOPS. Op dit moment biedt Azure een grote opslagpreview-optie met een maximum van 20.000 IOPS.

Servers die in de Basic-laag zijn gemaakt, kunnen niet worden geüpgraded naar General Purpose of Memory Optimized.

Opslag

Zorg ervoor dat de functie voor automatisch groeien is ingeschakeld — als de hoeveelheid gegevens de beschikbare opslagruimte overschrijdt, gaat de database in de alleen-lezen modus.

Opslag kan alleen worden opgeschaald. Net als bij alle andere cloudproviders kan de opslagtoewijzing niet worden verlaagd en kon ik geen verklaring vinden. Gezien de ultramoderne apparatuur die de grote cloudspelers zich kunnen veroorloven, zou er geen reden moeten zijn om geen functies te bieden die vergelijkbaar zijn met LVM online gegevensverplaatsing. Opslag is tegenwoordig erg goedkoop, er is echt geen reden om na te denken over het verkleinen tot de volgende grote versie-upgrade.

Firewall

In sommige gevallen kan het tot vijf minuten duren voordat updates van firewallregels zijn doorgevoerd.

Een server bevindt zich in hetzelfde subnet als de applicatieservers en is pas bereikbaar als de juiste firewallregels aanwezig zijn.

Virtuele netwerkregels staan ​​geen toegang tussen regio's toe en als gevolg daarvan kunnen dblink en postgres_fdw niet worden gebruikt om verbinding te maken met databases buiten de Azure-cloud.

De VNet/Subnet-benadering kan niet worden toegepast op webapps omdat hun verbindingen afkomstig zijn van openbare IP-adressen.

Grote virtuele netwerken zijn niet beschikbaar zolang de service-eindpunten zijn ingeschakeld.

Encryptie

Voor toepassingen die validatie van servercertificaten vereisen, kan het bestand worden gedownload van Digicert. Microsoft heeft het gemakkelijk gemaakt en u hoeft zich pas in 2025 zorgen te maken over verlenging:

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

notBefore=May 12 18:46:00 2000 GMT

notAfter=May 12 23:59:00 2025 GMT

Inbraakdetectiesysteem

De preview-versie van Advanced Threat Protection is niet beschikbaar voor de Basic-tierinstanties.

Back-up maken en terugzetten

Voor toepassingen die zich geen regio-downtime kunnen veroorloven, kunt u overwegen de server te configureren met geo-redundante back-upopslag. Deze optie kan alleen worden ingeschakeld op het moment dat de databaseserver wordt gemaakt.

De vereiste voor het opnieuw configureren van de cloud-firewallregels na een PITR-bewerking is bijzonder belangrijk.

Als u een databaseserver verwijdert, worden alle back-ups verwijderd.

Na het herstel zijn er bepaalde taken na het herstellen die moeten worden uitgevoerd.

Niet-gelogde tabellen worden aanbevolen voor bulkinvoegingen om de prestaties te verbeteren, maar ze worden niet gerepliceerd.

Bewaking

Metrieken worden elke minuut geregistreerd en 30 dagen bewaard.

Logboekregistratie

Query Store is een globale optie, wat betekent dat het van toepassing is op alle databases. Alleen-lezen transacties en query's langer dan 6.000 bytes zijn problematisch. Standaard worden de vastgelegde zoekopdrachten 7 dagen bewaard.

Prestaties

Query Performance Insight-aanbevelingen zijn momenteel beperkt tot het maken en neerzetten van een index.

Pg_stat_staements uitschakelen wanneer niet nodig.

Vervang uuid_generate_v4 door gen_random_uuid(). Dit is in lijn met de aanbeveling in de officiële PostgreSQL-documentatie, zie Building uuid-ossp.

Hoge beschikbaarheid en replicatie

Er is een limiet van vijf leesreplica's. Schrijfintensieve toepassingen moeten het gebruik van leesreplica's vermijden, aangezien het replicatiemechanisme asynchroon is, wat vertragingen met zich meebrengt die toepassingen moeten kunnen tolereren. Leesreplica's kunnen zich in een andere regio bevinden.

REPLICA-ondersteuning kan alleen worden ingeschakeld nadat de server is gemaakt. De functie vereist een herstart van de server:

Leesreplica's nemen de firewallregels van het hoofdknooppunt niet over:

Failover om replica te lezen is niet automatisch. Het failover-mechanisme is gebaseerd op nodes.

Er is een lange lijst met overwegingen die moeten worden bekeken voordat leesreplica's worden geconfigureerd.

Het maken van replica's duurt lang, zelfs als ik heb getest met een relatief kleine dataset:

 Vacuüm

Vacuüm

Bekijk de belangrijkste parameters, aangezien Azure Database for PostgreSQL wordt geleverd met standaardwaarden voor upstream vacuüm:

[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)

Upgrades

Automatische grote upgrades worden niet ondersteund. Zoals eerder vermeld, is dit een mogelijkheid om kosten te besparen door de automatisch gegroeide opslag te verkleinen.

PostgreSQL Azure-verbeteringen

Tijdreeksen

TimescaleDB is beschikbaar als een extensie (geen onderdeel van de PostgreSQL-modules), maar het is slechts een paar klikken verwijderd. Het enige nadeel is de oudere versie 1.1.1, terwijl de upstream-versie momenteel op  1.4.1 (2019-08-01) staat.

[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)

Logboekregistratie

Naast PostgreSQL-registratieopties, kan Azure Database for PostgreSQL worden geconfigureerd om aanvullende diagnostische gebeurtenissen vast te leggen.

Firewall

Azure Portal bevat een handige functie om verbindingen toe te staan ​​vanaf de IP-adressen die zijn ingelogd op de portal:

Ik merkte op dat deze functie het gemakkelijk maakt voor ontwikkelaars en systeembeheerders om zichzelf binnenlaten, en het valt op als een functie die noch door AWS, noch door GCloud wordt aangeboden.

Conclusie

Azure Database for PostgreSQL Single Server biedt services op ondernemingsniveau, maar veel van deze services bevinden zich nog in de voorbeeldmodus:Query Store, Performance Insight, Performance Recommendation, Advanced Threat Protection, Large Storage, Cross-region Lees Replica's.

Hoewel kennis van het besturingssysteem niet langer vereist is voor het beheer van PostgreSQL in de Azure-cloud, wordt verwacht dat de DBA vaardigheden verwerft die niet beperkt zijn tot de database zelf:Azure-netwerken (VNet), verbindingsbeveiliging (firewall ), logviewer en analyse samen met KQL, Azure CLI voor handige scripting, en de lijst gaat maar door.

Ten slotte, voor degenen die van plan zijn hun PostgreSQL-workloads naar Azure te migreren, zijn er een aantal bronnen beschikbaar, samen met een selecte lijst van Azure-partners, waaronder Credativ, een van de belangrijkste sponsors en bijdragers van PostgreSQL.


  1. SQL IN-operator voor beginners

  2. Tabel opzoeken in SortCL-compatibele IRI-taken

  3. Een Django Movie Recommendation-app maken met Jaccard Index

  4. hoe kan ik de top 100-records op de sql-server bijwerken?