PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

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

Откъде да започна?

Най-доброто място, което можех да намеря да започна, беше не друго, а официалната документация. Има и GCP Youtube канал за тези, които предпочитат мултимедия. След като се озовах в Cloud SQL документацията, се обърнах към Concepts, където ни е обещано да „развием дълбоко разбиране“ на продукта.

И така, нека да започнем!

Функции на PostgreSQL на Google Cloud

Google Cloud SQL за PostgreSQL предлага всички стандартни функции, които бихме очаквали от управлявано решение:висока наличност с автоматично превключване при отказ, автоматично архивиране, криптиране в състояние на покой и по време на пренос, разширено регистриране и наблюдение и на разбира се богат API за взаимодействие с всички услуги.

И за малко история поддръжката на PostgreSQL стартира през март 2017 г., дотогава единствената поддържана машина за база данни беше MySQL.

Cloud SQL изпълнява PostgreSQL на второ поколение компютърна платформа на Google. Пълният списък с функции е достъпен тук и също тук. При преглед на първото става ясно, че никога не е имало платформа от първо поколение за PostgreSQL.

Базите данни, работещи на платформата от второ поколение, се очаква да работят със скорости 7 пъти по-бързи и да се възползват от 20 пъти повече капацитет за съхранение. Блогът, обявяващ платформата от второ поколение, разглежда подробностите за провеждането на теста на sysbench, за да сравни Google Cloud SQL с тогавашния основен конкурент AWS в двете въплъщения RDS и Aurora. Резултатите ме изненадаха, тъй като показват, че Cloud SQL се представя по-добре, докато последните тестове, извършени с помощта на AWS Benchmark, публикуван около година по-късно, заключиха обратното. Това е приблизително по същото време, когато поддръжката на PostgreSQL беше налична. Макар че ме сърби идеята сам да стартирам бенчмарка, предполагам, че има два потенциални фактора, които биха могли да повлияят на резултатите:бенчмаркът на Google за sysbench използва различни параметри и AWS може да са подобрили продуктите си през това време.

Съвместимост с GCP PostgreSQL

Както се очаква Google Cloud SQL за PostgreSQL е почти добавен заместител на общностната версия и поддържа всички процедурни езици на PL/pgSQL SQL.

Някои функции не са достъпни поради съображения за сигурност, например достъп на SUPERUSER. Други функции бяха премахнати поради потенциални рискове за стабилността и производителността на продукта. И накрая, някои опции и параметри не могат да бъдат променяни, въпреки че заявките за промяна на това поведение могат да бъдат направени чрез дискусионната група в Cloud SQL.

Cloud SQL е съвместим и с протокола PostgreSQL.

Когато става въпрос за изолация на транзакциите, Cloud SQL следва поведението по подразбиране на PostgreSQL, като по подразбиране се задава ниво на изолация Read Committed.

За някои от конфигурационните параметри на сървъра Cloud SQL внедрява различни диапазони по причини, необясними в документацията, което все пак е важно нещо, което трябва да запомните.

Мрежа

Има множество начини за свързване към базата данни, в зависимост от това дали екземплярът е в частна мрежа или публична мрежа (приложения, свързващи се извън GCP). Общото и за двата случая е предварително дефинираният VPC, управляван от Google, където се намират всички екземпляри на Cloud SQL база данни.

Частен IP адрес

Клиентите, свързващи се към частен IP адрес, се насочват чрез пирингова връзка между VPC, хостващи клиента, и съответно екземпляра на базата данни. Въпреки че не е специфично за PostgreSQL, важно е да прегледате мрежовите изисквания, за да избегнете проблеми с връзката. Една грешка:веднъж активирана, възможността за частен IP не може да бъде премахната.

Свързване от външни приложения

Връзките от приложения, хоствани извън GCP, могат и трябва да бъдат криптирани. Освен това, за да се избегнат различните атаки, клиентските връзки и приложението трябва да инсталират предоставения клиентски сертификат. Процедурата за генериране и конфигуриране на сертификатите е малко сложна, изискващи персонализирани инструменти, за да се гарантира, че сертификатите се подновяват периодично. Това може да е една от причините Google да предлага опцията за използване на Cloud SQL прокси.

Свързване чрез Cloud SQL прокси

