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

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

Kde začít?

Nejlepší místo, kde jsem mohl začít, nebylo nic jiného než oficiální dokumentace. Pro ty, kteří preferují multimédia, existuje také kanál GCP Youtube. Jakmile jsem se ocitl v zemi dokumentace Cloud SQL, obrátil jsem se na Concepts, kde nám bylo slíbeno „rozvinout hluboké porozumění“ produktu.

Takže můžeme začít!

Funkce Google Cloud PostgreSQL

Google Cloud SQL pro PostgreSQL nabízí všechny standardní funkce, které bychom očekávali od spravovaného řešení:vysokou dostupnost s automatickým převzetím služeb při selhání, automatické zálohování, šifrování v klidu a při přenosu, pokročilé protokolování a monitorování a samozřejmě bohaté API pro interakci se všemi službami.

A trochu historie, podpora PostgreSQL začala v březnu 2017, do té doby byl jediným podporovaným databázovým strojem MySQL.

Cloud SQL spouští PostgreSQL na počítačové platformě druhé generace společnosti Google. Úplný seznam funkcí je k dispozici zde a také zde. Z přezkoumání prvního je zřejmé, že platforma první generace pro PostgreSQL nikdy neexistovala.

Očekává se, že databáze běžící na platformě druhé generace poběží rychlostí 7x rychleji a těží z 20x větší úložné kapacity. Blog oznamující platformu Second Generation se zabývá podrobnostmi spuštění testu sysbench, aby porovnal Google Cloud SQL s tehdejším hlavním konkurentem AWS v obou inkarnacích RDS a Aurora. Výsledky mě překvapily, protože ukazují, že Cloud SQL funguje lépe, zatímco nedávné testy provedené pomocí AWS Benchmark vydaného o rok později dospěly k opačnému závěru. To je přibližně ve stejnou dobu, kdy byla k dispozici podpora PostgreSQL. I když mě svrbí představa, že bych si spustil benchmark sám, hádám, že existují dva potenciální faktory, které mohly ovlivnit výsledky:benchmark sysbench společnosti Google používal jiné parametry a AWS možná za tu dobu zlepšila své produkty.

Kompatibilita GCP PostgreSQL

Jak se očekávalo, Google Cloud SQL pro PostgreSQL je téměř náhradní náhradou za komunitní verzi a podporuje všechny procedurální jazyky PL/pgSQL SQL.

Některé funkce nejsou z bezpečnostních důvodů dostupné, například přístup SUPERUSER. Ostatní funkce byly odstraněny kvůli potenciálním rizikům pro stabilitu a výkon produktu. A konečně, některé možnosti a parametry nelze změnit, ačkoli požadavky na změnu tohoto chování lze podat prostřednictvím diskusní skupiny Cloud SQL.

Cloud SQL je také drátově kompatibilní s protokolem PostgreSQL.

Pokud jde o izolaci transakcí, Cloud SQL se řídí výchozím chováním PostgreSQL, přičemž výchozí je úroveň izolace Read Committed.

U některých konfiguračních parametrů serveru Cloud SQL implementuje různé rozsahy z důvodů nevysvětlených v dokumentaci, což je stále důležité si pamatovat.

Sítě

Existuje několik způsobů připojení k databázi v závislosti na tom, zda je instance v privátní síti nebo ve veřejné síti (aplikace připojující se mimo GCP). Pro oba případy je společné předdefinované VPC spravované společností Google, kde jsou umístěny všechny instance databáze Cloud SQL.

Soukromá IP

Klienti připojující se k soukromé IP adrese jsou směrováni prostřednictvím peeringového připojení mezi virtuálními počítači hostujícími klienta a instancí databáze. Ačkoli to není specifické pro PostgreSQL, je důležité zkontrolovat síťové požadavky, abyste se vyhnuli problémům s připojením. One gotcha:jakmile je povolena, schopnost privátní IP nemůže být odstraněna.

Připojování z externích aplikací

Spojení z aplikací hostovaných mimo GCP mohou a měla by být šifrována. Navíc, aby se zabránilo různým útokům, klientská připojení a aplikace musí nainstalovat poskytnutý klientský certifikát. Postup pro generování a konfiguraci certifikátů je poněkud komplikovaný a vyžaduje vlastní nástroje, které zajistí, že certifikáty budou pravidelně obnovovány. To může být jeden z důvodů, proč Google nabízí možnost použití Cloud SQL Proxy.

Připojení pomocí Cloud SQL Proxy

