Bagikan melalui


PgBouncer di Azure Database for PostgreSQL - Server Fleksibel

BERLAKU UNTUK: Azure Database for PostgreSQL - Server Fleksibel

Server fleksibel Azure Database for PostgreSQL menawarkan PgBouncer sebagai solusi pengumpulan koneksi bawaan. PgBouncer adalah fitur opsional yang dapat Anda aktifkan berdasarkan per database-server. Ini didukung pada tingkat komputasi Tujuan Umum dan Memori yang Dioptimalkan di akses publik dan jaringan akses privat.

PgBouncer berjalan pada komputer virtual (VM) yang sama dengan server database untuk server fleksibel Azure Database for PostgreSQL. Postgres menggunakan model berbasis proses untuk koneksi, sehingga mempertahankan banyak koneksi diam mahal. Postgres mengalami batasan sumber daya saat server menjalankan lebih dari beberapa ribu koneksi. Keuntungan utama PgBouncer adalah untuk meningkatkan sambungan diam dan sambungan jangka pendek di server database.

PgBouncer menggunakan model ringan yang menggunakan I/O asinkron. Ini menggunakan koneksi Postgres hanya ketika diperlukan --yaitu, ketika berada di dalam transaksi terbuka atau saat kueri aktif. Model ini memungkinkan penskalakan hingga 10.000 koneksi dengan overhead rendah.

PgBouncer berjalan pada port 6432 di server database Anda. Anda dapat mengubah konfigurasi koneksi database aplikasi untuk menggunakan nama host yang sama, tetapi mengubah port menjadi 6432 untuk mulai menggunakan PgBouncer dan mendapat manfaat dari peningkatan penskalaan koneksi diam.

PgBouncer di server fleksibel Azure Database for PostgreSQL mendukung autentikasi Microsoft Entra (Microsoft Azure AD).

Mengaktifkan dan mengonfigurasi PgBouncer

Untuk mengaktifkan PgBouncer, buka panel Parameter server di portal Azure, cari PgBouncer, dan ubah pengaturan menjadi pgbouncer.enabled true. Tidak perlu menghidupkan ulang server.

Anda dapat mengonfigurasi pengaturan PgBouncer dengan menggunakan parameter ini.

Catatan

Daftar parameter server PgBouncer berikut ini terlihat di panel Parameter server hanya jika pgbouncer.enabled parameter server diatur ke true. Jika tidak, mereka sengaja disembunyikan.

Nama Parameter Deskripsi Default
pgbouncer.default_pool_size Atur nilai parameter ini ke jumlah koneksi per pasangan pengguna/database. 50
pgbouncer.ignore_startup_parameters Masukkan daftar parameter yang dipisahkan koma yang dapat diabaikan PgBouncer. Misalnya, Anda dapat membiarkan PgBouncer mengabaikan extra_float_digits parameter. Beberapa parameter diizinkan; yang lain menimbulkan kesalahan. Kemampuan ini diperlukan untuk mentolerir Konektivitas Database Java yang berlebihan (JDBC) yang ingin diatur extra_float_digits=2 tanpa syarat dalam paket startup. Gunakan opsi ini jika pustaka yang Anda gunakan melaporkan kesalahan seperti pq: unsupported startup parameter: extra_float_digits.
pgbouncer.max_client_conn Tetapkan nilai parameter ini ke jumlah tertinggi sambungan klien ke PgBouncer yang ingin Anda dukung. 5000
pgbouncer.max_prepared_statements Ketika ini diatur ke nilai non-nol PgBouncer melacak tingkat protokol bernama perintah terkait pernyataan yang disiapkan yang dikirim oleh klien dalam mode pengumpulan transaksi dan pernyataan. 0
pgbouncer.min_pool_size Tambahkan lebih banyak sambungan server ke kumpulan jika di bawah angka ini. 0
pgbouncer.pool_mode Atur nilai parameter ini ke TRANSAKSI untuk pengelompokan transaksi (yang merupakan pengaturan yang disarankan untuk sebagian besar beban kerja). transaction
pgbouncer.query_wait_timeout Waktu maksimum (dalam detik) kueri diperbolehkan untuk menunggu eksekusi. Jika kueri tidak ditetapkan ke server selama waktu itu, klien terputus. 120
pgbouncer.server_idle_timeout Jika koneksi server telah menganggur lebih dari sekian detik ini, koneksi server akan dihilangkan. Jika 0 maka batas waktu dinonaktifkan. 600
pgbouncer.stats_users Daftar pengguna database yang dipisahkan koma yang diizinkan untuk menyambungkan dan menjalankan kueri baca-saja di konsol pgBouncer.

