Jika Anda mengikuti Microsoft belakangan ini, tidak mengherankan jika penyedia produk database pesaing, yaitu SQL Server, juga ikut-ikutan ikut-ikutan PostgreSQL. Dari merilis 60.000 paten hingga OIN hingga menjadi sponsor Platinum di PGCon, Microsoft sebagai salah satu organisasi pendukung perusahaan PostgreSQL. Mengambil setiap kesempatan untuk menunjukkan bahwa Anda tidak hanya dapat menjalankan PostgreSQL di Microsoft, tetapi juga kebalikannya:Microsoft, melalui penawaran cloud-nya, dapat menjalankan PostgreSQL untuk Anda. Pernyataan tersebut semakin jelas dengan akuisisi Citis Data dan peluncuran produk andalan mereka di Azure Cloud dengan nama Hyperscale. Dapat dikatakan bahwa adopsi PostgreSQL sedang berkembang dan sekarang ada lebih banyak alasan bagus untuk memilihnya.
Perjalanan saya melalui cloud Azure dimulai tepat di halaman arahan tempat saya bertemu dengan pesaing:Server Tunggal dan rilis pratinjau (dengan kata lain tidak ada SLA) Hyperscale (Citus). Blog ini akan fokus pada yang pertama. Selama perjalanan ini, saya memiliki kesempatan untuk mempraktekkan apa itu open source — memberikan kembali kepada komunitas — dalam hal ini, dengan memberikan umpan balik ke dokumentasi yang, menurut Microsoft, mereka membuatnya sangat mudah dengan menyalurkan umpan balik secara langsung. ke Github:
Kompatibilitas PostgreSQL dengan Azure
Versi
Menurut dokumentasi produk, Server Tunggal menargetkan versi PostgreSQL dalam rentang n-2 utama:
Sebagai solusi yang dibangun untuk kinerja, Server Tunggal direkomendasikan untuk kumpulan data 100 GB dan lebih besar. Server memberikan kinerja yang dapat diprediksi — instans database dilengkapi dengan jumlah vCore dan IOPS yang telah ditentukan sebelumnya (berdasarkan ukuran penyimpanan yang disediakan).
Ekstensi
Ada cukup banyak Ekstensi yang Didukung dengan beberapa di antaranya dipasang di luar kotak:
[email protected]:5432 postgres> select name, default_version, installed_version from pg_available_extensions where name !~ '^postgis' order by name;
name | default_version | installed_version
------------------------------+-----------------+-------------------
address_standardizer | 2.4.3 |
address_standardizer_data_us | 2.4.3 |
btree_gin | 1.2 |
btree_gist | 1.5 |
chkpass | 1.0 |
citext | 1.4 |
cube | 1.2 |
dblink | 1.2 |
dict_int | 1.0 |
earthdistance | 1.1 |
fuzzystrmatch | 1.1 |
hstore | 1.4 |
hypopg | 1.1.1 |
intarray | 1.2 |
isn | 1.1 |
ltree | 1.1 |
orafce | 3.7 |
pg_buffercache | 1.3 | 1.3
pg_partman | 2.6.3 |
pg_prewarm | 1.1 |
pg_qs | 1.1 |
pg_stat_statements | 1.6 | 1.6
pg_trgm | 1.3 |
pg_wait_sampling | 1.1 |
pgcrypto | 1.3 |
pgrouting | 2.5.2 |
pgrowlocks | 1.2 |
pgstattuple | 1.5 |
plpgsql | 1.0 | 1.0
plv8 | 2.1.0 |
postgres_fdw | 1.0 |
tablefunc | 1.0 |
timescaledb | 1.1.1 |
unaccent | 1.1 |
uuid-ossp | 1.1 |
(35 rows)
Pemantauan PostgreSQL di Azure
Pemantauan server bergantung pada sekumpulan metrik yang dapat dikelompokkan dengan rapi untuk membuat dasbor khusus:
Mereka yang akrab dengan Graphviz atau Blockdiag kemungkinan akan menghargai opsi mengekspor seluruh dasbor ke file JSON:
Metrik lebih lanjut dapat — dan seharusnya — ditautkan ke lansiran:
Statistik kueri dapat dilacak melalui Penyimpanan Kueri dan divisualisasikan dengan Performa Kueri Wawasan. Untuk itu, beberapa parameter khusus Azure perlu diaktifkan:
[email protected]:5432 postgres> select * from pg_settings where name ~ 'pgms_wait_sampling.query_capture_mode|pg_qs.query_capture_mode';
-[ RECORD 1 ]---+------------------------------------------------------------------------------------------------------------------
name | pg_qs.query_capture_mode
setting | top
unit |
category | Customized Options
short_desc | Selects which statements are tracked by pg_qs. Need to reload the config to make change take effect.
extra_desc |
context | superuser
vartype | enum
source | configuration file
min_val |
max_val |
enumvals | {none,top,all}
boot_val | none
reset_val | top
sourcefile |
sourceline |
pending_restart | f
-[ RECORD 2 ]---+------------------------------------------------------------------------------------------------------------------
name | pgms_wait_sampling.query_capture_mode
setting | all
unit |
category | Customized Options
short_desc | Selects types of wait events are tracked by this extension. Need to reload the config to make change take effect.
extra_desc |
context | superuser
vartype | enum
source | configuration file
min_val |
max_val |
enumvals | {none,all}
boot_val | none
reset_val | all
sourcefile |
sourceline |
pending_restart | f
Untuk memvisualisasikan kueri yang lambat dan menunggu, kami melanjutkan ke widget Performa Kueri:
Kueri Berjalan Lama
Statistik Tunggu
Logging PostgreSQL di Azure
Log PostgreSQL standar dapat diunduh, atau diekspor ke Log Analytics untuk penguraian lebih lanjut:
Kinerja dan Penskalaan PostgreSQL dengan Azure
Meskipun jumlah vCore dapat dengan mudah ditambah atau dikurangi, tindakan ini akan memicu server memulai ulang:
Untuk mencapai nol waktu henti, aplikasi harus dapat menangani kesalahan sementara dengan baik .
Untuk kueri penyetelan, Azure memberikan Rekomendasi Kinerja kepada DBA, selain ekstensi pg_statements dan pg_buffercache yang dimuat sebelumnya:
Ketersediaan dan Replikasi Tinggi di Azure
Ketersediaan tinggi server database dicapai melalui replikasi perangkat keras berbasis node. Hal ini memastikan bahwa jika terjadi kegagalan perangkat keras, node baru dapat ditampilkan dalam waktu puluhan detik.
Azure menyediakan gateway redundan sebagai titik akhir koneksi jaringan untuk semua server database dalam suatu wilayah.
Keamanan PostgreSQL di Azure
Secara default, aturan firewall menolak akses ke instance PostgreSQL. Karena server database Azure setara dengan cluster database, aturan akses akan berlaku untuk semua database yang dihosting di server.
Selain alamat IP, aturan firewall dapat mereferensikan jaringan virtual, fitur yang hanya tersedia untuk tingkat Tujuan Umum dan Memori yang Dioptimalkan.
Satu hal yang saya temukan aneh di antarmuka web firewall — saya tidak dapat menavigasi keluar dari halaman saat perubahan disimpan:
Data saat istirahat dienkripsi menggunakan Kunci yang Dikelola Server dan pengguna awan tidak dapat menonaktifkan enkripsi. Data dalam perjalanan juga dienkripsi — SSL yang diperlukan hanya dapat diubah setelah server basis data dibuat. Sama seperti data saat istirahat, cadangan dienkripsi dan enkripsi tidak dapat dinonaktifkan.
Advanced Threat Protection memberikan peringatan dan rekomendasi pada sejumlah permintaan akses database yang dianggap sebagai risiko keamanan. Fitur ini sedang dalam pratinjau. Untuk mendemonstrasikannya, saya mensimulasikan serangan brute force password:
~ $ while : ; do psql -U $(pwgen -s 20 1)@pg10 ; sleep 0.1 ; done
psql: FATAL: password authentication failed for user "AApT6z4xUzpynJwiNAYf"
psql: FATAL: password authentication failed for user "gaNeW8VSIflkdnNZSpNV"
psql: FATAL: password authentication failed for user "SWZnY7wGTxdLTLcbqnUW"
psql: FATAL: password authentication failed for user "BVH2SC12m9js9vZHcuBd"
psql: FATAL: password authentication failed for user "um9kqUxPIxeQrzWQXr2v"
psql: FATAL: password authentication failed for user "8BGXyg3KHF3Eq3yHpik1"
psql: FATAL: password authentication failed for user "5LsVrtBjcewd77Q4kaj1"
....
Periksa log PostgreSQL:
2019-08-19 07:13:50 UTC-5d5a4c2e.138-FATAL: password authentication failed
for user "AApT6z4xUzpynJwiNAYf"
2019-08-19 07:13:50 UTC-5d5a4c2e.138-DETAIL: Role "AApT6z4xUzpynJwiNAYf" does not exist.
Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"
2019-08-19 07:13:51 UTC-5d5a4c2f.13c-LOG: connection received: host=173.180.222.170 port=27248 pid=316
2019-08-19 07:13:51 UTC-5d5a4c2f.13c-FATAL: password authentication failed for user "gaNeW8VSIflkdnNZSpNV"
2019-08-19 07:13:51 UTC-5d5a4c2f.13c-DETAIL: Role "gaNeW8VSIflkdnNZSpNV" does not exist.
Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"
2019-08-19 07:13:52 UTC-5d5a4c30.140-LOG: connection received: host=173.180.222.170 port=58256 pid=320
2019-08-19 07:13:52 UTC-5d5a4c30.140-FATAL: password authentication failed for user "SWZnY7wGTxdLTLcbqnUW"
2019-08-19 07:13:52 UTC-5d5a4c30.140-DETAIL: Role "SWZnY7wGTxdLTLcbqnUW" does not exist.
Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"
2019-08-19 07:13:53 UTC-5d5a4c31.148-LOG: connection received: host=173.180.222.170 port=32984 pid=328
2019-08-19 07:13:53 UTC-5d5a4c31.148-FATAL: password authentication failed for user "BVH2SC12m9js9vZHcuBd"
2019-08-19 07:13:53 UTC-5d5a4c31.148-DETAIL: Role "BVH2SC12m9js9vZHcuBd" does not exist.
Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"
2019-08-19 07:13:53 UTC-5d5a4c31.14c-LOG: connection received: host=173.180.222.170 port=43384 pid=332
2019-08-19 07:13:54 UTC-5d5a4c31.14c-FATAL: password authentication failed for user "um9kqUxPIxeQrzWQXr2v"
2019-08-19 07:13:54 UTC-5d5a4c31.14c-DETAIL: Role "um9kqUxPIxeQrzWQXr2v" does not exist.
Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"
2019-08-19 07:13:54 UTC-5d5a4c32.150-LOG: connection received: host=173.180.222.170 port=27672 pid=336
2019-08-19 07:13:54 UTC-5d5a4c32.150-FATAL: password authentication failed for user "8BGXyg3KHF3Eq3yHpik1"
2019-08-19 07:13:54 UTC-5d5a4c32.150-DETAIL: Role "8BGXyg3KHF3Eq3yHpik1" does not exist.
Connection matched pg_hba.conf line 3: "host all all 173.180.222.170/32 password"
2019-08-19 07:13:55 UTC-5d5a4c33.154-LOG: connection received: host=173.180.222.170 port=12712 pid=340
2019-08-19 07:13:55 UTC-5d5a4c33.154-FATAL: password authentication failed for user "5LsVrtBjcewd77Q4kaj1"
2019-08-19 07:13:55 UTC-5d5a4c33.154-DETAIL: Role "5LsVrtBjcewd77Q4kaj1" does not exist.
Peringatan email tiba sekitar 30 menit kemudian:
Untuk memungkinkan akses berbutir halus ke server database, Azure menyediakan RBAC, yang merupakan fitur kontrol akses asli cloud, hanya satu alat lagi di gudang PostgreSQL Cloud DBA. Ini sedekat mungkin dengan aturan akses pg_hba yang ada di mana-mana.
Pencadangan dan Pemulihan PostgreSQL di Azure
Terlepas dari tingkat harga, cadangan disimpan antara 7 dan 35 hari. Tingkat harga juga memengaruhi kemampuan untuk memulihkan data.
Pemulihan titik-dalam-waktu tersedia melalui Portal Azure atau CLI dan menurut dokumentasi terperinci hingga lima menit. Fungsi portal agak terbatas — widget pemilih tanggal secara membabi buta menunjukkan 7 hari terakhir sebagai tanggal yang mungkin untuk dipilih, meskipun saya membuat server hari ini. Selain itu, tidak ada verifikasi yang dilakukan pada waktu target pemulihan — Saya berharap memasukkan nilai di luar interval pemulihan akan memicu kesalahan yang mencegah wizard untuk melanjutkan:
Setelah proses pemulihan dimulai, kesalahan, diduga disebabkan oleh out nilai rentang, akan muncul sekitar satu menit kemudian:
…tapi, sayangnya, pesan kesalahannya tidak terlalu membantu:
Terakhir, penyimpanan cadangan gratis untuk periode penyimpanan hingga 7 hari. Itu terbukti sangat berguna untuk lingkungan pengembangan.
Petunjuk dan Kiat
Batas
Biasakan dengan Batas Server Tunggal.
Konektivitas
Selalu gunakan string koneksi agar koneksi dirutekan ke server database yang benar.
Replikasi
Untuk skenario pemulihan bencana, temukan replika baca di salah satu region yang dipasangkan.
Peran
Seperti halnya dengan AWS dan GCloud, tidak ada akses pengguna super.
GUC
Parameter yang memerlukan restart server atau akses pengguna super tidak dapat dikonfigurasi.
Penskalaan
Selama penskalaan otomatis, aplikasi harus mencoba lagi hingga node baru ditampilkan.
Jumlah memori dan IOPS tidak dapat ditentukan — memori dialokasikan dalam satuan GB per vCore, hingga maksimum 320GB (32vCores x 10GB), dan IOPS bergantung pada ukuran penyimpanan yang disediakan untuk maksimum 6000 IOPS. Saat ini Azure menawarkan opsi pratinjau penyimpanan besar dengan maksimum 20.000 IOPS.
Server yang dibuat di tingkat Dasar tidak dapat ditingkatkan ke Tujuan Umum atau Dioptimalkan Memori.
Penyimpanan
Pastikan fitur auto-grow diaktifkan — jika jumlah data melebihi ruang penyimpanan yang disediakan, database akan masuk dalam mode read-only.
Penyimpanan hanya dapat ditingkatkan. Sama seperti semua penyedia cloud lainnya, alokasi penyimpanan tidak dapat dikurangi dan saya tidak dapat menemukan penjelasan apa pun. Mengingat peralatan canggih, pemain cloud besar mampu membelinya, seharusnya tidak ada alasan untuk tidak menyediakan fitur yang mirip dengan relokasi data online LVM. Penyimpanan sangat murah saat ini, benar-benar tidak ada alasan untuk berpikir untuk menurunkan skala hingga peningkatan versi utama berikutnya.
Firewall
Dalam beberapa kasus, pembaruan aturan firewall mungkin memerlukan waktu hingga lima menit untuk diterapkan.
Server terletak di subnet yang sama dengan server aplikasi tidak akan dapat dijangkau sampai aturan firewall yang sesuai diterapkan.
Aturan jaringan virtual tidak mengizinkan akses lintas wilayah dan akibatnya, dblink dan postgres_fdw tidak dapat digunakan untuk terhubung ke database di luar awan Azure.
Pendekatan VNet/Subnet tidak dapat diterapkan ke Aplikasi Web karena koneksinya berasal dari alamat IP publik.
Jaringan virtual besar tidak akan tersedia saat titik akhir layanan diaktifkan.
Enkripsi
Untuk aplikasi yang memerlukan validasi sertifikat server, file tersedia untuk diunduh dari Digicert. Microsoft membuatnya mudah dan Anda tidak perlu khawatir tentang pembaruan hingga tahun 2025:
~ $ openssl x509 -in BaltimoreCyberTrustRoot.crt.pem -noout -dates
notBefore=May 12 18:46:00 2000 GMT
notAfter=May 12 23:59:00 2025 GMT
Sistem Deteksi Intrusi
Rilis pratinjau Advanced Threat Protection tidak tersedia untuk instans tingkat Dasar.
Cadangkan dan Pulihkan
Untuk aplikasi yang tidak mampu menyediakan waktu henti wilayah, pertimbangkan untuk mengonfigurasi server dengan penyimpanan cadangan geo-redundan. Opsi ini hanya dapat diaktifkan pada saat membuat server database.
Persyaratan untuk mengonfigurasi ulang aturan firewall cloud setelah operasi PITR sangat penting.
Menghapus server database akan menghapus semua cadangan.
Setelah pemulihan, ada tugas pasca-pemulihan tertentu yang harus dilakukan.
Tabel tanpa log direkomendasikan untuk penyisipan massal guna meningkatkan kinerja, namun tabel tersebut tidak direplikasi.
Pemantauan
Metrik dicatat setiap menit dan disimpan selama 30 hari.
Logging
Query Store adalah opsi global, artinya ini berlaku untuk semua database. Transaksi dan kueri hanya baca yang lebih panjang dari 6.000 byte bermasalah. Secara default, kueri yang diambil disimpan selama 7 hari.
Kinerja
Rekomendasi Wawasan Kinerja Kueri saat ini terbatas untuk membuat dan menghapus indeks.
Nonaktifkan pg_stat_staements jika tidak diperlukan.
Ganti uuid_generate_v4 dengan gen_random_uuid(). Ini sejalan dengan rekomendasi dalam dokumentasi resmi PostgreSQL, lihat Membangun uuid-ossp.
Ketersediaan dan Replikasi Tinggi
Ada batas lima replika baca. Aplikasi intensif tulis harus menghindari penggunaan replika baca karena mekanisme replikasi tidak sinkron yang menyebabkan beberapa penundaan yang harus dapat ditoleransi oleh aplikasi. Replika baca dapat ditemukan di wilayah yang berbeda.
Dukungan REPLICA hanya dapat diaktifkan setelah server dibuat. Fitur ini memerlukan restart server:
Replika baca tidak mewarisi aturan firewall dari master node:
Gagal membaca replika tidak otomatis. Mekanisme failover berbasis node.
Ada daftar panjang Pertimbangan yang perlu ditinjau sebelum mengonfigurasi replika baca.
Membuat replika membutuhkan waktu lama, bahkan ketika saya menguji dengan kumpulan data yang relatif kecil:
VacuumVacuum
Tinjau parameter utama, karena Azure Database untuk PostgreSQL dikirimkan dengan nilai default vakum upstream:
[email protected]:5432 postgres> select name,setting from pg_settings where name ~ '^autovacuum.*';
name | setting
-------------------------------------+-----------
autovacuum | on
autovacuum_analyze_scale_factor | 0.05
autovacuum_analyze_threshold | 50
autovacuum_freeze_max_age | 200000000
autovacuum_max_workers | 3
autovacuum_multixact_freeze_max_age | 400000000
autovacuum_naptime | 15
autovacuum_vacuum_cost_delay | 20
autovacuum_vacuum_cost_limit | -1
autovacuum_vacuum_scale_factor | 0.05
autovacuum_vacuum_threshold | 50
autovacuum_work_mem | -1
(12 rows)
Upgrade
Upgrade besar otomatis tidak didukung. Seperti yang disebutkan sebelumnya, ini adalah peluang penghematan biaya, dengan mengurangi penyimpanan yang dikembangkan secara otomatis.
Peningkatan PostgreSQL Azure
Deret waktu
TimescaleDB tersedia sebagai ekstensi (bukan bagian dari modul PostgreSQL), namun hanya dengan beberapa klik saja. Satu-satunya kelemahan adalah versi lama 1.1.1, sedangkan versi upstream saat ini berada di 1.4.1 (01-08-2019).
[email protected]:5432 postgres> CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
WARNING:
WELCOME TO
_____ _ _ ____________
|_ _(_) | | | _ \ ___ \
| | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ /
| | | | _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \
| | | | | | | | | __/\__ \ (_| (_| | | __/ |/ /| |_/ /
|_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/
Running version 1.1.1
For more information on TimescaleDB, please visit the following links:
1. Getting started: https://docs.timescale.com/getting-started
2. API reference documentation: https://docs.timescale.com/api
3. How TimescaleDB is designed: https://docs.timescale.com/introduction/architecture
CREATE EXTENSION
[email protected]:5432 postgres> \dx timescaledb
List of installed extensions
Name | Version | Schema | Description
-------------+---------+--------+-------------------------------------------------------------------
timescaledb | 1.1.1 | public | Enables scalable inserts and complex queries for time-series data
(1 row)
Logging
Selain opsi logging PostgreSQL, Azure Database untuk PostgreSQL dapat dikonfigurasi untuk merekam peristiwa diagnostik tambahan.
Firewall
Azure Portal menyertakan fitur praktis untuk mengizinkan koneksi dari alamat IP yang masuk ke portal:
Saya mencatat fitur ini karena memudahkan pengembang dan administrator sistem untuk membiarkan diri mereka masuk, dan itu menonjol sebagai fitur yang tidak ditawarkan oleh AWS, maupun GCloud.
Kesimpulan
Azure Database for PostgreSQL Single Server menawarkan layanan tingkat perusahaan, namun, banyak dari layanan ini masih dalam mode pratinjau:Query Store, Performance Insight, Performance Recommendation, Advanced Threat Protection, Large Storage, Cross-region Baca Replika.
Sementara pengetahuan sistem operasi tidak lagi diperlukan untuk mengelola PostgreSQL di cloud Azure, DBA diharapkan memperoleh keterampilan yang tidak terbatas pada database itu sendiri — Jaringan Azure (VNet), keamanan koneksi (firewall ), penampil log dan analitik bersama dengan KQL, Azure CLI untuk skrip praktis, dan daftarnya terus berlanjut.
Terakhir, bagi mereka yang berencana untuk memigrasikan beban kerja PostgreSQL mereka ke Azure, ada sejumlah sumber daya yang tersedia bersama dengan daftar Mitra Azure yang dipilih termasuk Credativ, salah satu sponsor dan kontributor utama PostgreSQL.