PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Penyelaman Cloud Vendor:PostgreSQL di Google Cloud Platform (GCP)

Mulai dari mana?

Tempat terbaik yang bisa saya temukan untuk memulai tidak lain adalah dokumentasi resmi. Ada juga saluran Youtube GCP bagi mereka yang lebih menyukai multimedia. Setelah menemukan diri saya di lahan dokumentasi Cloud SQL, saya beralih ke Konsep di mana kita dijanjikan untuk "mengembangkan pemahaman yang mendalam" tentang produk.

Jadi, mari kita mulai!

Fitur Google Cloud PostgreSQL

Google Cloud SQL untuk PostgreSQL menawarkan semua fitur standar yang kami harapkan dari solusi terkelola:ketersediaan tinggi dengan failover otomatis, pencadangan otomatis, enkripsi saat istirahat dan dalam perjalanan, pencatatan dan pemantauan lanjutan, dan tentu saja API yang kaya untuk berinteraksi dengan semua layanan.

Dan untuk sedikit sejarah, dukungan PostgreSQL dimulai pada Maret 2017, hingga saat itu satu-satunya mesin database yang didukung adalah MySQL.

Cloud SQL menjalankan PostgreSQL di platform komputasi Generasi Kedua Google. Daftar lengkap fitur tersedia di sini dan juga di sini. Meninjau yang pertama, jelas bahwa tidak pernah ada platform Generasi Pertama untuk PostgreSQL.

Basis data yang berjalan pada platform Generasi Kedua diharapkan berjalan dengan kecepatan 7x lebih cepat dan memanfaatkan kapasitas penyimpanan 20x lebih banyak. Blog yang mengumumkan platform Generasi Kedua membahas detail menjalankan pengujian sysbench untuk membandingkan Google Cloud SQL dengan pesaing utama saat itu AWS di kedua inkarnasi RDS, dan Aurora. Hasilnya memang mengejutkan saya karena menunjukkan Cloud SQL berkinerja lebih baik sedangkan pengujian terbaru yang dilakukan menggunakan AWS Benchmark yang dirilis sekitar setahun kemudian menyimpulkan sebaliknya. Itu sekitar waktu yang sama dukungan PostgreSQL tersedia. Meskipun saya sendiri sudah penasaran dengan ide menjalankan tolok ukur, saya menduga ada dua faktor potensial yang dapat memengaruhi hasil:tolok ukur sysbench Google menggunakan parameter yang berbeda dan AWS mungkin telah meningkatkan produk mereka selama waktu itu.

Kompatibilitas PostgreSQL GCP

Seperti yang diharapkan Google Cloud SQL untuk PostgreSQL hampir merupakan pengganti drop-in untuk versi komunitas dan mendukung semua bahasa prosedural SQL PL/pgSQL.

Beberapa fitur tidak tersedia karena alasan keamanan, misalnya akses SUPERUSER. Fitur lain telah dihapus karena potensi risiko yang ditimbulkan pada stabilitas dan kinerja produk. Terakhir, beberapa opsi dan parameter tidak dapat diubah, meskipun permintaan untuk mengubah perilaku tersebut dapat dilakukan melalui Grup Diskusi Cloud SQL.

Cloud SQL juga kompatibel dengan protokol PostgreSQL.

Dalam hal isolasi transaksi, Cloud SQL mengikuti perilaku default PostgreSQL, secara default ke tingkat isolasi Read Committed.

Untuk beberapa parameter konfigurasi server, Cloud SQL mengimplementasikan rentang yang berbeda untuk alasan yang tidak dapat dijelaskan dalam dokumentasi, masih merupakan hal yang penting untuk diingat.

Jaringan

Ada beberapa cara untuk terhubung ke database, bergantung pada apakah instance berada di jaringan pribadi atau jaringan publik (aplikasi terhubung dari luar GCP). Umum untuk kedua kasus tersebut adalah VPC standar yang dikelola oleh Google tempat semua instance database Cloud SQL berada.

IP Pribadi

Klien yang terhubung ke alamat IP pribadi dirutekan melalui koneksi peering antara VPC yang menghosting klien dan masing-masing instance database. Meskipun tidak spesifik untuk PostgreSQL, penting untuk meninjau persyaratan jaringan, untuk menghindari masalah koneksi. Satu gotcha:setelah diaktifkan, kemampuan IP pribadi tidak dapat dihapus.

Menghubungkan dari Aplikasi Eksternal

Sambungan dari aplikasi yang dihosting di luar GCP, dapat, dan harus dienkripsi. Selain itu, untuk menghindari berbagai serangan, koneksi klien dan aplikasi harus menginstal sertifikat klien yang disediakan. Prosedur untuk membuat dan mengonfigurasi sertifikat itu agak rumit, membutuhkan alat khusus untuk memastikan bahwa sertifikat diperbarui secara berkala. Itu mungkin salah satu alasan mengapa Google menawarkan opsi untuk menggunakan Proxy Cloud SQL.

