Var ska jag börja?
Det bästa stället jag kunde hitta att börja var ingen annan än den officiella dokumentationen. Det finns också en GCP Youtube-kanal för dem som föredrar multimedia. När jag väl befann mig i Cloud SQL-dokumentationslandet vände jag mig till Concepts där vi lovas att "utveckla en djup förståelse" av produkten.
Så låt oss komma igång!
PostgreSQL Google Cloud-funktioner
Google Cloud SQL för PostgreSQL erbjuder alla standardfunktioner vi kan förvänta oss av en hanterad lösning:hög tillgänglighet med automatisk failover, automatisk säkerhetskopiering, kryptering i vila och under överföring, avancerad loggning och övervakning, och naturligtvis ett rikt API för att interagera med alla tjänster.
Och för lite historia började PostgreSQL-stödet i mars 2017, fram till dess var den enda databasmotorn som stöddes MySQL.
Cloud SQL kör PostgreSQL på Googles andra generationens datorplattform. Den fullständiga listan över funktioner finns här och även här. När man granskar den förra är det uppenbart att det aldrig fanns en första generationens plattform för PostgreSQL.
Databaser som körs på andra generationens plattform förväntas köras i hastigheter 7 gånger snabbare och dra nytta av 20 gånger mer lagringskapacitet. Bloggen som tillkännager den andra generationens plattform går in på detaljerna för att köra sysbench-testet för att jämföra Google Cloud SQL med den dåvarande huvudkonkurrenten AWS i båda inkarnationerna RDS och Aurora. Resultaten överraskade mig eftersom de visar att Cloud SQL presterar bättre medan de senaste testerna som utfördes med AWS Benchmark som släpptes ungefär ett år senare drog slutsatsen motsatsen. Det är ungefär samtidigt som PostgreSQL-stöd var tillgängligt. Medan jag kliar på tanken på att köra benchmark själv, gissar jag att det finns två potentiella faktorer som kunde ha påverkat resultaten:Googles sysbench benchmark använde olika parametrar och AWS kan ha förbättrat sina produkter under den tiden.
GCP PostgreSQL-kompatibilitet
Som förväntat är Google Cloud SQL för PostgreSQL nästan en drop-in ersättning för communityversionen och stöder alla PL/pgSQL SQL procedurspråk.
Vissa funktioner är inte tillgängliga på grund av säkerhetsskäl, till exempel SUPERUSER-åtkomst. Andra funktioner togs bort på grund av potentiella risker för produktens stabilitet och prestanda. Slutligen kan vissa alternativ och parametrar inte ändras, även om förfrågningar om att ändra det beteendet kan göras via Cloud SQL Discussion Group.
Cloud SQL är också trådkompatibelt med PostgreSQL-protokollet.
När det kommer till transaktionsisolering följer Cloud SQL PostgreSQL-standardbeteendet, som standard till Read Committed-isoleringsnivå.
För vissa av serverkonfigurationsparametrarna implementerar Cloud SQL olika intervall av skäl som inte förklaras i dokumentationen, vilket fortfarande är viktigt att komma ihåg.
Nätverk
Det finns flera sätt att ansluta till databasen, beroende på om instansen är på ett privat nätverk eller ett offentligt nätverk (applikationer som ansluter utanför GCP). Gemensamt för båda fallen är den fördefinierade VPC som hanteras av Google där alla Cloud SQL-databasinstanser finns.
Privat IP
Klienter som ansluter till en privat IP-adress dirigeras via en peering-anslutning mellan VPC:erna som är värd för klienten och respektive databasinstansen. Även om det inte är specifikt för PostgreSQL är det viktigt att se över nätverkskraven för att undvika anslutningsproblem. One gotcha:när den har aktiverats kan den privata IP-kapaciteten inte tas bort.
Ansluter från externa applikationer
Anslutningar från applikationer som finns utanför GCP kan och bör krypteras. Dessutom, för att undvika de olika attackerna, måste klientanslutningar och applikationer installera det medföljande klientcertifikatet. Proceduren för att generera och konfigurera certifikaten är något komplicerad, och kräver anpassade verktyg för att säkerställa att certifikaten förnyas med jämna mellanrum. Det kan vara en av anledningarna till att Google erbjuder möjligheten att använda Cloud SQL Proxy.
Ansluter med Cloud SQL Proxy
Inställningen är ganska enkel, vilket jag faktiskt har funnit vara fallet för alla instruktioner i Google Cloud SQL-dokumentationen. På en relaterad anteckning är det väldigt enkelt att skicka in dokumentationsfeedback, och skärmdumpsfunktionen var den första för mig.
Det finns flera sätt att auktorisera proxyanslutningar och jag valde att konfigurera ett tjänstkonto, precis som beskrivs i Cloud SQL Proxy-dokumentationen.
När allt är på plats är det dags att starta proxyn:
~/usr/local/google $ ./cloud_sql_proxy -instances=omiday:us-west1:s9s201907141919=tcp:5432 -credential_file=omiday-427c34fce588.json
2019/07/14 21:22:43 failed to setup file descriptor limits: failed to set rlimit {&{8500 4096}} for max file descriptors: invalid argument
2019/07/14 21:22:43 using credential file for authentication; [email protected]
2019/07/14 21:22:43 Listening on 127.0.0.1:5432 for omiday:us-west1:s9s201907141919
2019/07/14 21:22:43 Ready for new connections
För att ansluta till fjärrinstansen använder vi nu proxyn genom att ange localhost istället för instansens offentliga IP-adress:
~ $ psql "user=postgres dbname=postgres password=postgres hostaddr=127.0.0.1"
Pager usage is off.
psql (11.4, server 9.6.11)
Type "help" for help.
Observera att det inte finns någon kryptering eftersom vi ansluter lokalt och proxyn tar hand om att kryptera trafiken som strömmar in i molnet.
En vanlig DBA-uppgift är att visa anslutningarna till databasen genom att fråga pg_stat_activity. Dokumentationen säger att proxyanslutningar kommer att visas som cloudsqlproxy~1.2.3.4 så jag ville verifiera det påståendet. Jag har öppnat två sessioner som postgres, en via proxy och den andra från min hemadress, så följande fråga räcker:
[email protected]:5432 postgres> select * from pg_stat_activity where usename = 'postgres';
-[ RECORD 1 ]----+-----------------------------------------------------------
datid | 12996
datname | postgres
pid | 924
usesysid | 16389
usename | postgres
application_name | psql
client_addr |
client_hostname |
client_port | -1
backend_start | 2019-07-15 04:25:37.614205+00
xact_start | 2019-07-15 04:28:43.477681+00
query_start | 2019-07-15 04:28:43.477681+00
state_change | 2019-07-15 04:28:43.477684+00
wait_event_type |
wait_event |
state | active
backend_xid |
backend_xmin | 8229
query | select * from pg_stat_activity where usename = 'postgres';
-[ RECORD 2 ]----+-----------------------------------------------------------
datid | 12996
datname | postgres
pid | 946
usesysid | 16389
usename | postgres
application_name | psql
client_addr | <MY_HOME_IP_ADDRESS>
client_hostname |
client_port | 60796
backend_start | 2019-07-15 04:27:50.378282+00
xact_start |
query_start |
state_change | 2019-07-15 04:27:50.45613+00
wait_event_type |
wait_event |
state | idle
backend_xid |
backend_xmin |
query |
Det verkar som att proxyanslutningarna istället identifieras som client_port ==-1 och en tom client_addr. Detta kan ytterligare bekräftas genom att jämföra tidsstämplarna för backend_start och proxylogg nedan:
2019/07/14 21:25:37 New connection for "omiday:us-west1:s9s201907141919"
PostgreSQL High Availability på Google Cloud
Google Cloud SQL för PostgreSQL säkerställer hög tillgänglighet med hjälp av datasynkronisering på låg nivå med hjälp av regionala beständiga diskar. Failover är automatisk, med ett hjärtslagskontrollintervall på en sekund, och en failover utlöses efter cirka 60 sekunder.
Prestanda och övervakning
Sektionen Prestanda i dokumentationen påpekar allmänna molntumregler:håll databasen (både skribent och läsrepliker) nära applikationen och skala instansen vertikalt. Det som sticker ut är rekommendationen att tillhandahålla en instans med minst 60 GB RAM när prestanda är viktigt.
Stackdriver tillhandahåller övervakning och loggning, samt tillgång till PostgreSQL-loggar:
Åtkomstkontroll
Detta är implementerat på projekt-, instans- och databasnivå.
Projektåtkomstkontroll
Projektåtkomstkontroll är den molnspecifika åtkomstkontrollen — den använder konceptet med IAM-roller för att ge projektmedlemmar (användare, grupper eller tjänstekonton) åtkomst till olika Cloud SQL-resurser. Listan över roller är något självförklarande, för en detaljerad beskrivning av varje roll och tillhörande behörigheter, se APIs Explorer eller Cloud SQL Admin API för ett av de programmeringsspråk som stöds.
För att visa hur IAM-roller fungerar, låt oss skapa ett skrivskyddat (visare) tjänstkonto:
Starta en ny proxyinstans på port 5433 med hjälp av tjänstkontot som är kopplat till tittarroll:
~/usr/local/google $ ./cloud_sql_proxy -instances=omiday:us-west1:s9s201907141919=tcp:5433 -credential_file=omiday-4508243deca9.json
2019/07/14 21:49:56 failed to setup file descriptor limits: failed to set rlimit {&{8500 4096}} for max file descriptors: invalid argument
2019/07/14 21:49:56 using credential file for authentication; [email protected]
2019/07/14 21:49:56 Listening on 127.0.0.1:5433 for omiday:us-west1:s9s201907141919
2019/07/14 21:49:56 Ready for new connections
Öppna en psql-anslutning till 127.0.0.1:5433:
~ $ psql "user=postgres dbname=postgres password=postgres hostaddr=127.0.0.1 port=5433"
Kommandot avslutas med:
psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Hoppsan! Låt oss kontrollera proxyloggarna:
2019/07/14 21:50:33 New connection for "omiday:us-west1:s9s201907141919"
2019/07/14 21:50:33 couldn't connect to "omiday:us-west1:s9s201907141919": ensure that the account has access to "omiday:us-west1:s9s201907141919" (and make sure there's no typo in that name). Error during createEphemeral for omiday:us-west1:s9s201907141919: googleapi: Error 403: The client is not authorized to make this request., notAuthorized
Instansåtkomstkontroll
Åtkomst på instansnivå är beroende av anslutningskällan:
Kombinationen av auktoriseringsmetoder ersätter den allestädes närvarande pg_hba.conf.
Säkerhetskopiering och återställning
Som standard är automatiska säkerhetskopieringar aktiverade:
Även om säkerhetskopior inte påverkar databasläs- och skrivoperationer påverkar de prestandan och därför rekommenderas att säkerhetskopieringar schemaläggs under perioder med lägre aktivitet.
För redundans kan säkerhetskopior lagras i två regioner (extra avgifter tillkommer) med möjlighet att välja anpassade platser.
Använd komprimering för att spara lagringsutrymme. .gz-komprimerade filer återställs på ett transparent sätt.
Cloud SQL stöder också instanskloning. För den minsta datamängden tog operationen cirka 3 minuter:
Klonningens starttid 10:07:10:
PostgreSQL-loggarna visar att PostgreSQL blev tillgänglig på den klonade instansen kl. 10:10:47:
Det är fortfarande ett enklare sätt än säkerhetskopiering och återställning, för att skapa en kopia av en instans för test-, utvecklings- eller felsökningssyften.
Google Clouds bästa praxis för PostgreSQL
- Konfigurera en aktiveringspolicy för instanser som inte måste köras dygnet runt.
- Placera databasinstansen i samma zon eller region med beräkningsmotorinstanserna och App Engine-applikationerna för att undvika nätverkslatens.
- Skapa databasinstansen i samma zon som Compute Engine. Om du använder någon annan anslutningstyp accepterar du standardzonen.
- Användare som skapats med Cloud SQL är som standard superanvändare i molnet. Använd PostgreSQL ALTER ROLE för att ändra deras behörigheter.
- Använd den senaste Cloud SQL Proxy-versionen.
- Förekomstnamn bör innehålla en tidsstämpel för att kunna återanvända namnet när du tar bort och återskapar instanser.
- pg_dump inkluderar som standard stora objekt. Om databasen innehåller BLOB-s utför dumpningen under perioder med låg aktivitet för att förhindra att instansen slutar svara.
- Använd gcloud sql connect för att snabbt ansluta från en extern klient utan att behöva vitlista klientens IP-adress.
- Prenumerera på att annonsera grupp för att få aviseringar om produktuppdateringar och varningar som problem när du skapar instanser:
- Se till att applikationer implementerar databasanslutningshanteringstekniker.
- Förekomster som stoppats i mer än 90 dagar kommer att raderas såvida de inte är avstängda.
- Utför en manuell failover för att testa programbeteende och stilleståndslängd.
- Använd standardversionen av motorn.
- Lagringsutrymme för instanser som konfigurerats för att automatiskt öka lagringsutrymmet kommer att växa i steg om 25 GB. Eftersom lagringsutrymme inte kan återvinnas ställ in en ökningsgräns för den uppskattade storleken på databasen under nästa budgetcykel, och övervaka flyktiga frågor,
- Använd den "tidigare" underhållstidpunkten för testinstanser:
- Applikationer bör använda aktiva anslutningar och exponentiell backoff för att snabbt återhämta sig efter en omstart av instansen.
- Applikationer som förlitar sig på läsrepliker bör överväga att använda 3 repliker för att undvika problem som orsakas av sviktande regionala beständiga diskar som leder till att båda replikerna blir otillgängliga.
- Konfigurera läsrepliker för att förbättra läsprestanda.
- Omstart av instansen krävs när listan över IP-adresser som får åtkomst till en offentlig instans uppdateras för att kunna koppla bort befintliga anslutningar.
- Granska den dedikerade StackOverflow Cloud SQL-gruppen för ytterligare information.
Startchecklista för Cloud SQL
Checklistsektionen i dokumentationen ger en översikt över rekommenderade aktiviteter när du ställer in en produktionsklar Cloud SQL för PostgreSQL-instans. I synnerhet måste applikationer utformas för att hantera Cloud SQL-omstarter. Även om det inte finns några gränser för frågor per sekund finns det anslutningsgränser.
Stöd för PostgreSQL GCP-tillägg
Cloud SQL stöder de flesta av PostgreSQL-tilläggen. När detta skrivs av 52 community-tillägg finns det 22 tillägg som inte stöds och 2 PostGIS-tillägg som inte stöds.
postgis_raster
postgis_sfcgal
För PostgreSQL-tillägg kan vi antingen granska PostgreSQL-bidragsförrådet, eller bättre, diff utdata från pg_available_extensions:
Uppströms:
~ $ psql -U postgres -p 54396
Pager usage is off.
psql (11.4, server 9.6.14)
Type "help" for help.
[email protected][local]:54396 postgres# select * from pg_available_extensions order by name;
name | default_version | installed_version | comment
--------------------+-----------------+-------------------+----------------------------------------------------------------------
adminpack | 1.1 | | administrative functions for PostgreSQL
autoinc | 1.0 | | functions for autoincrementing fields
bloom | 1.0 | | bloom access method - signature file based index
btree_gin | 1.0 | | support for indexing common datatypes in GIN
btree_gist | 1.2 | | support for indexing common datatypes in GiST
chkpass | 1.0 | | data type for auto-encrypted passwords
citext | 1.3 | | data type for case-insensitive character strings
cube | 1.2 | | data type for multidimensional cubes
dblink | 1.2 | | connect to other PostgreSQL databases from within a database
dict_int | 1.0 | | text search dictionary template for integers
dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing
earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth
file_fdw | 1.0 | | foreign-data wrapper for flat file access
fuzzystrmatch | 1.1 | | determine similarities and distance between strings
hstore | 1.4 | | data type for storing sets of (key, value) pairs
hstore_plperl | 1.0 | | transform between hstore and plperl
hstore_plperlu | 1.0 | | transform between hstore and plperlu
hstore_plpython2u | 1.0 | | transform between hstore and plpython2u
hstore_plpythonu | 1.0 | | transform between hstore and plpythonu
insert_username | 1.0 | | functions for tracking who changed a table
intagg | 1.1 | | integer aggregator and enumerator (obsolete)
intarray | 1.2 | | functions, operators, and index support for 1-D arrays of integers
isn | 1.1 | | data types for international product numbering standards
lo | 1.1 | | Large Object maintenance
ltree | 1.1 | | data type for hierarchical tree-like structures
ltree_plpython2u | 1.0 | | transform between ltree and plpython2u
ltree_plpythonu | 1.0 | | transform between ltree and plpythonu
moddatetime | 1.0 | | functions for tracking last modification time
pageinspect | 1.5 | | inspect the contents of database pages at a low level
pg_buffercache | 1.2 | | examine the shared buffer cache
pg_freespacemap | 1.1 | | examine the free space map (FSM)
pg_prewarm | 1.1 | | prewarm relation data
pg_stat_statements | 1.4 | | track execution statistics of all SQL statements executed
pg_trgm | 1.3 | | text similarity measurement and index searching based on trigrams
pg_visibility | 1.1 | | examine the visibility map (VM) and page-level visibility info
pgcrypto | 1.3 | | cryptographic functions
pgrowlocks | 1.2 | | show row-level locking information
pgstattuple | 1.4 | | show tuple-level statistics
plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language
postgres_fdw | 1.0 | | foreign-data wrapper for remote PostgreSQL servers
refint | 1.0 | | functions for implementing referential integrity (obsolete)
seg | 1.1 | | data type for representing line segments or floating-point intervals
sslinfo | 1.2 | | information about SSL certificates
tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab
tcn | 1.0 | | Triggered change notifications
timetravel | 1.0 | | functions for implementing time travel
tsearch2 | 1.0 | | compatibility package for pre-8.3 text search functions
tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit
tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit
unaccent | 1.1 | | text search dictionary that removes accents
uuid-ossp | 1.1 | | generate universally unique identifiers (UUIDs)
xml2 | 1.1 | | XPath querying and XSLT
Cloud SQL:
[email protected]:5432 postgres> select * from pg_available_extensions where name !~ '^postgis' order by name;
name | default_version | installed_version | comment
--------------------+-----------------+-------------------+--------------------------------------------------------------------
bloom | 1.0 | | bloom access method - signature file based index
btree_gin | 1.0 | | support for indexing common datatypes in GIN
btree_gist | 1.2 | | support for indexing common datatypes in GiST
chkpass | 1.0 | | data type for auto-encrypted passwords
citext | 1.3 | | data type for case-insensitive character strings
cube | 1.2 | | data type for multidimensional cubes
dict_int | 1.0 | | text search dictionary template for integers
dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing
earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth
fuzzystrmatch | 1.1 | | determine similarities and distance between strings
hstore | 1.4 | | data type for storing sets of (key, value) pairs
intagg | 1.1 | | integer aggregator and enumerator (obsolete)
intarray | 1.2 | | functions, operators, and index support for 1-D arrays of integers
isn | 1.1 | | data types for international product numbering standards
lo | 1.1 | | Large Object maintenance
ltree | 1.1 | | data type for hierarchical tree-like structures
pg_buffercache | 1.2 | | examine the shared buffer cache
pg_prewarm | 1.1 | | prewarm relation data
pg_stat_statements | 1.4 | | track execution statistics of all SQL statements executed
pg_trgm | 1.3 | | text similarity measurement and index searching based on trigrams
pgcrypto | 1.3 | | cryptographic functions
pgrowlocks | 1.2 | | show row-level locking information
pgstattuple | 1.4 | | show tuple-level statistics
plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language
sslinfo | 1.2 | | information about SSL certificates
tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab
tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit
tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit
unaccent | 1.1 | | text search dictionary that removes accents
uuid-ossp | 1.1 | | generate universally unique identifiers (UUIDs)
Tillägg som inte stöds i Cloud SQL:
adminpack 1.1 administrative functions for PostgreSQL
autoinc 1.0 functions for autoincrementing fields
dblink 1.2 connect to other PostgreSQL databases from within a database
file_fdw 1.0 foreign-data wrapper for flat file access
hstore_plperl 1.0 transform between hstore and plperl
hstore_plperlu 1.0 transform between hstore and plperlu
hstore_plpython2u 1.0 transform between hstore and plpython2u
hstore_plpythonu 1.0 transform between hstore and plpythonu
insert_username 1.0 functions for tracking who changed a table
ltree_plpython2u 1.0 transform between ltree and plpython2u
ltree_plpythonu 1.0 transform between ltree and plpythonu
moddatetime 1.0 functions for tracking last modification time
pageinspect 1.5 inspect the contents of database pages at a low level
pg_freespacemap 1.1 examine the free space map (FSM)
pg_visibility 1.1 examine the visibility map (VM) and page-level visibility info
postgres_fdw 1.0 foreign-data wrapper for remote PostgreSQL servers
refint 1.0 functions for implementing referential integrity (obsolete)
seg 1.1 data type for representing line segments or floating-point intervals
tcn 1.0 Triggered change notifications
timetravel 1.0 functions for implementing time travel
tsearch2 1.0 compatibility package for pre-8.3 text search functions
xml2 1.1 XPath querying and XSLT
Loggning
Operationer som utförs inom Cloud SQL loggas under fliken Aktivitet tillsammans med alla detaljer. Exempel från att skapa en instans, som visar alla instansdetaljer:
PostgreSQL-migrering till GCP
För att tillhandahålla migrering av lokala PostgreSQL-installationer använder Google pgBouncer.
Observera att det inte finns någon GCP-konsolguide för PostgreSQL-migreringar.
DBA Akta dig!
Hög tillgänglighet och replikering
En huvudnod kan inte övergå till en läsreplika. Samma avsnitt beskriver andra viktiga aspekter av läsrepliker:
- kan tas offline när som helst för patchning
- följ inte masternoden i en annan zon efter en failover – eftersom replikeringen är synkron kan detta påverka replikeringsfördröjningen
- det finns ingen lastbalansering mellan repliker, med andra ord, inga enstaka endpoint-applikationer kan pekas på
- storleken på replikinstansen måste vara minst storleken på huvudnoden
- ingen replikering mellan regioner
- repliker kan inte säkerhetskopieras
- alla repliker måste tas bort innan en huvudinstans kan återställas från säkerhetskopia eller raderas
- Kaskadereplikering är inte tillgänglig
Användare
Som standard är "molnets superanvändare" postgres som är medlem i rollen cloudsqlsuperuser. I sin tur ärver cloudsqlsuperuser standard PostgreSQL-rollerna:
[email protected]:5432 postgres> \du+ postgres
List of roles
Role name | Attributes | Member of | Description
-----------+------------------------+---------------------+-------------
postgres | Create role, Create DB | {cloudsqlsuperuser} |
[email protected]:5432 postgres> \du+ cloudsqlsuperuser
List of roles
Role name | Attributes | Member of | Description
-------------------+------------------------+--------------+-------------
cloudsqlsuperuser | Create role, Create DB | {pg_monitor} |
Observera att rollerna SUPERANVÄNDARE och REPLIKATION inte är tillgängliga.
Säkerhetskopiering och återställning
Säkerhetskopiering kan inte exporteras.
Säkerhetskopiering kan inte användas för att uppgradera en instans, dvs. återställa till en annan PostgreSQL-motor.
Funktioner som PITR, logisk replikering och JIT-kompilering är inte tillgängliga. Funktionsbegäranden kan lämnas in i Googles Issue Tracker.
Kryptering
Vid skapande av instanser är SSL/TLS aktiverat men inte verkställt:
I detta läge kan kryptering begäras, men certifikatvalidering är inte tillgänglig.
~ $ psql "sslmode=verify-ca user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"
psql: root certificate file "/home/lelu/.postgresql/root.crt" does not exist
Either provide the file or change sslmode to disable server certificate verification.
~ $ psql "sslmode=require user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"
Pager usage is off.
psql (11.4, server 9.6.11)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)
Type "help" for help.
Försök att ansluta med psql till en SSL-förekomst kommer att returnera ett självförklarande fel:
~ $ psql "sslmode=require user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"
psql: FATAL: connection requires a valid client certificate
Lagring
- Lagringsutrymmet kan ökas efter att instansen har skapats men aldrig minskas, så se upp för kostnader förknippade med det växande lagringsutrymmet, eller konfigurera ökningsgränsen.
- Lagringsutrymmet är begränsat till 30 TB.
CPU
Instanser kan skapas med mindre än en kärna, men alternativet är inte tillgängligt i Cloud SQL Console eftersom instansen måste skapas genom att ange en av exempelmaskintyperna, i det här fallet – nivå:
Exempel på att skapa en delad kodinstans med gcloud inuti Cloud Shell:
Antalet processorer är begränsat till 64, en relativt låg gräns för stora installationer, med tanke på att när 9.2 benchmarkades började avancerade servrar med 32 kärnor.
Förekomstplatser
Multiregional plats är endast tillgänglig för säkerhetskopiering.
Åtkomst via offentlig IP
Som standard aktiverar GCP Console Wizard endast åtkomst till offentlig IP-adress, men åtkomst nekas tills klientens nätverk har konfigurerats:
Underhåll
Uppdateringar kan överskrida underhållsfönstret och läsrepliker uppdateras när som helst.
Dokumentationen anger inte hur lång underhållsperioden är. Informationen ges när instansen skapas:
Ändringar av CPU-antal, minnesstorlek eller zonen där instansen är lokaliserad kräver att databasen är offline i flera minuter.
Användare
Cloud SQL använder termerna "roll" och "användare" omväxlande.
Hög tillgänglighet
Kostnaden i en mycket tillgänglig konfiguration är dubbelt så hög som fristående instans, och det inkluderar lagring.
Automatisk failover initieras efter cirka 60 sekunder efter att den primära noden blivit otillgänglig. Enligt Oracle MAA-rapport, översätts detta till $5 800 per minut förlust. Med tanke på att det tar 2 till 3 minuter innan applikationerna kan återansluta avbrottet fördubblas till tre gånger. Dessutom verkar intervallet på 60 sekunder inte vara ett konfigurerbart alternativ.
replikering
Läsrepliker kan inte nås med en enda slutpunkt, var och en får en ny IP-adress:
Regionala beständiga diskar ger dataredundans på bekostnad av skrivprestanda.
Cloud SQL kommer inte att övervinnas för att läsa repliker, därför kan läsare inte betraktas som en lösning med hög tillgänglighet
Externa repliker och externa masters stöds för närvarande inte.
Ansluter till instans
Google does not automatically renew the instance SSL certificates, however, both the initiation and rotation procedures can be automated.
If the application is built on the App Engine platform additional limits apply, such as 60 seconds for a database request to complete, 60 concurrent connections for PHP applications. The “App Engine Limits” section in Quotas and limits provides more details:
IP addresses in the range 172.17.0.0/16 are reserved.
Administration
Once started, operations cannot be canceled. Runaway queries can still be stopped by using the pg_terminate_backend and pg_cancel_backend PostgreSQL built-in functions.
A short demonstration using two psql sessions and starting a long running query in the second session:
[email protected]:5432 postgres> select now(); select pg_sleep(3600); select now();
now
-------------------------------
2019-07-16 02:08:18.739177+00
(1 row)
In the first session, cancel the long running query:
[email protected]:5432 postgres> select pid, client_addr, client_port, query, backend_start from pg_stat_activity where usename = 'postgres';
-[ RECORD 1 ]-+-------------------------------------------------------------------------------------------------------------
pid | 2182
client_addr | 173.180.222.170
client_port | 56208
query | select pid, client_addr, client_port, query, backend_start from pg_stat_activity where usename = 'postgres';
backend_start | 2019-07-16 01:57:34.99011+00
-[ RECORD 2 ]-+-------------------------------------------------------------------------------------------------------------
pid | 2263
client_addr | 173.180.222.170
client_port | 56276
query | select pg_sleep(3600);
backend_start | 2019-07-16 02:07:43.860829+00
[email protected]:5432 postgres> select pg_cancel_backend(2263); select now();
-[ RECORD 1 ]-----+--
pg_cancel_backend | t
-[ RECORD 1 ]----------------------
now | 2019-07-16 02:09:09.600399+00
Comparing the timestamps between the two sessions:
ERROR: canceling statement due to user request
now
-------------------------------
2019-07-16 02:09:09.602573+00
(1 row)
It’s a match!
While restarting an instance is a recommended method when attempting to resolve database instance issues, avoid restarting before the first restart completed.
Data Import and Export
CSV import/export is limited to one database.
Exporting data as an SQL dump that can be imported later, requires a custom pg_dump command.
To quote from the documentation:
pg_dump -U [USERNAME] --format=plain --no-owner --no-acl [DATABASE_NAME] \
| sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > [SQL_FILE].sql
Pricing
Charge Type | Instance ON | Instance OFF |
Storage | Yes | Yes |
Instance | No | Yes |
Felsökning
Logging
All actions are recorded and can be viewed under the Activity tab.
Resources
Review the Diagnosing Issues with Cloud SQL instances and Known issues sections in the documentation.
Slutsats
Although missing some important features the PostgreSQL DBA is used to, namely PITR and Logical Replication, Google Cloud SQL provides out of the box high-availability, replication, encryption, and automatic storage increase, just to name a few, making manage PostgreSQL an appealing solution for organizations looking to quickly deploy their PostgreSQL workloads or even migrating from Oracle.
Developers can take advantage of cheap instances such as shared CPU (less than one CPU).
Google approaches the PostgreSQL engine adoption in a conservative manner, the stable offering lagging behind current upstream by 3 versions.
Just as with any solution provider consider getting support which can come in handy during edge scenarios such as when instances are suspended.
For professional support, Google maintains a list of partners which currently includes one of the PostgreSQL professional services , namely EDB.