sql >> Database teknologi >  >> RDS >> PostgreSQL

Cloud Vendor Deep-Dive:PostgreSQL på Google Cloud Platform (GCP)

Hvor skal jeg starte?

Det bedste sted, jeg kunne finde at starte, var intet andet end den officielle dokumentation. Der er også en GCP Youtube-kanal for dem, der foretrækker multimedie. Da jeg fandt mig selv ind i Cloud SQL-dokumentationslandet, vendte jeg mig til Concepts, hvor vi er lovet at "udvikle en dyb forståelse" af produktet.

Så lad os komme i gang!

PostgreSQL Google Cloud-funktioner

Google Cloud SQL til PostgreSQL tilbyder alle de standardfunktioner, vi kan forvente af en administreret løsning:høj tilgængelighed med automatisk failover, automatisk sikkerhedskopiering, kryptering i hvile og under transport, avanceret logning og overvågning, og selvfølgelig en rig API til at interagere med alle tjenester.

Og for lidt af historien startede PostgreSQL-support i marts 2017, indtil da var den eneste understøttede databasemotor MySQL.

Cloud SQL kører PostgreSQL på Googles anden generation af computerplatform. Den fulde liste over funktioner er tilgængelig her og også her. Ved at gennemgå førstnævnte er det tydeligt, at der aldrig har været en First Generation-platform til PostgreSQL.

Databaser, der kører på anden generations platform, forventes at køre med hastigheder 7x hurtigere og drage fordel af 20x mere lagerkapacitet. Bloggen, der annoncerer Second Generation-platformen, går i detaljer med at køre sysbench-testen for at sammenligne Google Cloud SQL med den daværende hovedkonkurrent AWS i begge inkarnationer RDS og Aurora. Resultaterne overraskede mig, da de viser, at Cloud SQL klarer sig bedre, mens de seneste test udført ved hjælp af AWS Benchmark, der blev udgivet omkring et år senere, konkluderede det modsatte. Det er omkring samme tid PostgreSQL-understøttelse var tilgængelig. Mens jeg klør ved tanken om selv at køre benchmark, gætter jeg på, at der er to potentielle faktorer, der kunne have påvirket resultaterne:Googles sysbench benchmark brugte forskellige parametre, og AWS kan have forbedret deres produkter i løbet af den tid.

GCP PostgreSQL-kompatibilitet

Som forventet er Google Cloud SQL til PostgreSQL næsten en drop-in-erstatning for fællesskabsversionen og understøtter alle PL/pgSQL SQL proceduresprog.

Nogle funktioner er ikke tilgængelige på grund af sikkerhedsmæssige årsager, for eksempel SUPERBRUGER-adgang. Andre funktioner blev fjernet på grund af potentielle risici for produktets stabilitet og ydeevne. Endelig kan nogle muligheder og parametre ikke ændres, selvom anmodninger om at ændre denne adfærd kan foretages via Cloud SQL-diskussionsgruppen.

Cloud SQL er også trådkompatibel med PostgreSQL-protokollen.

Når det kommer til transaktionsisolering, følger Cloud SQL PostgreSQL-standardadfærden, der som standard er Read Committed isolationsniveau.

For nogle af serverkonfigurationsparametrene implementerer Cloud SQL forskellige intervaller af årsager, der er uforklarlige i dokumentationen, hvilket stadig er en vigtig ting at huske.

Netværk

Der er flere måder at oprette forbindelse til databasen på, afhængigt af om forekomsten er på et privat netværk eller et offentligt netværk (applikationer, der opretter forbindelse uden for GCP). Fælles for begge tilfælde er den foruddefinerede VPC, der administreres af Google, hvor alle Cloud SQL-databaseforekomster findes.

Privat IP

Klienter, der opretter forbindelse til en privat IP-adresse, dirigeres via en peering-forbindelse mellem de VPC'er, der hoster klienten, og henholdsvis databaseinstansen. Selvom det ikke er specifikt for PostgreSQL, er det vigtigt at gennemgå netværkskravene for at undgå forbindelsesproblemer. One gotcha:når den er aktiveret, kan den private IP-funktion ikke fjernes.

Opretter forbindelse fra eksterne applikationer

Forbindelser fra applikationer, der hostes uden for GCP, kan og bør krypteres. Derudover skal klientforbindelser og applikation installere det medfølgende klientcertifikat for at undgå de forskellige angreb. Proceduren for at generere og konfigurere certifikaterne er noget kompliceret og kræver brugerdefinerede værktøjer for at sikre, at certifikater fornyes med jævne mellemrum. Det kan være en af ​​grundene til, at Google tilbyder muligheden for at bruge Cloud SQL Proxy.

Opretter forbindelse ved hjælp af Cloud SQL Proxy