Menghubungkan Menggunakan Proxy Cloud SQL

Penyiapannya cukup mudah, yang sebenarnya, saya temukan sebagai kasus untuk semua petunjuk dalam dokumentasi Google Cloud SQL. Pada catatan terkait, mengirimkan umpan balik dokumentasi sangat sederhana, dan fitur tangkapan layar adalah yang pertama bagi saya.

Ada beberapa cara untuk mengotorisasi koneksi proxy dan saya memilih untuk mengonfigurasi akun layanan, seperti yang dijelaskan dalam dokumentasi Cloud SQL Proxy.

Setelah semuanya siap, saatnya memulai 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

Untuk terhubung ke instance jarak jauh, kita sekarang menggunakan proxy dengan menentukan localhost alih-alih alamat IP publik 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.

Perhatikan bahwa tidak ada enkripsi karena kami terhubung secara lokal dan proxy menangani enkripsi lalu lintas yang mengalir ke awan.

Tugas DBA yang umum adalah melihat koneksi ke database dengan menanyakan pg_stat_activity. Dokumentasi menyatakan bahwa koneksi proxy akan ditampilkan sebagai cloudsqlproxy~1.2.3.4 jadi saya ingin memverifikasi klaim itu. Saya telah membuka dua sesi sebagai postgres, satu melalui proxy dan yang lainnya dari alamat rumah saya, jadi kueri berikut akan dilakukan:

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

Tampaknya koneksi proxy diidentifikasi sebagai client_port ==-1 dan client_addr kosong. Ini juga dapat dikonfirmasi dengan membandingkan cap waktu untuk backend_start dan log proxy di bawah ini:

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

Ketersediaan Tinggi PostgreSQL di Google Cloud

Google Cloud SQL untuk PostgreSQL memastikan ketersediaan tinggi menggunakan sinkronisasi data penyimpanan tingkat rendah melalui persistent disk regional. Failover otomatis, dengan interval pemeriksaan detak jantung satu detik, dan failover dipicu setelah sekitar 60 detik.

Kinerja dan Pemantauan

Bagian Performa dari dokumentasi menunjukkan aturan umum cloud:jaga agar database (replika penulis dan baca) tetap dekat dengan aplikasi, dan skalakan instance secara vertikal. Yang menonjol adalah rekomendasi untuk menyediakan instans dengan setidaknya 60 GB RAM saat kinerja penting.

Stackdriver menyediakan pemantauan dan pencatatan log, serta akses ke log PostgreSQL:

Kontrol Akses

Ini diimplementasikan pada level project, instance, dan database.

Kontrol Akses Proyek

Kontrol akses project adalah kontrol akses khusus cloud — kontrol ini menggunakan konsep peran IAM untuk memungkinkan anggota project (pengguna, grup, atau akun layanan) mengakses berbagai resource Cloud SQL. Daftar peran cukup jelas, untuk deskripsi mendetail tentang setiap peran dan izin terkait, lihat APIs Explorer, atau Cloud SQL Admin API untuk salah satu bahasa pemrograman yang didukung.

Untuk mendemonstrasikan cara kerja peran IAM, mari buat akun layanan hanya-baca (penampil):

Mulai instance proxy baru pada port 5433 menggunakan akun layanan yang terkait dengan peran pemirsa:

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

Buka koneksi psql ke 127.0.0.1:5433:

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

Perintah keluar dengan:

psql: server closed the connection unexpectedly

      This probably means the server terminated abnormally

      before or while processing the request.

Ups! Mari kita periksa log 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

Kontrol Akses Instans

Akses tingkat instance bergantung pada sumber koneksi:

Kombinasi metode otorisasi menggantikan pg_hba.conf yang ada di mana-mana.

Pencadangan dan Pemulihan

Secara default, pencadangan otomatis diaktifkan:

Meskipun pencadangan tidak memengaruhi operasi baca dan tulis basis data, pencadangan memengaruhi kinerja dan oleh karena itu disarankan agar pencadangan dijadwalkan selama periode aktivitas yang lebih rendah.

Untuk redundansi, cadangan dapat disimpan di dua wilayah (berlaku biaya tambahan) dengan opsi memilih lokasi khusus.

Untuk menghemat ruang penyimpanan, gunakan kompresi. File terkompresi .gz dipulihkan secara transparan.

Cloud SQL juga mendukung kloning instans. Untuk kumpulan data terkecil, operasi memakan waktu sekitar 3 menit:

Waktu mulai kloning 10:07:10:

Log PostgreSQL menunjukkan bahwa PostgreSQL tersedia pada instance kloning pada pukul 10:10:47:

Itu masih merupakan cara yang lebih mudah daripada mencadangkan dan memulihkan, untuk membuat salinan dari sebuah instance untuk tujuan pengujian, pengembangan, atau pemecahan masalah.

Praktik Terbaik Google Cloud untuk PostgreSQL

  • Konfigurasikan kebijakan aktivasi untuk instans yang tidak harus berjalan 24/7.
  • Tempatkan instance database di zona, atau region yang sama, dengan instance mesin komputasi dan aplikasi App Engine untuk menghindari latensi jaringan.
  • Buat instance database di zona yang sama dengan Compute Engine. Jika menggunakan jenis koneksi lain, terima zona default.
  • Pengguna yang dibuat menggunakan Cloud SQL secara default adalah pengguna super cloud. Gunakan PostgreSQL ALTER ROLE untuk mengubah izinnya.
  • Gunakan Proxy Cloud SQL versi terbaru.
  • Nama instance harus menyertakan stempel waktu agar dapat menggunakan kembali nama tersebut saat menghapus dan membuat ulang instance.
  • pg_dump default untuk menyertakan objek besar. Jika database berisi BLOB, lakukan dump selama periode aktivitas rendah untuk mencegah instance menjadi tidak responsif.
  • Gunakan gcloud sql connect untuk terhubung dengan cepat dari klien eksternal tanpa perlu memasukkan alamat IP klien ke daftar putih.
  • Berlangganan grup pengumuman untuk menerima pemberitahuan tentang pembaruan produk dan peringatan seperti masalah saat membuat instance:
  • Pastikan aplikasi menerapkan teknik manajemen koneksi database.
  • Instance yang dihentikan selama lebih dari 90 hari akan dihapus kecuali tidak dalam status ditangguhkan.
  • Lakukan failover manual untuk menguji perilaku aplikasi dan lamanya waktu henti.
  • Gunakan versi mesin default.
  • Ruang penyimpanan untuk instans yang dikonfigurasi untuk meningkatkan penyimpanan secara otomatis, akan bertambah dengan penambahan sebesar 25 GB. Karena ruang penyimpanan tidak dapat diperoleh kembali, tetapkan batas peningkatan ke perkiraan ukuran database selama siklus anggaran berikutnya, dan pantau kueri yang tidak diinginkan,
  • Gunakan waktu pemeliharaan "sebelumnya" untuk instance pengujian:
  • Aplikasi harus menggunakan koneksi aktif dan backoff eksponensial agar cepat pulih setelah instance dimulai ulang.
  • Aplikasi yang mengandalkan replika baca harus mempertimbangkan untuk menggunakan 3 replika untuk menghindari masalah yang disebabkan oleh kegagalan persisten disk regional yang menyebabkan kedua replika menjadi tidak tersedia.
  • Konfigurasikan replika baca untuk meningkatkan performa baca.
  • Instance restart diperlukan saat memperbarui daftar alamat IP yang diizinkan untuk mengakses instance publik untuk memutuskan koneksi yang ada.
  • Tinjau grup khusus StackOverflow Cloud SQL untuk informasi tambahan.

Daftar Periksa Peluncuran untuk Cloud SQL

Bagian daftar periksa dalam dokumentasi memberikan ringkasan aktivitas yang direkomendasikan saat menyiapkan instance Cloud SQL untuk PostgreSQL yang siap produksi. Secara khusus, aplikasi harus dirancang untuk menangani restart Cloud SQL. Selain itu, meskipun tidak ada batasan kueri per detik, ada batasan koneksi.

Dukungan Ekstensi GCP PostgreSQL

Cloud SQL mendukung sebagian besar ekstensi PostgreSQL. Sampai tulisan ini dibuat, dari 52 ekstensi komunitas, ada 22 ekstensi yang tidak didukung dan 2 ekstensi PostGIS yang tidak didukung.

postgis_raster

postgis_sfcgal

Untuk ekstensi PostgreSQL, kami dapat meninjau repositori kontribusi PostgreSQL, atau lebih baik, membedakan output dari pg_available_extensions:

Upstream:

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

Ekstensi yang tidak didukung di 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

Logging

Operasi yang dilakukan dalam Cloud SQL dicatat di bawah tab Aktivitas bersama dengan semua detailnya. Contoh pembuatan instance, menampilkan semua detail instance:

Migrasi PostgreSQL ke GCP

Untuk menyediakan migrasi penginstalan PostgreSQL lokal, Google memanfaatkan pgBouncer.

Perhatikan bahwa tidak ada wizard GCP Console untuk migrasi PostgreSQL.

Awas DBA!

Ketersediaan dan Replikasi Tinggi

