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

Penggabungan Koneksi PostgreSQL:Bagian 3 – Pgpool-II

Dalam posting kami sebelumnya di seri ini, kami membahas kasus penyatuan koneksi dan memperkenalkan PgBouncer. Dalam posting ini, kita akan membahas alternatif yang paling populer – Pgpool-II.

Pgpool-II adalah pisau tentara swiss dari middleware PostgreSQL. Ini mendukung ketersediaan tinggi, menyediakan penyeimbangan beban otomatis, dan memiliki kecerdasan untuk menyeimbangkan beban antara master dan slave sehingga beban tulis selalu diarahkan ke master, sementara beban baca diarahkan ke slave. Pgpool-II juga menyediakan replikasi logis. Meskipun penggunaan dan pentingnya telah menurun karena opsi replikasi bawaan ditingkatkan di sisi server PostgreSQL, ini masih tetap menjadi opsi yang berharga untuk versi PostgreSQL yang lebih lama. Di atas semua ini, ini juga menyediakan penyatuan koneksi!

Sekilas

Menyiapkan Pgpool-II

Ikuti langkah-langkah ini untuk menyiapkan Pgpool-II, mengaktifkan layanan kumpulan koneksi yang Anda butuhkan, dan menyambungkan ke server PostgreSQL Anda. Baca sekarang

Cara kerjanya

Lihat arsitektur Pgpool-II yang mendukung semua fiturnya, dan pelajari cara kerja connection pooler. Baca sekarang

Apa yang tidak dilakukan Pgpool-II?

Tinjau batasan Pgpool-II untuk melihat apakah itu pooler koneksi yang tepat untuk aplikasi Anda. Baca sekarang

Menyiapkan Pgpool-II

Binary Pgpool-II didistribusikan melalui repositori Pgpool-II – Anda dapat membaca selengkapnya tentang pemasangan di dokumen bantuan ini. Setelah terinstal, kita harus mengkonfigurasi Pgpool-II untuk mengaktifkan layanan yang kita inginkan, dan terhubung ke server PostgreSQL. Anda dapat membaca lebih lanjut di sini.

Untuk mendapatkan penyiapan pooling minimal, Anda harus menyediakan hal berikut:

  • Nama pengguna dan sandi terenkripsi md5 dari pengguna yang akan terhubung ke Pgpool-II – ini harus didefinisikan dalam file terpisah, yang dapat dibuat dengan mudah menggunakan utilitas pg_md5.
  • Antarmuka/alamat IP dan nomor port untuk mendengarkan koneksi masuk – ini harus ditentukan dalam file konfigurasi.
  • Nama host server backend [Lebih dari satu server ditentukan hanya jika kita ingin menggunakan replikasi dan/atau penyeimbangan beban].
  • Layanan yang ingin Anda aktifkan. Secara default, penyatuan koneksi aktif, dan layanan lain dimatikan di file konfigurasi yang diinstal dengan binari.

Dan hanya itu – kami siap untuk pergi! Meskipun konfigurasi yang tersedia dengan Pgpool-II mungkin lebih menakutkan pada pandangan pertama, orang-orang di balik Pgpool-II benar-benar membuatnya mudah bagi kami!

Cara kerjanya

Pgpool-II memiliki arsitektur yang lebih terlibat daripada PgBouncer untuk mendukung semua fitur yang dimilikinya. Namun, di bagian ini, kami akan membatasi diri untuk menjelaskan cara kerja penyatuan koneksi.

Proses induk Pgpool-II memotong 32 proses anak secara default – ini tersedia untuk koneksi. Arsitekturnya mirip dengan server PostgreSQL:satu proses =satu koneksi. Itu juga memotong 'proses pcp' yang digunakan untuk tugas administratif, dan di luar cakupan posting ini. Ke-32 anak sekarang siap menerima koneksi. Seperti PgBouncer, ini juga mengemulasi server PostgreSQL – klien dapat terhubung dengan string koneksi yang sama persis seperti ke server PostgreSQL biasa.

Kernel mengarahkan koneksi masuk ke salah satu proses anak yang telah terdaftar sebagai pendengar. Baik proses Pgpool-II utama maupun pengguna akhir tidak memiliki kendali atas proses anak mana yang merespons permintaan yang masuk. Setiap anak yang menganggur dapat menerima permintaan tersebut. Jika tidak ditemukan turunan yang menganggur, permintaan koneksi akan diantrekan di sisi kernel – ini dapat menyebabkan aplikasi seperti pgbench hang, menunggu koneksi klien.

Setelah anak Pgpool-II yang menganggur menerima permintaan koneksi, itu:

  1. Memeriksa nama pengguna di file kata sandinya. Jika tidak ditemukan, koneksi akan ditolak.
  2. Jika nama pengguna ditemukan, ia akan memeriksa sandi yang diberikan terhadap hash md5 yang disimpan dalam file ini.
  3. Setelah otentikasi berhasil, ia akan memeriksa apakah sudah memiliki koneksi yang di-cache untuk kombinasi database+pengguna ini.
  4. Jika ya, itu mengembalikan koneksi ke klien. Jika tidak, itu akan membuka koneksi baru.
  5. Semua permintaan dan tanggapan melewati Pgpool-II sementara menunggu klien memutuskan sambungan.
  6. Setelah klien terputus, Pgpool-II harus memutuskan apakah akan men-cache koneksi:
    • Jika memiliki slot kosong, ia menyimpannya di cache.
    • Jika tidak memiliki slot kosong (yaitu, men-cache koneksi ini akan melebihi max_pool_size yang diizinkan), itu akan memutuskan berdasarkan algoritme internal.
  7. Jika memutuskan untuk men-cache koneksi, itu akan menjalankan kueri reset yang telah dikonfigurasikan sebelumnya untuk membersihkan semua detail sesi dan membuatnya aman untuk digunakan kembali oleh klien yang berbeda.
  8. Sekarang proses anak bebas untuk mengambil lebih banyak koneksi.

Kiat Pakar

Penting untuk terus memantau kesehatan server master dan slave MySQL Anda sehingga Anda dapat mendeteksi potensi masalah dan mengambil tindakan korektif.

Apa yang tidak dilakukan Pgpool-II?

Sayangnya, bagi mereka yang hanya berfokus pada penyatuan koneksi, apa yang Pgpool-II tidak lakukan dengan baik adalah penyatuan koneksi, terutama untuk sejumlah kecil klien. Karena setiap proses anak memiliki kumpulannya sendiri, dan tidak ada cara untuk mengontrol klien mana yang terhubung ke proses anak mana, terlalu banyak yang tersisa untuk keberuntungan saat menggunakan kembali koneksi.

Seperti yang Anda lihat, Pgpool dan PgBouncer memiliki kekuatan yang agak berbeda – di postingan terakhir seri ini, kami akan melakukan pengujian head-to-head , dan perbandingan fitur! Tetap disini!

Seri Penyatuan Koneksi PostgreSQL

  • Bagian 1 – Pro &Kontra
  • Bagian 2 – PgBouncer
  • Bagian 3 – Pgpool-II
  • Bagian 4 – PgBouncer vs. Pgpool-II


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengubah Lokal Saat Memformat Angka di PostgreSQL

  2. Mengapa saya tidak dapat mengecualikan kolom dependen dari `GROUP BY` saat saya mengagregasi berdasarkan kunci?

  3. Bagaimana Fungsi Power() Bekerja di PostgreSQL

  4. Postgres - Berfungsi untuk mengembalikan persimpangan 2 ARRAY?

  5. Cara Mengizinkan Akses Jarak Jauh ke database PostgreSQL