Untuk informasi selengkapnya tentang konfigurasi PgBouncer, lihat dokumentasi pgbouncer.ini.

Versi PgBouncer

Saat ini, versi PgBouncer yang disebarkan pada semua versi utama mesin yang didukung (16, 15, 14, 13, 12, 11), di Azure Database for PostgreSQL Flexible Server, adalah 1.22.1.

Keuntungan

Dengan menggunakan fitur PgBouncer bawaan dengan server fleksibel Azure Database for PostgreSQL, Anda bisa mendapatkan manfaat berikut:

  • Kenyamanan konfigurasi yang disederhanakan: Karena PgBouncer terintegrasi dengan server fleksibel Azure Database for PostgreSQL, tidak perlu instalasi terpisah atau penyiapan kompleks. Anda dapat mengonfigurasinya langsung dari parameter server.

  • Keandalan layanan terkelola: PgBouncer menawarkan keuntungan dari layanan terkelola Azure. Misalnya, Azure mengelola pembaruan PgBouncer. Pembaruan otomatis menghilangkan kebutuhan akan pemeliharaan manual dan memastikan bahwa PgBouncer tetap up to date dengan fitur terbaru dan patch keamanan.

  • Dukungan untuk berbagai jenis koneksi: PgBouncer di server fleksibel Azure Database for PostgreSQL menyediakan dukungan untuk koneksi publik dan privat. Anda dapat menggunakannya untuk membuat koneksi aman melalui jaringan privat atau terhubung secara eksternal, tergantung pada persyaratan spesifik Anda.

  • Ketersediaan tinggi dalam skenario failover: Jika server siaga dipromosikan ke peran utama selama failover, PgBouncer memulai ulang dengan mulus pada siaga yang baru dipromosikan. Anda tidak perlu membuat perubahan apa pun pada aplikasi string koneksi. Kemampuan ini membantu memastikan ketersediaan berkelanjutan dan meminimalkan gangguan pada kumpulan koneksi aplikasi.

Memantau PgBouncer

Metrik

Server fleksibel Azure Database for PostgreSQL menyediakan enam metrik untuk memantau pengumpulan koneksi PgBouncer:

Nama tampilan ID metrik Unit description Dimensi Default diaktifkan
Koneksi klien aktif (pratinjau) client_connections_active Hitung Koneksi dari klien yang terkait dengan koneksi server fleksibel Azure Database for PostgreSQL DatabaseName No
Menunggu koneksi klien (pratinjau) client_connections_waiting Hitung Koneksi dari klien yang menunggu koneksi server fleksibel Azure Database for PostgreSQL untuk melayani mereka DatabaseName No
Koneksi server aktif (pratinjau) server_connections_active Hitung Koneksi ke server fleksibel Azure Database for PostgreSQL yang digunakan koneksi klien DatabaseName No
Koneksi server menganggur (pratinjau) server_connections_idle Hitung Koneksi ke server fleksibel Azure Database for PostgreSQL yang menganggur dan siap untuk melayani koneksi klien baru DatabaseName No
Total koneksi terkumpul (pratinjau) total_pooled_connections Hitung Jumlah koneksi terkumpul saat ini DatabaseName No
Jumlah kumpulan koneksi (pratinjau) num_pools Hitung Jumlah total kumpulan koneksi DatabaseName No

Untuk mempelajari lebih lanjut, lihat metrik PgBouncer.