Node master tidak dapat melakukan failover ke replika baca. Bagian yang sama menguraikan aspek penting lainnya dari replika baca:

  • bisa offline kapan saja untuk patch
  • jangan ikuti master node di zona lain setelah failover — karena replikasi sinkron, ini dapat memengaruhi jeda replikasi
  • tidak ada penyeimbangan beban antar replika, dengan kata lain, tidak ada aplikasi titik akhir tunggal yang dapat diarahkan
  • ukuran instance replika setidaknya harus seukuran node master
  • tidak ada replikasi lintas wilayah
  • replika tidak dapat dicadangkan
  • semua replika harus dihapus sebelum instance master dapat dipulihkan dari cadangan atau dihapus
  • replikasi bertingkat tidak tersedia

Pengguna

Secara default, "cloud superuser" adalah postgres yang merupakan anggota dari peran cloudsqlsuperuser. Pada gilirannya, cloudsqlsuperuser mewarisi peran default 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} |

Perhatikan bahwa peran SUPERUSER dan REPLICATION tidak tersedia.

Pencadangan dan Pemulihan

Cadangan tidak dapat diekspor.

Cadangan tidak dapat digunakan untuk memutakhirkan instance, yaitu memulihkan ke mesin PostgreSQL yang berbeda.

Fitur seperti PITR, Replikasi Logis, dan Kompilasi JIT tidak tersedia. Permintaan fitur dapat diajukan di Pelacak Masalah Google.

Enkripsi

Saat pembuatan instance, SSL/TLS diaktifkan tetapi tidak diterapkan:

Dalam mode ini, enkripsi dapat diminta, namun validasi sertifikat tidak tersedia.

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

Mencoba terhubung menggunakan psql ke instance yang didukung SSL akan mengembalikan kesalahan yang cukup jelas:

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

psql: FATAL:  connection requires a valid client certificate

Penyimpanan

  • Penyimpanan dapat ditingkatkan setelah pembuatan instance tetapi tidak pernah berkurang, jadi perhatikan biaya yang terkait dengan ruang penyimpanan yang semakin besar, atau konfigurasikan batas peningkatan.
  • Penyimpanan dibatasi hingga 30 TB.

CPU

Instance dapat dibuat dengan kurang dari satu inti, namun opsi ini tidak tersedia di Cloud SQL Console karena instance harus dibuat dengan menentukan salah satu jenis mesin sampel, dalam hal ini – tingkat:

Contoh membuat instance kode bersama menggunakan gcloud di dalam Cloud Shell:

Jumlah CPU dibatasi hingga 64, batas yang relatif rendah untuk besar instalasi, mengingat saat 9.2 dijadikan benchmark, server kelas atas dimulai pada 32 core.

Lokasi Instance

Lokasi multi-regional hanya tersedia untuk cadangan.

Akses melalui IP Publik

Secara default, Wizard Konsol GCP hanya mengaktifkan akses alamat IP publik, namun, akses ditolak hingga jaringan klien dikonfigurasi:

Pemeliharaan

Pembaruan dapat melebihi masa pemeliharaan dan replika baca diperbarui setiap saat.

Dokumentasi tidak menentukan berapa lama durasi periode pemeliharaan. Informasi diberikan saat membuat instance:

Perubahan pada jumlah CPU, ukuran memori, atau zona tempat instance berada berlokasi mengharuskan database offline selama beberapa menit.

Pengguna

Cloud SQL menggunakan istilah “peran” dan “pengguna” secara bergantian.

Ketersediaan Tinggi

Biaya dalam konfigurasi yang sangat tersedia adalah dua kali lipat dari instans mandiri, dan itu termasuk penyimpanan.

Failover otomatis dimulai setelah sekitar 60 detik setelah node utama tidak tersedia. Menurut laporan Oracle MAA, ini berarti kerugian $5.800 per menit. Mengingat dibutuhkan 2 hingga 3 menit hingga aplikasi dapat menyambungkan kembali pemadaman berlipat ganda hingga tiga kali lipat. Selain itu, interval detak jantung 60 detik tampaknya bukan opsi yang dapat dikonfigurasi.

Replikasi

Replika baca tidak dapat diakses menggunakan satu titik akhir, masing-masing menerima alamat IP baru:

Disk persisten regional menyediakan redundansi data dengan mengorbankan kinerja penulisan.

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

Pemecahan Masalah

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.

Kesimpulan

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. Hitung jam kerja antara 2 tanggal di PostgreSQL

  2. Bagaimana cara mengimpor modul atau menginstal ekstensi di PostgreSQL 9.1+?

  3. Alternatif dinamis untuk pivot dengan CASE dan GROUP BY

  4. perhitungan persentil ke-n di postgresql

  5. Indeks Buat PostgreSQL