Настройката е доста проста, което всъщност, установих, че е така за всички инструкции в документацията на Google Cloud SQL. Във връзка с това, изпращането на обратна връзка с документацията е много лесно и функцията за екранна снимка беше първа за мен.

Има няколко начина за упълномощаване на прокси връзки и аз избрах да конфигурирам акаунт за услуга, точно както е посочено в документацията за Cloud SQL 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

За да се свържем с отдалечения екземпляр, сега използваме прокси сървъра, като посочим localhost вместо публичния IP адрес на екземпляра:

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

Обърнете внимание, че няма криптиране, тъй като ние се свързваме локално и проксито се грижи за криптирането на трафика, преминаващ в облака.

Честа задача на DBA е да преглеждате връзките към базата данни чрез заявка pg_stat_activity. Документацията гласи, че прокси връзките ще се показват като cloudsqlproxy~1.2.3.4, така че исках да проверя това твърдение. Отворих две сесии като postgres, едната чрез прокси, а другата от домашния ми адрес, така че следната заявка ще свърши работа:

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

Изглежда, че вместо това прокси връзките са идентифицирани като client_port ==-1 и празен client_addr. Това може да се потвърди допълнително чрез сравняване на времевите марки за backend_start и прокси регистрационния файл по-долу:

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

Висока наличност на PostgreSQL в Google Cloud

Google Cloud SQL за PostgreSQL гарантира висока наличност, използвайки синхронизация на данни за съхранение на ниско ниво посредством регионални постоянни дискове. Преминаването при отказ е автоматично, с интервал за проверка на сърдечния ритъм от една секунда и превключването при отказ се задейства след около 60 секунди.

Ефективност и наблюдение

Разделът за производителност в документацията посочва общи правила за облак:поддържайте базата данни (както реплики за запис, така и реплики за четене) близо до приложението и вертикално мащабирайте екземпляра. Това, което се откроява, е препоръката за осигуряване на инстанция с поне 60 GB RAM, когато производителността е важна.

Stackdriver осигурява наблюдение и регистриране, както и достъп до регистрационни файлове на PostgreSQL:

Контрол на достъпа

Това се реализира на ниво проект, екземпляр и база данни.

Контрол на достъпа до проекти

Контролът на достъпа до проекти е специфичен за облака контрол на достъпа — той използва концепцията за IAM роли, за да позволи на членовете на проекта (потребители, групи или акаунти за услуги) достъп до различни Cloud SQL ресурси. Списъкът с роли е донякъде разбираем, за подробно описание на всяка роля и свързаните разрешения се обърнете към APIs Explorer или Cloud SQL Admin API за един от поддържаните езици за програмиране.

За да демонстрираме как работят ролите на IAM, нека създадем акаунт за услуга само за четене (преглед):

Стартирайте нов прокси екземпляр на порт 5433, като използвате акаунта на услугата, свързан с роля на зрител:

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

Отворете psql връзка към 127.0.0.1:5433:

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

Командата излиза с:

psql: server closed the connection unexpectedly

      This probably means the server terminated abnormally

      before or while processing the request.

Ами сега! Нека проверим регистрационните файлове на прокси сървъра:

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

Контрол на достъпа до инстанция

Достъпът на ниво екземпляр зависи от източника на връзката:

Комбинацията от методи за оторизация заменя вездесъщия pg_hba.conf.

Архивиране и възстановяване

По подразбиране автоматичното архивиране е активирано:

Докато архивирането не влияе на операциите за четене и запис в базата данни, те оказват влияние върху производителността и затова се препоръчва архивирането да се планира по време на периоди на по-ниска активност.

За съкращаване резервните копия могат да се съхраняват в два региона (прилагат се допълнителни такси) с опция за избор на персонализирани местоположения.

За да спестите място за съхранение, използвайте компресия. .gz компресираните файлове се възстановяват прозрачно.

Cloud SQL също поддържа клониране на екземпляри. За най-малкия набор от данни операцията отне около 3 минути:

Начален час на клонирането 10:07:10:

Регистратурите на PostgreSQL показват, че PostgreSQL е станал достъпен в клонирания екземпляр в 10:10:47:

Това все още е по-лесен начин от архивиране и възстановяване, за създаване на копие на екземпляр за целите на тестване, разработка или отстраняване на неизправности.