Konsol admin

PgBouncer juga menyediakan database internal yang disebut pgbouncer. Saat menyambungkan ke database tersebut, Anda dapat menjalankan SHOW perintah yang menyediakan informasi tentang status PgBouncer saat ini.

Untuk menyambungkan ke pgbouncer database:

  1. Atur pgBouncer.stats_users parameter ke nama pengguna yang ada (misalnya, myUser), dan terapkan perubahan.

  2. Sambungkan ke pgbouncer database sebagai pengguna ini dan atur port sebagai 6432:

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=myPassword sslmode=require"
    

Setelah Anda tersambung ke database, gunakan SHOW perintah untuk melihat statistik PgBouncer:

  • SHOW HELP: Cantumkan semua perintah yang tersedia SHOW .
  • SHOW POOLS: Tampilkan jumlah koneksi di setiap status untuk setiap kumpulan.
  • SHOW DATABASES: Tampilkan batas koneksi yang diterapkan saat ini untuk setiap database.
  • SHOW STATS: Tampilkan statistik pada permintaan dan lalu lintas untuk setiap database.

Untuk informasi selengkapnya tentang perintah PgBouncer SHOW , lihat Konsol admin.

Mengalihkan aplikasi Anda untuk menggunakan PgBouncer

Untuk mulai menggunakan PgBouncer, ikuti langkah-langkah berikut:

  1. Sambungkan ke server database Anda, tetapi gunakan port 6432 alih-alih port reguler 5432. Verifikasi bahwa koneksi ini berfungsi.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
    
  2. Uji aplikasi Anda di lingkungan QA terhadap PgBouncer, untuk memastikan Anda tidak memiliki masalah kompatibilitas. Proyek PgBouncer menyediakan matriks kompatibilitas, dan kami merekomendasikan pengumpulan transaksi untuk sebagian besar pengguna.

  3. Ubah aplikasi produksi Anda untuk menyambungkan ke port 6432 alih-alih 5432. Pantau kesalahan sisi aplikasi apa pun yang mungkin menunjuk ke masalah kompatibilitas.

PgBouncer dalam ketersediaan tinggi zona-redundan

Di server zona redundan dengan ketersediaan tinggi (HA), server utama menjalankan PgBouncer. Anda dapat terhubung ke PgBouncer di server utama melalui port 6432. Setelah failover, PgBouncer dimulai ulang pada siaga yang baru dipromosikan, yang sekarang menjadi server utama. Jadi aplikasi Anda string koneksi tetap sama setelah failover.

Menggunakan PgBouncer dengan kumpulan sambungan lainnya

Dalam beberapa kasus, Anda mungkin sudah memiliki kumpulan koneksi sisi aplikasi atau menyiapkan PgBouncer di sisi aplikasi Anda (misalnya, sidecar Azure Kubernetes Service). Dalam kasus ini, fitur PgBouncer bawaan masih dapat berguna karena memberikan manfaat penskalaan koneksi diam.

Menggunakan kumpulan sisi aplikasi bersama dengan PgBouncer di server database dapat bermanfaat. Di sini, kumpulan sisi aplikasi membawa manfaat dari berkurangnya latensi koneksi awal (karena perjalanan pulang pergi untuk menginisialisasi koneksi jauh lebih cepat), dan PgBouncer sisi database menyediakan penskalaan koneksi menganggur.