Nastavení je poměrně přímočaré, což jsem ve skutečnosti zjistil u všech pokynů v dokumentaci Google Cloud SQL. V souvislosti s tím je odesílání zpětné vazby k dokumentaci smrtelně jednoduché a funkce snímku obrazovky byla pro mě první.

Existuje několik způsobů, jak autorizovat připojení proxy, a já jsem se rozhodl nakonfigurovat účet služby, jak je uvedeno v dokumentaci Cloud SQL Proxy.

Jakmile je vše na svém místě, je čas spustit proxy:

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

Pro připojení ke vzdálené instanci nyní používáme proxy se zadáním localhost namísto veřejné IP adresy instance:

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

Upozorňujeme, že neexistuje žádné šifrování, protože se připojujeme místně a server proxy se stará o šifrování provozu proudícího do cloudu.

Běžným úkolem DBA je prohlížení připojení k databázi dotazem na pg_stat_activity. Dokumentace uvádí, že připojení proxy budou zobrazena jako cloudsqlproxy~1.2.3.4, takže jsem chtěl toto tvrzení ověřit. Otevřel jsem dvě relace jako postgres, jednu přes proxy a druhou z mé domácí adresy, takže postačí následující dotaz:

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

Zdá se, že připojení proxy jsou místo toho identifikována jako client_port ==-1 a prázdné client_addr. To lze dodatečně potvrdit porovnáním časových razítek pro backend_start a protokol proxy níže:

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

Vysoká dostupnost PostgreSQL na Google Cloud

Google Cloud SQL pro PostgreSQL zajišťuje vysokou dostupnost pomocí nízkoúrovňové synchronizace dat úložiště pomocí regionálních trvalých disků. Přepnutí při selhání je automatické, s intervalem kontroly srdečního tepu jedna sekunda a přepnutí při selhání se spustí přibližně po 60 sekundách.

Výkon a sledování

Oddíl Výkon v dokumentaci poukazuje na obecná pravidla cloudu:databázi (zapisovací i čtené repliky) ponechejte blízko aplikace a vertikálně škálujte instanci. Co vyniká, je doporučení zřídit instanci s alespoň 60 GB RAM, když je důležitý výkon.

Stackdriver poskytuje monitorování a protokolování a také přístup k protokolům PostgreSQL:

Řízení přístupu

Toto je implementováno na úrovni projektu, instance a databáze.

Řízení přístupu k projektu

Řízení přístupu k projektu je řízení přístupu specifické pro cloud – využívá koncept rolí IAM, aby umožnil členům projektu (uživatelům, skupinám nebo servisním účtům) přístup k různým zdrojům Cloud SQL. Seznam rolí je poněkud samovysvětlující, podrobný popis každé role a souvisejících oprávnění naleznete v Průzkumníkovi rozhraní API nebo v rozhraní Cloud SQL Admin API pro jeden z podporovaných programovacích jazyků.

Chceme-li předvést, jak fungují role IAM, vytvořte servisní účet pouze pro čtení (prohlížeč):

Spusťte novou instanci proxy na portu 5433 pomocí účtu služby spojeného s role diváka:

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

Otevřete připojení psql k 127.0.0.1:5433:

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

Příkaz se ukončí s:

psql: server closed the connection unexpectedly

      This probably means the server terminated abnormally

      before or while processing the request.

Jejda! Podívejme se na protokoly proxy:

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

Řízení přístupu k instancím

Přístup na úrovni instance závisí na zdroji připojení:

Kombinace metod autorizace nahrazuje všudypřítomný pg_hba.conf.

Zálohování a obnovení

Ve výchozím nastavení jsou automatické zálohy povoleny:

Zálohy sice neovlivňují operace čtení a zápisu databáze, ale ovlivňují výkon a proto se doporučuje naplánovat zálohování na období nižší aktivity.

Z důvodu redundance lze zálohy ukládat ve dvou oblastech (za příplatek) s možností výběru vlastních umístění.

Chcete-li ušetřit místo v úložišti, použijte kompresi. Komprimované soubory .gz jsou transparentně obnoveny.

Cloud SQL také podporuje klonování instancí. U nejmenší datové sady trvala operace asi 3 minuty:

Čas zahájení klonování 10:07:10:

Protokoly PostgreSQL ukazují, že PostgreSQL byl dostupný na klonované instanci v 10:10:47:

To je stále snazší způsob vytvoření kopie než zálohování a obnovení instance pro účely testování, vývoje nebo odstraňování problémů.

