PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Szczegółowe informacje na temat dostawców usług w chmurze:PostgreSQL na platformie Google Cloud (GCP)

Gdzie zacząć?

Najlepszym miejscem, jakie mogłem znaleźć na początek, była oficjalna dokumentacja. Istnieje również kanał GCP Youtube dla tych, którzy preferują multimedia. Gdy znalazłem się w krainie dokumentacji Cloud SQL, zwróciłem się do Concepts, gdzie obiecano nam „opracować głębokie zrozumienie” produktu.

Więc zacznijmy!

Funkcje PostgreSQL Google Cloud

Google Cloud SQL dla PostgreSQL oferuje wszystkie standardowe funkcje, jakich można oczekiwać od rozwiązania zarządzanego:wysoką dostępność z automatycznym przełączaniem awaryjnym, automatyczne tworzenie kopii zapasowych, szyfrowanie w stanie spoczynku i podczas przesyłania, zaawansowane rejestrowanie i monitorowanie oraz oczywiście bogaty interfejs API do interakcji ze wszystkimi usługami.

I trochę historii, wsparcie PostgreSQL rozpoczęło się w marcu 2017, do tego czasu jedynym obsługiwanym silnikiem bazy danych był MySQL.

Cloud SQL uruchamia PostgreSQL na platformie obliczeniowej Google drugiej generacji. Pełna lista funkcji dostępna jest tutaj oraz tutaj. Przeglądając to pierwsze, widać wyraźnie, że nigdy nie istniała platforma pierwszej generacji dla PostgreSQL.

Oczekuje się, że bazy danych działające na platformie drugiej generacji będą działać z prędkością 7 razy większą i korzystać z 20 razy większej pojemności pamięci masowej. Blog zapowiadający platformę drugiej generacji omawia szczegóły uruchomienia testu sysbench w celu porównania Google Cloud SQL z ówczesnym głównym konkurentem AWS w obu wcieleniach RDS i Aurora. Wyniki mnie zaskoczyły, ponieważ pokazują lepszą wydajność Cloud SQL, podczas gdy ostatnie testy przeprowadzone przy użyciu AWS Benchmark opublikowanego około rok później wykazały coś przeciwnego. Mniej więcej w tym samym czasie, kiedy dostępna była obsługa PostgreSQL. Chociaż nie mogę się doczekać pomysłu samodzielnego uruchomienia testu porównawczego, zgaduję, że istnieją dwa potencjalne czynniki, które mogły wpłynąć na wyniki:test sysbench Google używał różnych parametrów, a AWS mógł w tym czasie ulepszyć swoje produkty.

Kompatybilność GCP z PostgreSQL

Zgodnie z oczekiwaniami Google Cloud SQL dla PostgreSQL jest prawie bezpośrednim zamiennikiem wersji społecznościowej i obsługuje wszystkie języki proceduralne PL/pgSQL SQL.

Niektóre funkcje są niedostępne ze względów bezpieczeństwa, na przykład dostęp SUPERUSER. Inne funkcje zostały usunięte ze względu na potencjalne ryzyko związane ze stabilnością i wydajnością produktu. Wreszcie, niektórych opcji i parametrów nie można zmienić, chociaż prośby o zmianę tego zachowania można zgłaszać za pośrednictwem grupy dyskusyjnej Cloud SQL.

Cloud SQL jest również kompatybilny z protokołem PostgreSQL.

Jeśli chodzi o izolację transakcji, Cloud SQL postępuje zgodnie z domyślnym zachowaniem PostgreSQL, domyślnie na poziomie izolacji Read Committed.

W przypadku niektórych parametrów konfiguracyjnych serwera Cloud SQL implementuje różne zakresy z powodów niewyjaśnionych w dokumentacji, co jest nadal ważną rzeczą do zapamiętania.

Sieć

Istnieje wiele sposobów łączenia się z bazą danych, w zależności od tego, czy instancja znajduje się w sieci prywatnej czy publicznej (aplikacje łączące się z zewnątrz GCP). Wspólne dla obu przypadków jest predefiniowana sieć VPC zarządzana przez Google, w której znajdują się wszystkie instancje bazy danych Cloud SQL.