Opsætningen er ret ligetil, hvilket jeg faktisk har fundet ud af er tilfældet for alle instruktioner i Google Cloud SQL-dokumentationen. På en relateret note er det meget simpelt at indsende dokumentationsfeedback, og skærmbilledefunktionen var den første for mig.

Der er flere måder at godkende proxyforbindelser på, og jeg valgte at konfigurere en tjenestekonto, ligesom det er beskrevet i Cloud SQL Proxy-dokumentationen.

Når alt er på plads, er det tid til at starte proxyen:

~/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

For at oprette forbindelse til fjerninstansen bruger vi nu proxyen ved at angive localhost i stedet for instansens offentlige IP-adresse:

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

Bemærk, at der ikke er nogen kryptering, da vi opretter forbindelse lokalt, og proxyen sørger for at kryptere trafikken, der flyder ind i skyen.

En almindelig DBA-opgave er at se forbindelserne til databasen ved at forespørge pg_stat_activity. Dokumentationen angiver, at proxyforbindelser vil blive vist som cloudsqlproxy~1.2.3.4, så jeg ønskede at bekræfte denne påstand. Jeg har åbnet to sessioner som postgres, den ene via proxy og den anden fra min hjemmeadresse, så følgende forespørgsel vil duge:

[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 ser ud til, at proxyforbindelserne i stedet er identificeret som client_port ==-1 og en tom client_addr. Dette kan yderligere bekræftes ved at sammenligne tidsstemplerne for backend_start og proxy-log nedenfor:

2019/07/14 21:25:37 New connection for "omiday:us-west1:s9s201907141919"

PostgreSQL High Availability på Google Cloud

Google Cloud SQL til PostgreSQL sikrer høj tilgængelighed ved hjælp af synkronisering af lagerdata på lavt niveau ved hjælp af regionale persistente diske. Failover er automatisk med et hjerteslagskontrolinterval på et sekund, og en failover udløses efter ca. 60 sekunder.

Ydeevne og overvågning

Sektionen Ydelse i dokumentationen påpeger generelle tommelfingerregler i skyen:hold databasen (både forfattere og læsereplikaer) tæt på applikationen, og skaler instansen lodret. Det, der skiller sig ud, er anbefalingen om at klargøre en instans med mindst 60 GB RAM, når ydeevnen er vigtig.

Stackdriver giver overvågning og logning samt adgang til PostgreSQL-logfiler:

Adgangskontrol

Dette er implementeret på projekt-, instans- og databaseniveau.

Projektadgangskontrol

Projektadgangskontrol er den skyspecifikke adgangskontrol — den bruger konceptet med IAM-roller for at give projektmedlemmer (brugere, grupper eller tjenestekonti) adgang til forskellige Cloud SQL-ressourcer. Listen over roller er noget selvforklarende, for en detaljeret beskrivelse af hver rolle og tilhørende tilladelser henvises til APIs Explorer eller Cloud SQL Admin API for et af de understøttede programmeringssprog.

For at demonstrere, hvordan IAM-roller fungerer, lad os oprette en skrivebeskyttet (seer) tjenestekonto:

Start en ny proxy-instans på port 5433 ved hjælp af den servicekonto, der er knyttet til seerrolle:

~/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

Åbn en psql-forbindelse til 127.0.0.1:5433:

~ $ psql "user=postgres dbname=postgres password=postgres hostaddr=127.0.0.1 port=5433"

Kommandoen afsluttes med:

psql: server closed the connection unexpectedly

      This probably means the server terminated abnormally

      before or while processing the request.

Ups! Lad os tjekke proxy-logfilerne:

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

Forekomstadgangskontrol

Adgang på instansniveau afhænger af forbindelseskilden:

Kombinationen af ​​godkendelsesmetoder erstatter den allestedsnærværende pg_hba.conf.

Sikkerhedskopiering og gendannelse

Som standard er automatiske sikkerhedskopier aktiveret:

Mens sikkerhedskopier ikke påvirker databasens læse- og skriveoperationer, påvirker de ydeevnen og derfor anbefales det, at sikkerhedskopiering planlægges i perioder med lavere aktivitet.

For redundans kan sikkerhedskopier gemmes i to regioner (ekstra gebyrer pålægges) med mulighed for at vælge tilpassede placeringer.

For at spare lagerplads skal du bruge komprimering. .gz-komprimerede filer gendannes gennemsigtigt.

Cloud SQL understøtter også instanskloning. For det mindste datasæt tog operationen omkring 3 minutter:

Starttidspunkt for kloning 10:07:10:

PostgreSQL-logfilerne viser, at PostgreSQL blev tilgængelig på den klonede instans kl. 10:10:47:

Det er stadig en nemmere måde end sikkerhedskopiering og gendannelse til at oprette en kopi på af en instans med henblik på test, udvikling eller fejlfinding.

Google Cloud Best Practices for PostgreSQL

  • Konfigurer en aktiveringspolitik for forekomster, der ikke skal køre 24/7.
  • Placer databaseforekomsten i samme zone eller region med compute engine-forekomsterne og App Engine-applikationerne for at undgå netværksforsinkelse.
  • Opret databaseforekomsten i samme zone som Compute Engine. Hvis du bruger en anden forbindelsestype, accepterer du standardzonen.
  • Brugere, der er oprettet ved hjælp af Cloud SQL, er som standard cloud-superbrugere. Brug PostgreSQL ALTER ROLE til at ændre deres tilladelser.
  • Brug den seneste Cloud SQL Proxy-version.
  • Forekomstnavne bør indeholde et tidsstempel for at kunne genbruge navnet ved sletning og genskabelse af forekomster.
  • pg_dump inkluderer som standard store objekter. Hvis databasen indeholder BLOB-er, skal du udføre dumpet i perioder med lav aktivitet for at forhindre, at forekomsten ikke reagerer.
  • Brug gcloud sql connect til hurtigt at oprette forbindelse fra en ekstern klient uden behov for at hvidliste klientens IP-adresse.
  • Abonner på at annoncere gruppe for at modtage meddelelser om produktopdateringer og advarsler såsom problemer ved oprettelse af forekomster:
  • Sørg for, at applikationer implementerer teknikker til administration af databaseforbindelser.
  • Forekomster, der er stoppet i mere end 90 dage, slettes, medmindre de ikke er i en suspenderet tilstand.
  • Udfør en manuel failover for at teste applikationsadfærd og nedetidslængde.
  • Brug standardversionen af ​​motoren.
  • Lagerplads for forekomster, der er konfigureret til automatisk at øge lagerpladsen, vil vokse i trin på 25 GB. Da lagerplads ikke kan genvindes, skal du indstille en stigningsgrænse for den estimerede størrelse af databasen over den næste budgetcyklus, og overvåge løbske forespørgsler,
  • Brug den "tidligere" vedligeholdelsestid til testforekomster:
  • Applikationer bør bruge aktive forbindelser og eksponentiel backoff for hurtigt at komme sig efter en genstart af forekomsten.
  • Applikationer, der er afhængige af læste replikaer, bør overveje at bruge 3 replikaer for at undgå problemer forårsaget af svigtende regionale persistente diske, der fører til, at begge replikaer bliver utilgængelige.
  • Konfigurer læsereplikaer for at forbedre læseydelsen.
  • Genstart af instans er påkrævet, når du opdaterer listen over IP-adresser, der har adgang til en offentlig instans, for at afbryde eksisterende forbindelser.
  • Gennemgå den dedikerede StackOverflow Cloud SQL-gruppe for at få yderligere oplysninger.

Startcheckliste til Cloud SQL

Tjeklisteafsnittet i dokumentationen giver et overblik over anbefalede aktiviteter ved opsætning af en produktionsklar Cloud SQL til PostgreSQL-instans. Specielt skal applikationer være designet til at håndtere Cloud SQL-genstarter. Selvom der ikke er nogen grænser for forespørgsler pr. sekund, er der forbindelsesgrænser.

Understøttelse af PostgreSQL GCP-udvidelser

Cloud SQL understøtter de fleste PostgreSQL-udvidelser. Når dette skrives, er der ud af 52 fællesskabsudvidelser 22 ikke-understøttede udvidelser og 2 ikke-understøttede PostGIS-udvidelser.

postgis_raster

postgis_sfcgal

For PostgreSQL-udvidelser kan vi enten gennemgå PostgreSQL-bidragslageret, eller bedre, differentiere outputtet af pg_available_extensions:

Opstrø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)