Doporučené postupy Google Cloud pro PostgreSQL

  • Nakonfigurujte zásady aktivace pro instance, které nemusí být spuštěny 24/7.
  • Umístěte instanci databáze do stejné zóny nebo oblasti s instancemi výpočetního stroje a aplikacemi App Engine, abyste se vyhnuli latenci sítě.
  • Vytvořte instanci databáze ve stejné zóně jako výpočetní stroj. Pokud používáte jakýkoli jiný typ připojení, přijměte výchozí zónu.
  • Uživatelé vytvoření pomocí Cloud SQL jsou ve výchozím nastavení superuživatelé cloudu. K úpravě jejich oprávnění použijte PostgreSQL ALTER ROLE.
  • Používejte nejnovější verzi Cloud SQL Proxy.
  • Názvy instancí by měly obsahovat časové razítko, aby bylo možné název znovu použít při mazání a opětovném vytváření instancí.
  • Výchozí nastavení pg_dump zahrnuje velké objekty. Pokud databáze obsahuje objekty BLOB, proveďte výpis během období nízké aktivity, abyste zabránili tomu, aby instance přestala reagovat.
  • Pomocí gcloud sql connect se můžete rychle připojit z externího klienta, aniž byste museli zadávat IP adresu klienta na seznam povolených.
  • Přihlaste se k odběru oznamovací skupiny, abyste mohli dostávat upozornění na aktualizace produktu a upozornění, jako jsou problémy při vytváření instancí:
  • Zajistěte, aby aplikace implementovaly techniky správy připojení k databázi.
  • Instance zastavené na více než 90 dní budou smazány, pokud nejsou v pozastaveném stavu.
  • Proveďte ruční převzetí služeb při selhání, abyste otestovali chování aplikace a délku výpadku.
  • Použijte výchozí verzi motoru.
  • Úložný prostor pro instance nakonfigurované k automatickému navyšování úložiště se bude zvětšovat po 25 GB. Vzhledem k tomu, že úložný prostor nelze získat zpět, nastavte limit navýšení odhadované velikosti databáze během příštího rozpočtového cyklu a sledujte nekontrolovatelné dotazy,
  • Pro testovací instance použijte „dřívější“ načasování údržby:
  • Aplikace by měly používat aktivní připojení a exponenciální stahování, aby se po restartu instance rychle obnovily.
  • Aplikace spoléhající na repliky pro čtení by měla zvážit použití 3 replik, aby se předešlo problémům způsobeným selháním regionálních perzistentních disků vedoucích k nedostupnosti obou replik.
  • Nakonfigurujte repliky čtení, abyste zlepšili výkon čtení.
  • Restart instance je vyžadován při aktualizaci seznamu IP adres s povoleným přístupem k veřejné instanci za účelem odpojení stávajících připojení.
  • Další informace naleznete ve vyhrazené skupině StackOverflow Cloud SQL.

Spustit kontrolní seznam pro Cloud SQL

Část kontrolního seznamu v dokumentaci poskytuje přehled doporučených činností při nastavování cloud SQL pro instanci PostgreSQL připravené k produkci. Zejména aplikace musí být navrženy tak, aby zvládly restartování Cloud SQL. I když neexistují žádné limity dotazů za sekundu, existují limity připojení.

Podpora rozšíření GCP pro PostgreSQL

Cloud SQL podporuje většinu rozšíření PostgreSQL. V době psaní tohoto článku z 52 komunitních rozšíření existuje 22 nepodporovaných rozšíření a 2 nepodporovaná rozšíření PostGIS.

postgis_raster

postgis_sfcgal

Pro rozšíření PostgreSQL můžeme buď zkontrolovat repozitář příspěvků PostgreSQL, nebo lépe porovnat výstup pg_available_extensions:

Odchozí:

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

Nepodporovaná rozšíření v 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

Protokolování

Operace prováděné v rámci Cloud SQL jsou protokolovány na kartě Aktivita spolu se všemi podrobnostmi. Příklad z vytvoření instance se zobrazením všech podrobností o instanci:

Migrace PostgreSQL na GCP

K zajištění migrace místních instalací PostgreSQL využívá Google výhod pgBouncer.

Všimněte si, že pro migrace PostgreSQL neexistuje žádný průvodce konzolí GCP.

DBA Pozor!

Vysoká dostupnost a replikace