Prywatny adres IP

Klienci łączący się z prywatnym adresem IP są kierowani przez połączenie równorzędne między VPC hostującym klienta i odpowiednio instancją bazy danych. Chociaż nie jest to specyficzne dla PostgreSQL, ważne jest, aby przejrzeć wymagania sieciowe, aby uniknąć problemów z połączeniem. Jedna uwaga:po włączeniu nie można usunąć prywatnego adresu IP.

Łączenie z zewnętrznych aplikacji

Połączenia z aplikacji hostowanych poza GCP mogą i powinny być szyfrowane. Dodatkowo, aby uniknąć różnych ataków, połączenia klienckie i aplikacja muszą zainstalować dostarczony certyfikat klienta. Procedura generowania i konfigurowania certyfikatów jest nieco skomplikowana, wymaga niestandardowych narzędzi, aby zapewnić okresowe odnawianie certyfikatów. To może być jeden z powodów, dla których Google oferuje opcję korzystania z Cloud SQL Proxy.

Łączenie za pomocą serwera proxy Cloud SQL

Konfiguracja jest dość prosta, co w rzeczywistości, jak stwierdziłem, dotyczy wszystkich instrukcji w dokumentacji Google Cloud SQL. W związku z tym przesyłanie opinii o dokumentacji jest bardzo proste, a funkcja zrzutów ekranu była dla mnie pierwszą.

Istnieje wiele sposobów autoryzacji połączeń proxy i zdecydowałem się skonfigurować konto usługi, tak jak opisano w dokumentacji Cloud SQL Proxy.

Gdy wszystko będzie gotowe, czas uruchomić 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

Aby połączyć się ze zdalną instancją, używamy teraz proxy, określając localhost zamiast publicznego adresu IP instancji:

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

Pamiętaj, że nie ma szyfrowania, ponieważ łączymy się lokalnie, a proxy zajmuje się szyfrowaniem ruchu przepływającego do chmury.

Częstym zadaniem DBA jest przeglądanie połączeń z bazą danych przez zapytanie pg_stat_activity. Dokumentacja stwierdza, że ​​połączenia proxy będą wyświetlane jako cloudqlproxy~1.2.3.4, więc chciałem zweryfikować to twierdzenie. Otworzyłem dwie sesje jako postgres, jedną przez proxy, a drugą z mojego adresu domowego, więc wystarczy następujące zapytanie:

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

Wygląda na to, że połączenia proxy są zamiast tego identyfikowane jako client_port ==-1 i pusty client_addr. Można to dodatkowo potwierdzić, porównując sygnatury czasowe dla backend_start i dziennika proxy poniżej:

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

Wysoka dostępność PostgreSQL w Google Cloud

Google Cloud SQL dla PostgreSQL zapewnia wysoką dostępność dzięki synchronizacji danych na niskim poziomie w pamięci masowej za pomocą regionalnych dysków stałych. Przełączenie awaryjne jest automatyczne, z interwałem sprawdzania pulsu wynoszącym jedną sekundę, a przełączenie awaryjne jest wyzwalane po około 60 sekundach.

Wydajność i monitorowanie

Sekcja dokumentacji dotycząca wydajności wskazuje ogólne zasady dotyczące chmury:trzymaj bazę danych (zarówno repliki piszące, jak i czytające) blisko aplikacji i skaluj instancję w pionie. Wyróżnia się zalecenie zapewnienia instancji z co najmniej 60 GB pamięci RAM, gdy ważna jest wydajność.

Stackdriver zapewnia monitorowanie i logowanie, a także dostęp do logów PostgreSQL:

Kontrola dostępu

Jest to zaimplementowane na poziomie projektu, instancji i bazy danych.

Kontrola dostępu do projektu

Kontrola dostępu do projektu to kontrola dostępu specyficzna dla chmury — wykorzystuje koncepcję ról uprawnień, aby umożliwić członkom projektu (użytkownikom, grupom lub kontom usług) dostęp do różnych zasobów Cloud SQL. Lista ról jest dość oczywista, szczegółowy opis każdej roli i powiązanych uprawnień można znaleźć w APIs Explorer lub Cloud SQL Admin API dla jednego z obsługiwanych języków programowania.