Най-добри практики в Google Cloud за PostgreSQL

  • Конфигурирайте политика за активиране за екземпляри, които не се изисква да работят 24/7.
  • Поставете екземпляра на базата данни в същата зона или регион с екземплярите на изчислителната машина и приложенията на App Engine, за да избегнете забавяне на мрежата.
  • Създайте екземпляр на базата данни в същата зона като Compute Engine. Ако използвате друг тип връзка, приемете зоната по подразбиране.
  • Потребителите, създадени с помощта на Cloud SQL, по подразбиране са суперпотребители в облака. Използвайте PostgreSQL ALTER ROLE, за да промените техните разрешения.
  • Използвайте най-новата версия на Cloud SQL Proxy.
  • Имената на екземпляри трябва да включват времева марка, за да можете да използвате повторно името при изтриване и повторно създаване на екземпляри.
  • pg_dump по подразбиране включва големи обекти. Ако базата данни съдържа BLOB-и, изпълнете изхвърлянето по време на периоди на ниска активност, за да предотвратите отказ на екземпляра.
  • Използвайте gcloud sql connect за бързо свързване от външен клиент, без да е необходимо да добавяте IP адреса на клиента в белия списък.
  • Абонирайте се за група за обявяване, за да получавате известия за актуализации на продукти и сигнали, като проблеми при създаване на екземпляри:
  • Уверете се, че приложенията прилагат техники за управление на връзката с база данни.
  • Екземпляри, спрени за повече от 90 дни, ще бъдат изтрити, освен ако не са в спряно състояние.
  • Извършете ръчно преминаване при отказ, за ​​да тествате поведението на приложението и продължителността на престоя.
  • Използвайте версията на двигателя по подразбиране.
  • Пространството за съхранение за екземпляри, конфигурирани да увеличават автоматично хранилището, ще нараства на стъпки от 25 GB. Тъй като пространството за съхранение не може да бъде възстановено, задайте лимит за увеличаване на прогнозния размер на базата данни през следващия бюджетен цикъл и наблюдавайте неизбежните заявки,
  • Използвайте „по-ранното“ време за поддръжка за тестови екземпляри:
  • Приложенията трябва да използват активни връзки и експоненциално спиране, за да се възстановят бързо след рестартиране на екземпляр.
  • Приложение, разчитащо на реплики за четене, трябва да обмисли използването на 3 реплики, за да се избегнат проблеми, причинени от неизправност на регионални постоянни дискове, водещи до недостъпност и на двете реплики.
  • Конфигурирайте репликите за четене, за да подобрите производителността на четене.
  • Рестартирането на екземпляра се изисква при актуализиране на списъка с IP адреси, разрешени за достъп до публичен екземпляр, за да се прекъснат съществуващите връзки.
  • Прегледайте специалната група StackOverflow Cloud SQL за допълнителна информация.

Стартиране на контролен списък за Cloud SQL

Разделът с контролен списък в документацията предоставя преглед на препоръчаните дейности при настройка на готов за производство Cloud SQL за екземпляр на PostgreSQL. По-специално, приложенията трябва да бъдат проектирани да обработват рестартиране на Cloud SQL. Освен това, докато няма ограничения за заявки в секунда, има ограничения за свързване.

Поддръжка на PostgreSQL GCP разширения

Cloud SQL поддържа повечето от разширенията на PostgreSQL. Към момента на написването на тази статия от 52 разширения на общността има 22 неподдържани разширения и 2 неподдържани разширения на PostGIS.

postgis_raster

postgis_sfcgal

За разширенията на PostgreSQL можем или да прегледаме хранилището за PostgreSQL contrib, или по-добре да различим изхода на pg_available_extensions:

Нагоре:

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

Неподдържани разширения в 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

Регистриране

Операциите, извършени в Cloud SQL, се записват в раздела Активност заедно с всички подробности. Пример от създаване на екземпляр, показващ всички подробности за екземпляра:

Миграция на PostgreSQL към GCP

За да осигури миграция на локални PostgreSQL инсталации, Google се възползва от pgBouncer.

Обърнете внимание, че няма GCP конзолен съветник за миграции на PostgreSQL.

DBA Внимание!

Висока наличност и репликация