Ikke-understøttede udvidelser 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

Logføring

Operationer udført i Cloud SQL logges under fanen Aktivitet sammen med alle detaljerne. Eksempel fra oprettelse af en instans, der viser alle instansdetaljer:

PostgreSQL-migrering til GCP

For at give migrering af lokale PostgreSQL-installationer udnytter Google pgBouncer.

Bemærk, at der ikke er nogen GCP-konsolguide til PostgreSQL-migreringer.

DBA Pas på!

Høj tilgængelighed og replikering

En masterknude kan ikke failover til en læst replika. Det samme afsnit beskriver andre vigtige aspekter af læste replikaer:

  • kan til enhver tid tages offline til patching
  • følg ikke masternoden i en anden zone efter en failover – da replikeringen er synkron, kan dette påvirke replikeringsforsinkelsen
  • der er ingen belastningsbalancering mellem replikaer, med andre ord, ingen enkelt endepunktsapplikationer kan peges på
  • replikforekomststørrelsen skal mindst være størrelsen af ​​masterknuden
  • ingen replikering på tværs af regioner
  • kopier kan ikke sikkerhedskopieres
  • alle replikaer skal slettes, før en masterinstans kan gendannes fra backup eller slettes
  • Kaskadende replikering er ikke tilgængelig

Brugere