Aby zademonstrować, jak działają role uprawnień, utwórz konto usługi tylko do odczytu (przeglądającego):

Uruchom nową instancję serwera proxy na porcie 5433 przy użyciu konta usługi powiązanego z rola widza:

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

Otwórz połączenie psql z 127.0.0.1:5433:

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

Polecenie kończy się za pomocą:

psql: server closed the connection unexpectedly

      This probably means the server terminated abnormally

      before or while processing the request.

Ups! Sprawdźmy logi 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

Kontrola dostępu do instancji

Dostęp na poziomie instancji zależy od źródła połączenia:

Połączenie metod autoryzacji zastępuje wszechobecny pg_hba.conf.

Kopia zapasowa i odzyskiwanie

Domyślnie automatyczne kopie zapasowe są włączone:

Podczas gdy kopie zapasowe nie wpływają na operacje odczytu i zapisu bazy danych, mają wpływ na wydajność dlatego zaleca się planowanie tworzenia kopii zapasowych w okresach mniejszej aktywności.

W celu zapewnienia nadmiarowości kopie zapasowe mogą być przechowywane w dwóch regionach (obowiązują dodatkowe opłaty) z opcją wyboru niestandardowych lokalizacji.

Aby zaoszczędzić miejsce na dysku, użyj kompresji. Skompresowane pliki .gz są przywracane w sposób przezroczysty.

Cloud SQL obsługuje również klonowanie instancji. W przypadku najmniejszego zestawu danych operacja zajęła około 3 minut:

Czas rozpoczęcia klonowania 10:07:10:

Dzienniki PostgreSQL pokazują, że PostgreSQL stał się dostępny na sklonowanej instancji o godzinie 10:10:47:

To wciąż prostszy sposób tworzenia kopii niż tworzenie kopii zapasowej i przywracanie instancji do celów testowania, programowania lub rozwiązywania problemów.

Najlepsze praktyki Google Cloud dla PostgreSQL

  • Skonfiguruj politykę aktywacji dla instancji, które nie muszą działać 24/7.
  • Umieść instancję bazy danych w tej samej strefie lub regionie, co instancje Compute Engine i aplikacje App Engine, aby uniknąć opóźnień w sieci.
  • Utwórz instancję bazy danych w tej samej strefie co Compute Engine. Jeśli używasz innego typu połączenia, zaakceptuj strefę domyślną.
  • Użytkownicy utworzeni przy użyciu Cloud SQL są domyślnie superużytkownikami chmury. Użyj PostgreSQL ALTER ROLE, aby zmienić ich uprawnienia.
  • Użyj najnowszej wersji serwera proxy Cloud SQL.
  • Nazwy instancji powinny zawierać znacznik czasu, aby móc ponownie użyć nazwy podczas usuwania i odtwarzania instancji.
  • pg_dump domyślnie uwzględnia duże obiekty. Jeśli baza danych zawiera obiekty BLOB-y, wykonaj zrzut w okresach niskiej aktywności, aby zapobiec przestawaniu odpowiedzi instancji.
  • Użyj gcloud sql connect, aby szybko połączyć się z klienta zewnętrznego bez konieczności umieszczania adresu IP klienta na białej liście.
  • Zapisz się, aby ogłaszać grupę, aby otrzymywać powiadomienia o aktualizacjach produktów i alerty, takie jak problemy podczas tworzenia instancji:
  • Upewnij się, że aplikacje wdrażają techniki zarządzania połączeniami z bazą danych.
  • Instancje zatrzymane na dłużej niż 90 dni zostaną usunięte, chyba że nie są w stanie zawieszenia.
  • Wykonaj ręczne przełączanie awaryjne, aby przetestować zachowanie aplikacji i długość przestoju.
  • Użyj domyślnej wersji silnika.
  • Przestrzeń dyskowa dla instancji skonfigurowanych do automatycznego zwiększania pamięci będzie rosła o 25 GB. Ponieważ miejsca do przechowywania nie można odzyskać, ustaw limit wzrostu szacowanego rozmiaru bazy danych w następnym cyklu budżetowym i monitoruj niekontrolowane zapytania,
  • Użyj „wcześniejszego” harmonogramu konserwacji dla instancji testowych:
  • Aplikacje powinny używać aktywnych połączeń i wykładniczego wycofywania, aby szybko odzyskać sprawność po ponownym uruchomieniu instancji.
  • Aplikacja polegająca na replikach do odczytu powinna rozważyć użycie 3 replik, aby uniknąć problemów spowodowanych awarią regionalnych dysków trwałych prowadzących do niedostępności obu replik.
  • Skonfiguruj repliki do odczytu, aby poprawić wydajność odczytu.
  • Ponowne uruchomienie instancji jest wymagane podczas aktualizowania listy adresów IP, które mają dostęp do publicznej instancji w celu rozłączenia istniejących połączeń.
  • Przejrzyj dedykowaną grupę StackOverflow Cloud SQL, aby uzyskać dodatkowe informacje.

