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

Scaling PostgreSQL Menggunakan Connection Poolers &Load Balancers

Skalabilitas adalah properti sistem untuk menangani jumlah permintaan yang terus bertambah dengan menambahkan sumber daya. Alasan jumlah permintaan ini bisa bersifat sementara, misalnya, jika Anda meluncurkan diskon untuk penjualan, atau permanen, untuk peningkatan pelanggan atau karyawan. Bagaimanapun, Anda harus dapat menambah atau menghapus sumber daya untuk mengelola perubahan ini pada permintaan atau peningkatan lalu lintas.

Ada berbagai pendekatan yang tersedia untuk menskalakan database Anda. Di blog ini, kita akan melihat apa pendekatan ini dan bagaimana menskalakan database PostgreSQL Anda menggunakan Connection Poolers dan Load Balancer.

Penskalaan Horizontal dan Vertikal

Ada dua cara utama untuk menskalakan database Anda.

  • Penskalaan Horizontal (scale-out):Hal ini dilakukan dengan menambahkan lebih banyak node database membuat atau meningkatkan cluster database. Ini dapat membantu Anda meningkatkan kinerja baca dengan menyeimbangkan lalu lintas antar node.
  • Penskalaan Vertikal (peningkatan skala):Hal ini dilakukan dengan menambahkan lebih banyak sumber daya perangkat keras (CPU, Memori, Disk) ke node database yang ada. Mungkin diperlukan untuk mengubah beberapa parameter konfigurasi agar PostgreSQL dapat menggunakan sumber daya perangkat keras baru atau yang lebih baik.

Pengumpul Koneksi dan Penyeimbang Beban

Dalam Penskalaan Horizontal dan Vertikal, mungkin berguna untuk menambahkan alat eksternal untuk mengurangi beban pada database Anda yang akan meningkatkan kinerja. Mungkin itu tidak cukup, tetapi ini adalah titik awal yang baik. Untuk ini, adalah ide yang baik untuk mengimplementasikan connection pooler dan load balancer. Saya mengatakan "dan" karena mereka dirancang untuk peran yang berbeda.

Pengumpulan koneksi adalah metode untuk membuat kumpulan koneksi dan menggunakannya kembali untuk menghindari membuka koneksi baru ke database setiap saat, yang akan meningkatkan kinerja aplikasi Anda secara signifikan. PgBouncer adalah kumpulan koneksi populer yang dirancang untuk PostgreSQL.

Menggunakan Load Balancer adalah cara untuk memiliki Ketersediaan Tinggi di topologi database Anda dan juga berguna untuk meningkatkan kinerja dengan menyeimbangkan lalu lintas antara node yang tersedia. Untuk ini, HAProxy adalah pilihan yang baik untuk PostgreSQL, karena merupakan proxy open-source yang dapat digunakan untuk mengimplementasikan ketersediaan tinggi, load balancing, dan proxy untuk aplikasi berbasis TCP dan HTTP.

Cara Menerapkan Kombinasi HAProxy, PgBouncer, dan PostgreSQL

Kombinasi dari kedua teknologi, HAProxy dan PgBouncer, mungkin merupakan cara terbaik untuk menskalakan dan meningkatkan kinerja di lingkungan PostgreSQL Anda. Jadi, kita akan melihat bagaimana mengimplementasikannya menggunakan arsitektur berikut:

Kami akan menganggap Anda telah menginstal ClusterControl, jika tidak, Anda dapat membuka situs resmi, atau bahkan lihat dokumentasi resmi untuk menginstalnya.

Pertama, Anda perlu menerapkan cluster PostgreSQL Anda dengan HAProxy di depannya. Untuk ini, ikuti langkah-langkah dalam posting blog ini untuk menerapkan PostgreSQL dan HAProxy menggunakan ClusterControl.

Pada titik ini, Anda akan memiliki sesuatu seperti ini:

Sekarang, Anda dapat menginstal PgBouncer pada setiap node database atau pada mesin eksternal .