Batasan

  • Fitur PgBouncer saat ini tidak didukung dengan tingkat komputasi server Burstable. Jika Anda mengubah tingkat komputasi dari Tujuan Umum atau Memori yang Dioptimalkan menjadi Burstable, Anda kehilangan kemampuan PgBouncer bawaan.

  • Setiap kali server dimulai ulang selama operasi skala, failover HA, atau mulai ulang, PgBouncer dan VM juga dimulai ulang. Anda kemudian harus membuat ulang koneksi yang ada.

  • Portal tidak menampilkan semua parameter PgBouncer. Setelah mengaktifkan PgBouncer dan menyimpan parameter, Anda harus menutup panel Parameter server (misalnya, pilih Gambaran Umum) lalu kembali ke panel Parameter server.

  • Anda tidak dapat menggunakan mode kumpulan pernyataan bersama dengan pernyataan yang disiapkan. Versi PgBouncer saat ini menambahkan dukungan untuk pernyataan yang disiapkan di dalam mode transaksi. Dukungan ini dapat diaktifkan dan dikonfigurasi melalui parameter max_prepared_statements. Mengatur parameter ini di atas nilai default 0 akan mengaktifkan dukungan untuk pernyataan yang disiapkan. Dukungan ini hanya berlaku untuk pernyataan yang disiapkan tingkat protokol. Untuk sebagian besar bahasa pemrograman, ini berarti bahwa kita menggunakan fungsi libpq PQprepare pada klien, mengirim perintah tingkat protokol yang dapat disadap PgBouncer, daripada mengeluarkan perintah SQL dinamis yang mirip dengan PREPARE proc AS, yang mengirim teks yang tidak akan ditafsirkan PgBouncer dengan benar. Untuk memeriksa batasan lain dari mode kumpulan yang Anda pilih, lihat dokumentasi PgBouncer.

  • Jika PgBouncer disebarkan sebagai fitur, itu menjadi titik kegagalan tunggal potensial. Jika fitur PgBouncer tidak berfungsi, fitur ini dapat mengganggu seluruh kumpulan koneksi database dan menyebabkan waktu henti untuk aplikasi. Untuk mengurangi satu titik kegagalan, Anda dapat menyiapkan beberapa instans PgBouncer di belakang load balancer untuk ketersediaan tinggi di Azure VM.

  • Pembatasan Ukuran Token dengan Autentikasi AAD - Pengguna dengan sejumlah besar keanggotaan grup tidak akan dapat terhubung melalui PgBouncer karena pembatasan ukuran token. Aplikasi, layanan, dan pengguna dengan sejumlah kecil grup berfungsi.

  • PgBouncer adalah aplikasi ringan yang menggunakan arsitektur utas tunggal. Desain ini sangat bagus untuk sebagian besar beban kerja aplikasi. Tetapi dalam aplikasi yang membuat sejumlah besar koneksi berumur pendek, desain ini dapat memengaruhi performa pgBouncer dan membatasi kemampuan Anda untuk menskalakan aplikasi Anda. Anda mungkin perlu mencoba salah satu pendekatan ini:

    • Distribusikan beban koneksi di beberapa instans PgBouncer di Azure VM.
    • Pertimbangkan solusi alternatif, termasuk solusi multithreaded seperti PgCat, di Azure VM.

Penting

Parameter pgbouncer.client_tls_sslmode untuk fitur PgBouncer bawaan telah tidak digunakan lagi di server fleksibel Azure Database for PostgreSQL.

Ketika TLS/SSL untuk koneksi ke server fleksibel Azure Database for PostgreSQL diberlakukan melalui pengaturan require_secure_transport parameter server ke ON, TLS/SSL secara otomatis diberlakukan untuk koneksi ke fitur PgBouncer bawaan. Pengaturan ini aktif secara default saat Anda membuat instans server fleksibel Azure Database for PostgreSQL baru dan mengaktifkan fitur PgBouncer bawaan. Untuk informasi selengkapnya, lihat Gambaran umum jaringan untuk Azure Database for PostgreSQL - Server Fleksibel dengan akses privat.

Bagi pelanggan yang menginginkan manajemen yang disederhanakan, ketersediaan tinggi bawaan, konektivitas yang mudah dengan aplikasi dalam kontainer, dan kemampuan untuk menggunakan parameter konfigurasi paling populer, fitur PgBouncer bawaan adalah pilihan yang baik. Bagi pelanggan yang menginginkan skalabilitas multithread, kontrol penuh atas semua parameter, dan pengalaman penelusuran kesalahan, menyiapkan PgBouncer di Azure VM mungkin merupakan alternatif.

Langkah berikutnya