Lista kontrolna uruchamiania Cloud SQL

Sekcja z listą kontrolną w dokumentacji zawiera przegląd zalecanych działań podczas konfigurowania gotowej do produkcji instancji Cloud SQL dla PostgreSQL. W szczególności aplikacje muszą być zaprojektowane do obsługi ponownego uruchamiania Cloud SQL. Ponadto, chociaż nie ma limitów zapytań na sekundę, istnieją limity połączeń.

Obsługa rozszerzeń GCP PostgreSQL

Cloud SQL obsługuje większość rozszerzeń PostgreSQL. W chwili pisania tego tekstu z 52 rozszerzeń społeczności są 22 nieobsługiwane rozszerzenia i 2 nieobsługiwane rozszerzenia PostGIS.

postgis_raster

postgis_sfcgal

W przypadku rozszerzeń PostgreSQL możemy albo przejrzeć repozytorium wpisów PostgreSQL, albo lepiej, porównać dane wyjściowe z pg_available_extensions:

W górę:

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

Nieobsługiwane rozszerzenia w 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

Logowanie

Operacje wykonywane w Cloud SQL są rejestrowane na karcie Aktywność wraz ze wszystkimi szczegółami. Przykład tworzenia instancji, pokazujący wszystkie szczegóły instancji:

Migracja PostgreSQL do GCP

W celu zapewnienia migracji lokalnych instalacji PostgreSQL, Google korzysta z pgBouncer.

Pamiętaj, że nie ma kreatora konsoli GCP do migracji PostgreSQL.

DBA Uwaga!

Wysoka dostępność i replikacja

Węzeł główny nie może przejść awaryjnie do repliki do odczytu. W tej samej sekcji opisano inne ważne aspekty replik do odczytu:

  • może zostać przeniesiony do trybu offline w dowolnym momencie w celu zainstalowania poprawek
  • nie podążaj za węzłem głównym w innej strefie po przełączeniu awaryjnym — ponieważ replikacja jest synchroniczna, może to wpłynąć na opóźnienie replikacji
  • nie ma równoważenia obciążenia między replikami, innymi słowy, nie można wskazać aplikacji pojedynczego punktu końcowego
  • rozmiar instancji repliki musi wynosić co najmniej rozmiar węzła głównego
  • brak replikacji między regionami
  • nie można wykonać kopii zapasowej replik
  • wszystkie repliki muszą zostać usunięte przed przywróceniem lub usunięciem instancji głównej z kopii zapasowej
  • replikacja kaskadowa nie jest dostępna

Użytkownicy

Domyślnie „superużytkownik chmury” to postgres, który jest członkiem roli cloudqlsuperuser. Z kolei cloudqlsuperuser dziedziczy domyślne 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} |

Pamiętaj, że role SUPERUSER i REPLICATION nie są dostępne.

Kopia zapasowa i odzyskiwanie

Kopie zapasowe nie mogą być eksportowane.