Hlavní uzel nemůže přejít při selhání do repliky pro čtení. Stejná část nastiňuje další důležité aspekty čtení replik:

  • lze kdykoli přepnout do režimu offline za účelem opravy
  • nesledujte hlavní uzel v jiné zóně po převzetí služeb při selhání – protože replikace je synchronní, může to ovlivnit zpoždění replikace
  • mezi replikami neexistuje žádné vyrovnávání zátěže, jinými slovy, nelze odkazovat na žádné aplikace s jedním koncovým bodem
  • velikost instance repliky musí být alespoň velikost hlavního uzlu
  • žádná replikace napříč oblastmi
  • repliky nelze zálohovat
  • před obnovením nebo odstraněním hlavní instance ze zálohy je nutné odstranit všechny repliky
  • kaskádová replikace není k dispozici

Uživatelé

Ve výchozím nastavení je „superuživatel cloudu“ postgres, který je členem role cloudsqlsuperuser. Cloudsqlsuperuser zase zdědí výchozí role PostgreSQL:

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

Upozorňujeme, že role SUPERUSER a REPLICATION nejsou dostupné.

Zálohování a obnovení

Zálohy nelze exportovat.

Zálohy nelze použít k upgradu instance, tj. k obnovení do jiného enginu PostgreSQL.

Funkce jako PITR, logická replikace a kompilace JIT nejsou dostupné. Žádosti o funkce lze podat v nástroji Google's Issue Tracker.

Šifrování

Při vytváření instance je SSL/TLS povoleno, ale není vynuceno:

V tomto režimu lze požadovat šifrování, ale ověření certifikátu není k dispozici.

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

Pokus o připojení pomocí psql k instanci vynucené SSL vrátí samovysvětlující chybu:

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

psql: FATAL:  connection requires a valid client certificate

Úložiště

  • Úložiště lze po vytvoření instance zvětšit, ale nikdy jej nesnížit, takže dávejte pozor na náklady spojené s rostoucím úložným prostorem nebo nakonfigurujte limit navýšení.
  • Úložiště je omezeno na 30 TB.

CPU

Instance lze vytvořit s méně než jedním jádrem, tato možnost však není v Cloud SQL Console k dispozici, protože instance musí být vytvořena zadáním jednoho ze vzorových typů počítačů, v tomto případě – úroveň:

Příklad vytvoření instance sdíleného kódu pomocí gcloud v Cloud Shell:

Počet CPU je omezen na 64, což je relativně nízký limit pro velké instalace, vezmeme-li v úvahu, že v době, kdy se testovala verze 9.2, začínaly špičkové servery na 32 jádrech.

Umístění instancí

Multiregionální umístění je k dispozici pouze pro zálohy.

Přístup přes veřejnou IP

Průvodce konzolou GCP ve výchozím nastavení povoluje pouze přístup k veřejné IP adrese, přístup je však odepřen, dokud není nakonfigurována síť klienta:

Údržba

Aktualizace mohou přesáhnout dobu údržby a přečtené repliky jsou aktualizovány kdykoli.

Dokumentace neuvádí, jak dlouhé je období údržby. Informace jsou poskytovány při vytváření instance:

Změny počtu CPU, velikosti paměti nebo zóny, kde je instance location vyžaduje, aby byla databáze několik minut offline.

Uživatelé

Cloud SQL používá termíny „role“ a „uživatel“ zaměnitelně.

Vysoká dostupnost

Cena ve vysoce dostupné konfiguraci je dvojnásobná než u samostatné instance, a to včetně úložiště.

Automatické převzetí služeb při selhání je zahájeno přibližně 60 sekund poté, co se primární uzel stane nedostupným. Podle zprávy Oracle MAA to znamená ztrátu 5 800 $ za minutu. Vzhledem k tomu, že trvá 2 až 3 minuty, než se aplikace znovu připojí, výpadek se zdvojnásobí až ztrojnásobí. Navíc se nezdá, že by interval 60 sekund prezenčního signálu byl konfigurovatelnou možností.

Replikace

Read replicas cannot be accessed using a single endpoint, each receiving a new IP address:

Regional persistent disks provide data redundancy at the cost of write performance.

Cloud SQL will not failover to read replicas, hence readers cannot be considered a high availability solution

External replicas and external masters are currently not supported.

Connecting to Instance

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.

Závěr

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. Vložení obrázku do BLOB Oracle 10g

  2. Jak převést řetězec na datum v PostgreSQL

  3. Jak vytvořit podformulář z tabulky v Accessu 2016

  4. TSQL Try / Catch within Transaction nebo naopak?