Главният възел не може да премине при отказ към реплика за четене. Същият раздел очертава други важни аспекти на репликите за четене:

  • може да бъде офлайн по всяко време за корекция
  • не следвайте главния възел в друга зона след отказ – тъй като репликацията е синхронна, това може да повлияе на забавянето на репликацията
  • няма балансиране на натоварването между репликите, с други думи, не могат да бъдат насочени приложения с отделна крайна точка
  • размерът на екземпляра на репликата трябва да бъде най-малко размера на главния възел
  • няма репликация между региони
  • репликата не могат да бъдат архивирани
  • всички реплики трябва да бъдат изтрити, преди главен екземпляр да може да бъде възстановен от архивиране или изтрит
  • каскадната репликация не е налична

Потребители

По подразбиране „облачният суперпотребител“ е postgres, който е член на ролята на cloudsqlsuperuser. От своя страна cloudsqlsuperuser наследява ролите по подразбиране на 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} |

Обърнете внимание, че ролите SUPERUSER и REPLICATION не са налични.

Архивиране и възстановяване

Резервните копия не могат да бъдат експортирани.

Архивните копия не могат да се използват за надграждане на екземпляр, т.е. възстановяване в различен PostgreSQL механизъм.

Функции като PITR, логическа репликация и JIT компилация не са налични. Заявките за функции могат да се подават в инструмента за проследяване на проблеми на Google.

Шифроване

При създаването на екземпляр SSL/TLS е активиран, но не се прилага:

В този режим може да бъде поискано криптиране, но проверката на сертификата не е налична.

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

Опитът за свързване с помощта на psql към наложен екземпляр на SSL ще върне грешка, която се обяснява сама:

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

psql: FATAL:  connection requires a valid client certificate

Съхранение

  • Съхранението може да се увеличи след създаването на екземпляр, но никога да не се намалява, така че внимавайте за разходите, свързани с нарастващото пространство за съхранение, или конфигурирайте лимита за увеличаване.
  • Съхранението е ограничено до 30 TB.

ЦП

Екземплярите могат да бъдат създадени с по-малко от едно ядро, но опцията не е налична в Cloud SQL Console, тъй като екземплярът трябва да бъде създаден чрез посочване на един от примерните типове машини, в този случай – ниво:

Пример за създаване на екземпляр на споделен код с помощта на gcloud в Cloud Shell:

Броят на процесорите е ограничен до 64, относително ниска граница за големи инсталации, като се има предвид, че когато 9.2 беше сравнителен, сървърите от висок клас стартираха с 32 ядра.

Местоположения на екземпляра

Многорегионалното местоположение е достъпно само за архивиране.

Достъп чрез публичен IP

По подразбиране съветникът за конзолата на GCP позволява само достъп до публичен IP адрес, но достъпът е отказан, докато мрежата на клиента не бъде конфигурирана:

Поддръжка

Актуализациите може да надхвърлят прозореца за поддръжка и репликите за четене се актуализират по всяко време.

Документацията не посочва колко дълъг е периодът за поддръжка. Информацията се предоставя при създаване на екземпляр:

Промени в броя на процесора, размера на паметта или зоната, където е екземплярът местоположението изисква базата данни да бъде офлайн за няколко минути.

Потребители

Cloud SQL използва термините „роля“ и „потребител“ взаимозаменяемо.

Висока наличност

Цената в конфигурация с висока достъпност е двойно по-висока от самостоятелния екземпляр и това включва съхранение.

Автоматичното преминаване при отказ се стартира след около 60 секунди след като основният възел стане недостъпен. Според доклада на Oracle MAA това се изразява в загуба от 5800 долара на минута. Като се има предвид, че отнема 2 до 3 минути, докато приложенията могат да се свържат отново, прекъсването се удвоява до тройно. Освен това 60-секундният интервал на сърдечен ритъм изглежда не е конфигурируема опция.

Репликация

Прочетените реплики не могат да бъдат достъпни с помощта на една крайна точка, всяка от които получава нов IP адрес:

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.

Заключение

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. Как да разбера дали резервното ми копие на PostgreSQL е добро?

  2. Как да вмъкнете и изтриете данни в PostgreSQL

  3. PostgreSQL - динамична стойност като име на таблица

  4. Как работи функцията CONCAT() в PostgreSQL

  5. Как да махна PostgreSQL база данни, ако има активни връзки към нея?