Kopie zapasowe nie mogą być używane do uaktualniania instancji, tj. przywracania do innego silnika PostgreSQL.

Funkcje takie jak PITR, replikacja logiczna i kompilacja JIT nie są dostępne. Prośby o nowe funkcje można składać w narzędziu Google Issue Tracker.

Szyfrowanie

Podczas tworzenia instancji SSL/TLS jest włączone, ale nie wymuszane:

W tym trybie można zażądać szyfrowania, jednak weryfikacja certyfikatu nie jest dostępna.

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

Próba połączenia za pomocą psql z wymuszoną instancją SSL zwróci zrozumiały błąd:

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

psql: FATAL:  connection requires a valid client certificate

Pamięć

  • Miejsce można zwiększyć po utworzeniu instancji, ale nigdy nie zmniejszać, więc uważaj na koszty związane z rosnącą przestrzenią dyskową lub skonfiguruj limit zwiększenia.
  • Pamięć jest ograniczona do 30 TB.

procesor

Instancje można tworzyć z mniej niż jednym rdzeniem, jednak opcja nie jest dostępna w konsoli Cloud SQL, ponieważ instancję należy utworzyć, określając jeden z przykładowych typów maszyn, w tym przypadku – poziom:

Przykład tworzenia instancji z udostępnionym kodem przy użyciu gcloud w Cloud Shell:

Liczba procesorów jest ograniczona do 64, co jest stosunkowo niskim limitem dla dużych instalacje, biorąc pod uwagę, że w czasach testów 9.2 serwery high-end zaczynały się od 32 rdzeni.

Lokalizacje instancji

Lokalizacja w wielu regionach jest dostępna tylko dla kopii zapasowych.

Dostęp przez publiczny adres IP

Domyślnie Kreator konsoli GCP umożliwia dostęp tylko do publicznego adresu IP, jednak dostęp jest odmawiany do momentu skonfigurowania sieci klienta:

Konserwacja

Aktualizacje mogą przekroczyć okres konserwacji, a repliki do odczytu są aktualizowane w dowolnym momencie.

Dokumentacja nie określa, jak długo trwa okno konserwacji. Informacje są podawane podczas tworzenia instancji:

Zmiany liczby procesorów, rozmiaru pamięci lub strefy, w której znajduje się instancja lokalizacja wymaga, aby baza danych była offline przez kilka minut.

Użytkownicy

Cloud SQL używa zamiennie terminów „rola” i „użytkownik”.

Wysoka dostępność

Koszt w konfiguracji o wysokiej dostępności jest dwukrotnie wyższy niż w przypadku samodzielnej instancji, która obejmuje pamięć masową.

Automatyczne przełączanie awaryjne jest inicjowane po około 60 sekundach od momentu, gdy węzeł podstawowy stał się niedostępny. Według raportu Oracle MAA przekłada się to na stratę 5800 USD na minutę. Biorąc pod uwagę, że ponowne połączenie aplikacji trwa od 2 do 3 minut, awaria podwaja się do potrojenia. Ponadto 60-sekundowy interwał pulsu nie wydaje się być konfigurowalną opcją.

Replikacja

Do replik do odczytu nie można uzyskać dostępu za pomocą jednego punktu końcowego, z których każdy otrzymuje nowy adres IP:

Regionalne dyski stałe zapewniają nadmiarowość danych kosztem wydajności zapisu.

Cloud SQL nie przełączy się w tryb awaryjny w celu odczytu replik, dlatego czytników nie można uznać za rozwiązanie o wysokiej dostępności

Repliki zewnętrzne i zewnętrzne mastery nie są obecnie obsługiwane.

Łączenie z instancją

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.

Wnioski

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL wybierz elementy, w których suma pola jest mniejsza niż N

  2. Jak zaimportować moduły lub zainstalować rozszerzenia w PostgreSQL 9.1+?

  3. Jak wyświetlić indeksy utworzone dla tabeli w postgresie

  4. SQL - Łączenie wielu podobnych zapytań

  5. Big Data z PostgreSQL i Apache Spark