Untuk mendapatkan perangkat lunak PgBouncer, Anda dapat membuka bagian unduhan PgBouncer, atau menggunakan repositori RPM atau DEB. Untuk contoh ini, kita akan menggunakan CentOS 8 dan akan menginstalnya dari repositori resmi PostgreSQL.

Pertama, unduh dan instal repositori yang sesuai dari situs PostgreSQL (jika Anda belum memilikinya):

$ wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

$ rpm -Uvh pgdg-redhat-repo-latest.noarch.rpm

Kemudian, instal paket PgBouncer:

$ yum install pgbouncer

Setelah selesai, Anda akan memiliki file konfigurasi baru yang terletak di /etc/pgbouncer/pgbouncer.ini. Sebagai file konfigurasi default, Anda dapat menggunakan contoh berikut:

$ cat /etc/pgbouncer/pgbouncer.ini

[databases]

world = host=127.0.0.1 port=5432 dbname=world

[pgbouncer]

logfile = /var/log/pgbouncer/pgbouncer.log

pidfile = /var/run/pgbouncer/pgbouncer.pid

listen_addr = *

listen_port = 6432

auth_type = md5

auth_file = /etc/pgbouncer/userlist.txt

admin_users = admindb

Dan file otentikasi:

$ cat /etc/pgbouncer/userlist.txt

"admindb" "root123"

Ini hanya contoh dasar. Untuk mendapatkan semua parameter yang tersedia, Anda dapat memeriksa dokumentasi resmi.

Jadi, dalam hal ini, saya telah menginstal PgBouncer di node database yang sama, mendengarkan di semua alamat IP, dan terhubung ke database PostgreSQL yang disebut "dunia". Saya juga mengelola pengguna yang diizinkan dalam file userlist.txt dengan kata sandi teks biasa yang dapat dienkripsi jika diperlukan.

Untuk memulai layanan PgBouncer, Anda hanya perlu menjalankan perintah berikut:

$ pgbouncer -d /etc/pgbouncer/pgbouncer.ini

Sekarang, jalankan perintah berikut menggunakan informasi lokal Anda (port, host, nama pengguna, dan nama database) untuk mengakses database PostgreSQL:

$ psql -p 6432 -h 127.0.0.1 -U admindb world

Password for user admindb:

psql (12.4)

Type "help" for help.



world=#

Ini adalah topologi dasar. Anda dapat meningkatkannya, misalnya, menambahkan dua atau lebih node penyeimbang beban untuk menghindari satu titik kegagalan, dan menggunakan beberapa alat seperti “Keepalived”, untuk memastikan ketersediaan. Itu juga dapat dilakukan dengan menggunakan ClusterControl.

Untuk informasi lebih lanjut tentang PgBouncer dan cara menggunakannya, Anda dapat merujuk ke posting blog ini.

Kesimpulan

Jika Anda perlu menskalakan klaster PostgreSQL, menambahkan HAProxy dan PgBouncer adalah cara yang baik untuk memperbesar dan memperbesar pada saat yang sama, karena Anda dapat menambahkan lebih banyak node siaga panas untuk menyeimbangkan lalu lintas dan Anda akan meningkatkan kinerja dengan menggunakan kembali koneksi yang dibuka.

ClusterControl menyediakan berbagai macam fitur, mulai dari pemantauan, peringatan, failover otomatis, pencadangan, pemulihan tepat waktu, verifikasi pencadangan, hingga penskalaan replika baca. Ini dapat membantu Anda menskalakan database PostgreSQL secara horizontal atau vertikal dari UI yang ramah dan intuitif.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah lebih baik menggunakan beberapa database dengan satu skema masing-masing, atau satu database dengan beberapa skema?

  2. Contoh Tabel dan Metode Lain untuk Mendapatkan Tuple Acak

  3. Heroku Postgresql dengan Google Datastudio

  4. 3 Cara Mendaftar semua Prosedur Tersimpan dalam Database PostgreSQL

  5. Masukkan Kamus Python menggunakan Psycopg2