Som standard er "cloud superuser" postgres, som er medlem af cloudsqlsuperuser-rollen. Til gengæld arver cloudsqlsuperuser standard PostgreSQL-rollerne:

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

Bemærk, at rollerne SUPERBRUGER og REPLIKATION ikke er tilgængelige.

Sikkerhedskopiering og gendannelse

Sikkerhedskopier kan ikke eksporteres.

Sikkerhedskopier kan ikke bruges til at opgradere en instans, dvs. gendannelse til en anden PostgreSQL-motor.

Funktioner såsom PITR, logisk replikering og JIT-kompilering er ikke tilgængelige. Funktionsanmodninger kan indgives i Googles Issue Tracker.

Kryptering

Ved oprettelse af forekomster er SSL/TLS aktiveret, men ikke håndhævet:

I denne tilstand kan der anmodes om kryptering, men certifikatvalidering er ikke tilgængelig.

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

Forsøg på at oprette forbindelse ved hjælp af psql til en SSL-tvungen instans vil returnere en selvforklarende fejl:

~ $ psql "sslmode=require user=postgres dbname=postgres password=postgres hostaddr=35.233.149.65"

psql: FATAL:  connection requires a valid client certificate

Lagring

  • Lagerplads kan øges efter oprettelse af forekomster, men aldrig reduceres, så pas på omkostningerne forbundet med den voksende lagerplads, eller konfigurer stigningsgrænsen.
  • Lagerplads er begrænset til 30 TB.

CPU

Forekomster kan oprettes med mindre end én kerne, men muligheden er ikke tilgængelig i Cloud SQL Console, da forekomsten skal oprettes ved at angive en af ​​eksempelmaskintyperne, i dette tilfælde – niveau:

Eksempel på oprettelse af en delt kodeforekomst ved hjælp af gcloud inde i Cloud Shell:

Antallet af CPU'er er begrænset til 64, en relativt lav grænse for store installationer i betragtning af, at dengang 9.2 blev benchmarked, startede avancerede servere med 32 kerner.

Forekomstplaceringer

Multiregional placering er kun tilgængelig for sikkerhedskopiering.

Adgang via offentlig IP

Som standard aktiverer GCP Console Wizard kun offentlig IP-adresseadgang, dog nægtes adgang, indtil klientens netværk er konfigureret:

Vedligeholdelse

Opdateringer kan overskride vedligeholdelsesvinduet, og læste replikaer opdateres til enhver tid.

Dokumentationen angiver ikke, hvor lang varigheden af ​​vedligeholdelsesvinduet er. Oplysningerne gives ved oprettelse af instansen:

Ændringer af CPU-antal, hukommelsesstørrelse eller den zone, hvor forekomsten er placeret kræver, at databasen er offline i adskillige minutter.

Brugere

Cloud SQL bruger udtrykkene "rolle" og "bruger" i flæng.

Høj tilgængelighed

Omkostningerne i en meget tilgængelig konfiguration er det dobbelte af den selvstændige instans, og det inkluderer lagerplads.

Automatisk failover startes efter ca. 60 sekunder efter, at den primære node er blevet utilgængelig. Ifølge Oracle MAA-rapporten omsættes dette til et tab på $5.800 pr. minut. I betragtning af, at det tager 2 til 3 minutter, før applikationerne kan tilslutte igen, fordobles afbrydelsen til tredobling. Derudover ser hjerteslagsintervallet på 60 sekunder ikke ud til at være en konfigurerbar mulighed.

replikering

Læste replikaer kan ikke tilgås ved hjælp af et enkelt slutpunkt, der hver modtager en ny IP-adresse:

Regionale persistente diske giver dataredundans på bekostning af skriveydeevne.

Cloud SQL vil ikke failover for at læse replikaer, derfor kan læsere ikke betragtes som en løsning med høj tilgængelighed

Eksterne replikaer og eksterne mastere er i øjeblikket ikke understøttet.

Opretter forbindelse til forekomst

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

Troubleshooting

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.

Konklusion

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.


  1. Vis alle triggere i Oracle-databasen

  2. Meddelelse af den generelle tilgængelighed af SQL Secure 4.0

  3. Sådan installeres Oracle Linux Automation Manager (alias "Oracle Ansible Tower")

  4. Modellering af en database til registrering af salg. Del 1