Om du har följt Microsoft på sistone kommer det inte som någon överraskning att leverantören av en konkurrerande databasprodukt, nämligen SQL Server, också hoppade på PostgreSQL-tåget. Från att släppa 60 000 patent till OIN till att vara Platinum-sponsor på PGCon, Microsoft som en av PostgreSQL-företagens stödorganisationer. Tog alla tillfällen i akt för att visa att du inte bara kan köra PostgreSQL på Microsoft, utan också det omvända:Microsoft kan, genom sitt molnerbjudande, köra PostgreSQL åt dig. Uttalandet blev ännu tydligare med förvärvet av Citus Data och lanseringen av deras flaggskeppsprodukt i Azure Cloud under namnet Hyperscale. Det är säkert att säga att PostgreSQL-användningen växer och nu finns det ännu fler goda skäl att välja det.
Min resa genom Azure-molnet började precis vid landningssidan där jag möter utmanarna:Single Server och en förhandsvisning (med andra ord ingen SLA tillhandahållen) utgåva av Hyperscale (Citus). Den här bloggen kommer att fokusera på det förstnämnda. Medan jag var på den här resan hade jag möjlighet att öva på vad öppen källkod handlar om – att ge tillbaka till samhället – i det här fallet, genom att ge feedback till dokumentationen att de, till Microsofts förtjänst, gör detta mycket enkelt genom att skicka feedbacken rakt. till Github:
PostgreSQL-kompatibilitet med Azure
Version
Enligt produktdokumentation riktar singelserver sig mot PostgreSQL-versioner i n-2 huvudsortimentet:
Som en lösning byggd för prestanda rekommenderas Single Server för datamängder 100 GB och större. Servrarna gav förutsägbar prestanda — databasinstanserna kommer med ett fördefinierat antal vCores och IOPS (baserat på storleken på den tillhandahållna lagringen).
Tillägg
Det finns ett ganska stort antal tillägg som stöds och några av dem installeras direkt:
[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-övervakning på Azure
Serverövervakning är beroende av en uppsättning mätvärden som prydligt kan grupperas för att skapa en anpassad instrumentpanel:
De som är bekanta med Graphviz eller Blockdiag kommer sannolikt att uppskatta alternativet att exportera hela instrumentpanelen till en JSON-fil:
Ytterligare mätvärden kan — och de bör — länkas till varningar:
Frågestatistik kan spåras med hjälp av Query Store och visualiseras med Query Performance Insikt. För det måste ett par Azure-specifika parametrar aktiveras:
[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
För att visualisera de långsamma frågorna och väntan fortsätter vi till Query Performance-widgeten:
Långa sökningar
Väntestatistik
PostgreSQL-loggning på Azure
StandardpostgreSQL-loggarna kan laddas ned eller exporteras till Log Analytics för mer avancerad analys:
PostgreSQL-prestanda och skalning med Azure
Medan antalet vCores enkelt kan ökas eller minskas, kommer denna åtgärd att utlösa en omstart av servern:
För att uppnå noll driftstopp måste applikationer kunna hantera övergående fel på ett elegant sätt .
För justering av frågor förser Azure DBA med prestandarekommendationer, förutom de förinlästa pg_statements och pg_buffercache-tilläggen:
Hög tillgänglighet och replikering på Azure
Databasserverns hög tillgänglighet uppnås med hjälp av en nodbaserad hårdvarureplikering. Detta säkerställer att i händelse av hårdvarufel kan en ny nod tas fram inom tiotals sekunder.
Azure tillhandahåller en redundant gateway som en nätverksanslutningsslutpunkt för alla databasservrar inom en region.
PostgreSQL-säkerhet på Azure
Som standard nekar brandväggsregler åtkomst till PostgreSQL-instansen. Eftersom en Azure-databasserver är motsvarigheten till ett databaskluster kommer åtkomstreglerna att gälla för alla databaser som finns på servern.
Förutom IP-adresser kan brandväggsregler referera till virtuella nätverk, en funktion som endast är tillgänglig för nivåer för allmänna ändamål och minnesoptimerade.
En sak jag tyckte var märklig i brandväggens webbgränssnitt — jag kunde inte navigera borta från sidan medan ändringarna sparades:
Data i vila krypteras med en serverhanterad nyckel och molnanvändare kan inte inaktivera krypteringen. Data under överföring är också krypterad - SSL krävs kan endast ändras efter att databasservern har skapats. Precis som data i vila, är säkerhetskopior krypterade och kryptering kan inte inaktiveras.
Avancerat hotskydd ger varningar och rekommendationer om ett antal förfrågningar om databasåtkomst som anses vara en säkerhetsrisk. Funktionen är för närvarande i förhandsvisning. För att demonstrera simulerade jag en brute force-attack med lösenord:
~ $ 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"
....
Kontrollera PostgreSQL-loggarna:
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-postvarningen kom cirka 30 minuter senare:
För att tillåta finkornig åtkomst till databasservern tillhandahåller Azure RBAC, som är en molnbaserad åtkomstkontrollfunktion, bara ett verktyg till i arsenalen av PostgreSQL Cloud DBA. Det här är så nära vi kan komma de allestädes närvarande pg_hba åtkomstreglerna.
PostgreSQL säkerhetskopiering och återställning på Azure
Oavsett prisnivåer sparas säkerhetskopior mellan 7 och 35 dagar. Prisnivån påverkar också möjligheten att återställa data.
Återställning vid tidpunkt är tillgänglig via Azure Portal eller CLI och enligt dokumentationen så detaljerad som upp till fem minuter. Portalfunktionaliteten är ganska begränsad - datumväljarwidgeten visar blint de senaste 7 dagarna som möjliga datum att välja, även om jag skapade servern idag. Dessutom utförs ingen verifiering av återställningsmåltiden – jag förväntade mig att inmatning av ett värde utanför återställningsintervallet skulle utlösa ett fel som hindrar guiden från att fortsätta:
När återställningsprocessen har startat uppstår ett fel, förmodligen orsakat av out av intervallvärde, dyker upp ungefär en minut senare:
...men tyvärr var felmeddelandet inte särskilt användbart:
Sistligen är säkerhetskopieringslagring gratis för lagringsperioder på upp till 7 dagar. Det kan visa sig vara extremt praktiskt för utvecklingsmiljöer.
Tips och tips
Begränsningar
Vänja dig med gränserna för singelserver.
Anslutning
Använd alltid anslutningssträngen för att anslutningen ska dirigeras till rätt databasserver.
replikering
För scenarier för katastrofåterställning, leta reda på läsrepliker i en av de parade regionerna.
Roller
Precis som fallet är med AWS och GCloud finns det ingen superanvändaråtkomst.
GUC
Parametrar som kräver omstart av servern eller superanvändaråtkomst kan inte konfigureras.
Skalning
Under automatisk skalning bör applikationer försöka igen tills den nya noden visas.
Minnesmängd och IOPS kan inte specificeras — minnet tilldelas i enheter om GB per vCore, upp till maximalt 320 GB (32vCores x 10 GB), och IOPS är beroende av storleken på den tillhandahållna lagringen till maximalt 6000 IOPS. För närvarande erbjuder Azure ett stort alternativ för förhandsvisning av lagring med maximalt 20 000 IOPS.
Server skapade i Basic-nivån kan inte uppgraderas till General Purpose eller Memory Optimized.
Lagring
Se till att funktionen för automatisk tillväxt är aktiverad – om mängden data överstiger det tillhandahållna lagringsutrymmet kommer databasen att gå över i skrivskyddat läge.
Lagring kan bara skalas upp. Precis som med alla andra molnleverantörer kan lagringsallokeringen inte minskas och jag kunde inte hitta någon förklaring. Med tanke på den senaste utrustningen bör de stora molnaktörerna ha råd att det inte finns någon anledning att inte tillhandahålla funktioner som liknar LVM online-dataflyttning. Lagring är riktigt billigt nuförtiden, det finns egentligen ingen anledning att tänka på att skala ner tills nästa större versionsuppgradering.
Brandvägg
I vissa fall kan det ta upp till fem minuter innan uppdateringar av brandväggsregler sprids.
En server finns i samma undernät som applikationsservrarna inte kommer att kunna nås förrän lämpliga brandväggsregler är på plats.
Virtuella nätverksregler tillåter inte åtkomst över regioner och som ett resultat kan dblink och postgres_fdw inte användas för att ansluta till databaser utanför Azure-molnet.
VNet/Subnet-metoden kan inte tillämpas på webbappar eftersom deras anslutningar kommer från offentliga IP-adresser.
Stora virtuella nätverk kommer att vara otillgängliga medan tjänstens slutpunkter är aktiverade.
Kryptering
För applikationer som kräver servercertifikatvalidering är filen tillgänglig för nedladdning från Digicert. Microsoft gjorde det enkelt och du borde inte behöva oroa dig för förnyelse förrän 2025:
~ $ openssl x509 -in BaltimoreCyberTrustRoot.crt.pem -noout -dates
notBefore=May 12 18:46:00 2000 GMT
notAfter=May 12 23:59:00 2025 GMT
Intrångsdetekteringssystem
Förhandsversionen av Advanced Threat Protection är inte tillgänglig för Basic tier-instanserna.
Säkerhetskopiera och återställa
För applikationer som inte har råd med en regionavbrottstid, överväg att konfigurera servern med geo-redundant backuplagring. Det här alternativet kan endast aktiveras när databasservern skapas.
Kravet på att konfigurera om molnbrandväggsreglerna efter en PITR-operation är särskilt viktigt.
Om du tar bort en databasserver tas alla säkerhetskopior bort.
Efter återställningen finns det vissa uppgifter efter återställning som måste utföras.
Ologgade tabeller rekommenderas för bulkinfogningar för att öka prestandan, men de replikeras inte.
Övervakning
Mätvärden spelas in varje minut och lagras i 30 dagar.
Loggning
Query Store är ett globalt alternativ, vilket innebär att det gäller alla databaser. Skrivskyddade transaktioner och frågor som är längre än 6 000 byte är problematiska. Som standard sparas de infångade frågorna i 7 dagar.
Prestanda
Rekommendationer för Query Performance Insight är för närvarande begränsade till att skapa och släppa index.
Inaktivera pg_stat_staements när det inte behövs.
Ersätt uuid_generate_v4 med gen_random_uuid(). Detta är i linje med rekommendationen i den officiella PostgreSQL-dokumentationen, se Building uuid-ossp.
Hög tillgänglighet och replikering
Det finns en gräns på fem läsrepliker. Skrivintensiva applikationer bör undvika att använda läsrepliker eftersom replikeringsmekanismen är asynkron vilket introducerar vissa förseningar som applikationer måste kunna tolerera. Läskopior kan finnas i en annan region.
REPLICA-stöd kan endast aktiveras efter att servern skapats. Funktionen kräver omstart av servern:
Läsrepliker ärver inte brandväggsreglerna från huvudnoden:
Filover för att läsa replika är inte automatisk. Överstyrningsmekanismen är nodbaserad.
Det finns en lång lista med överväganden som måste granskas innan du konfigurerar läsrepliker.
Att skapa repliker tar lång tid, även när jag testade med relativt liten datamängd:
VakuumVakuum
Granska nyckelparametrarna, eftersom Azure Database for PostgreSQL levereras med uppströms vakuumstandardvärden:
[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)
Uppgraderingar
Automatiska större uppgraderingar stöds inte. Som nämnts tidigare är detta en kostnadsbesparingsmöjlighet genom att skala ner det automatiskt odlade lagringsutrymmet.
PostgreSQL Azure-förbättringar
Tidsserier
TimescaleDB är tillgänglig som tillägg (inte en del av PostgreSQL-modulerna), men det är bara några klick bort. Den enda nackdelen är den äldre versionen 1.1.1, medan uppströmsversionen för närvarande är 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)
Loggning
Förutom PostgreSQL-loggningsalternativ kan Azure Database for PostgreSQL konfigureras för att registrera ytterligare diagnostikhändelser.
Brandvägg
Azure Portal innehåller en praktisk funktion för att tillåta anslutningar från de IP-adresser som är inloggade på portalen:
Jag noterade funktionen eftersom den gör det enkelt för utvecklare och systemadministratörer att släpper in sig själva, och det sticker ut som en funktion som inte erbjuds av varken AWS eller GCloud.
Slutsats
Azure Database for PostgreSQL Single Server erbjuder tjänster på företagsnivå, men många av dessa tjänster är fortfarande i förhandsgranskningsläge:Query Store, Performance Insight, Performance Recommendation, Advanced Threat Protection, Large Storage, Cross-region Läs Replicas.
Medan kunskap om operativsystemet inte längre krävs för att administrera PostgreSQL i Azure-molnet, förväntas DBA:n förvärva färdigheter som inte är begränsade till själva databasen — Azure-nätverk (VNet), anslutningssäkerhet (brandvägg) ), loggvisare och analyser tillsammans med KQL, Azure CLI för praktiskt skript, och listan fortsätter.
Sistligen, för dem som planerar att migrera sina PostgreSQL-arbetsbelastningar till Azure, finns det ett antal resurser tillgängliga tillsammans med en utvald lista med Azure-partners inklusive Credativ, en av PostgreSQL:s stora sponsorer och bidragsgivare.