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

Cara Membuat Titik Akhir Tunggal untuk Pengaturan Replikasi PostgreSQL Anda menggunakan HAProxy

Mengelola lalu lintas ke database bisa menjadi semakin sulit karena jumlahnya meningkat dan database sebenarnya didistribusikan ke beberapa server. Klien PostgreSQL biasanya berbicara dengan satu titik akhir. Ketika node utama gagal, klien database akan terus mencoba kembali IP yang sama. Jika Anda gagal ke simpul sekunder, aplikasi perlu diperbarui dengan titik akhir baru. Di sinilah Anda ingin menempatkan penyeimbang beban antara aplikasi dan instans database. Itu dapat mengarahkan aplikasi ke node database yang tersedia/sehat dan failover bila diperlukan. Manfaat lain adalah meningkatkan kinerja membaca dengan menggunakan replika secara efektif. Dimungkinkan untuk membuat port hanya-baca yang menyeimbangkan pembacaan di seluruh replika. Di blog ini, kita akan membahas HAProxy. Kita akan melihat apa itu, cara kerjanya, dan cara menerapkannya untuk PostgreSQL.

Apa itu HAProxy?

HAProxy adalah proxy open source yang dapat digunakan untuk mengimplementasikan ketersediaan tinggi, load balancing, dan proxy untuk aplikasi berbasis TCP dan HTTP.

Sebagai penyeimbang beban, HAProxy mendistribusikan lalu lintas dari satu asal ke satu atau beberapa tujuan dan dapat menentukan aturan dan/atau protokol khusus untuk tugas ini. Jika salah satu tujuan berhenti merespons, itu ditandai sebagai offline, dan lalu lintas dikirim ke tujuan lain yang tersedia.

Cara menginstal dan mengkonfigurasi HAProxy secara manual

Untuk menginstal HAProxy di Linux Anda dapat menggunakan perintah berikut:

Di OS Ubuntu/Debian:

$ apt-get install haproxy -y

Pada CentOS/RedHat OS:

$ yum install haproxy -y

Dan kemudian kita perlu mengedit file konfigurasi berikut untuk mengelola konfigurasi HAProxy kita:

$ /etc/haproxy/haproxy.cfg

Mengkonfigurasi HAProxy kami tidak rumit, tetapi kami perlu tahu apa yang kami lakukan. Kami memiliki beberapa parameter untuk dikonfigurasi, tergantung pada bagaimana kami ingin HAProxy bekerja. Untuk informasi lebih lanjut, kita dapat mengikuti dokumentasi tentang konfigurasi HAProxy.

Mari kita lihat contoh konfigurasi dasar. Misalkan Anda memiliki topologi database berikut:

Contoh Topologi Basis Data

Kami ingin membuat pendengar HAProxy untuk menyeimbangkan lalu lintas baca antara tiga node.

listen haproxy_read
   bind *:5434
   balance     roundrobin
   server  postgres1 10.1.1.10:5432 check
   server  postgres2 10.1.1.11:5432 check
   server  postgres3 10.1.1.12:5432 check

Seperti yang kami sebutkan sebelumnya, ada beberapa parameter untuk dikonfigurasi di sini, dan konfigurasi ini tergantung pada apa yang ingin kita lakukan. Misalnya:

listen  haproxy_read
       bind *:5434
       mode tcp
       timeout client  10800s
       timeout server  10800s
       tcp-check expect string is\ running
       balance leastconn
       option tcp-check
       default-server port 9201 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
       server  postgres1 10.1.1.10:5432 check
       server  postgres2 10.1.1.11:5432 check
       server  postgres3 10.1.1.12:5432 check

Cara kerja HAProxy di ClusterControl

Untuk PostgreSQL, HAProxy dikonfigurasi oleh ClusterControl dengan dua port berbeda secara default, satu baca-tulis dan satu baca-saja.

ClusterControl Load Balancer Menyebarkan Informasi 1

Di port baca-tulis, kita memiliki server master sebagai online dan node lainnya sebagai offline, dan di port hanya-baca, kita memiliki master dan slave online.

ClusterControl Load Balancer Stats 1

Ketika HAProxy mendeteksi bahwa salah satu node kami, baik master atau slave, tidak dapat diakses, HAProxy secara otomatis menandainya sebagai offline dan tidak memperhitungkannya saat mengirim lalu lintas. Deteksi dilakukan dengan skrip healthcheck yang dikonfigurasi oleh ClusterControl pada saat penerapan. Ini memeriksa apakah instance aktif, apakah sedang menjalani pemulihan, atau hanya-baca.

Saat ClusterControl mempromosikan budak ke master, HAProxy kami menandai master lama sebagai offline (untuk kedua port) dan menempatkan node yang dipromosikan online (di port baca-tulis).

ClusterControl Load Balancer Stats 2

Dengan cara ini, sistem kami terus beroperasi secara normal dan tanpa campur tangan kami.

Cara menerapkan HAProxy dengan ClusterControl

Dalam contoh kami, kami membuat lingkungan dengan 1 master dan 2 budak - lihat tangkapan layar Tampilan Topologi di ClusterControl. Kami sekarang akan menambahkan penyeimbang beban HAProxy kami.

Tampilan Topologi Kontrol Cluster 1

Untuk tugas ini kita harus pergi ke ClusterControl -> PostgreSQL Cluster Actions -> Add Load Balancer

Menu Tindakan Cluster Kontrol Cluster

Di sini kita harus menambahkan informasi yang akan digunakan ClusterControl untuk menginstal dan mengkonfigurasi penyeimbang beban HAProxy kita.

ClusterControl Load Balancer Menyebarkan Informasi 2

Informasi yang perlu kami perkenalkan adalah:

Tindakan:Terapkan atau Impor.

HAProxy Address:Alamat IP untuk server HAProxy kami.

Ikat ke:Antarmuka atau Alamat IP tempat HAProxy akan mendengarkan.

Listen Port (Baca/Tulis):Port untuk mode baca/tulis.

Listen Port (Read Only):Port untuk mode hanya baca.

Kebijakan:Dapat berupa:

  • leastconn:Server dengan jumlah koneksi terendah menerima koneksi.
  • roundrobin:Setiap server digunakan secara bergiliran, sesuai dengan bobotnya.
  • sumber:Alamat IP sumber di-hash dan dibagi dengan berat total server yang berjalan untuk menentukan server mana yang akan menerima permintaan.

Instal untuk pemisahan baca/tulis:Untuk replikasi master-slave.

Sumber:Kita dapat memilih Instal dari pengelola paket atau membangun dari sumber.

Timpa postgreschk yang ada pada target.

Dan kami perlu memilih server mana yang ingin Anda tambahkan ke konfigurasi HAProxy dan beberapa informasi tambahan seperti:

Peran:Bisa Aktif atau Cadangan.

Sertakan:Ya atau Tidak.

Informasi alamat koneksi.

Selain itu, kita dapat mengonfigurasi Pengaturan Lanjutan seperti Pengguna Admin, Nama Backend, Timeout, dan lainnya.

ClusterControl Load Balancer Menyebarkan Informasi Tingkat Lanjut

Setelah Anda menyelesaikan konfigurasi dan mengonfirmasi penerapan, kami dapat mengikuti perkembangannya di bagian Aktivitas di UI ClusterControl.

Bagian Aktivitas Kontrol Cluster

Setelah selesai, kita harus memiliki topologi berikut:

Tampilan Topologi Kontrol Cluster 2

Kami dapat meningkatkan desain HA kami dengan menambahkan node HAProxy baru dan mengonfigurasi layanan Keepalive di antara mereka. Semua ini dapat dilakukan oleh ClusterControl. Untuk informasi lebih lanjut, Anda dapat memeriksa blog kami sebelumnya tentang PostgreSQL dan HA.

Menggunakan ClusterControl CLI untuk menambahkan HAProxy Load Balancer

Juga dikenal sebagai s9s-tools, paket opsional ini diperkenalkan di ClusterControl versi 1.4.1, yang berisi biner yang disebut s9s. Ini adalah alat baris perintah untuk berinteraksi, mengontrol, dan mengelola infrastruktur database Anda menggunakan ClusterControl. Proyek baris perintah s9s adalah open source dan dapat ditemukan di GitHub.

Mulai dari versi 1.4.1, skrip penginstal akan secara otomatis menginstal paket (s9s-tools) pada node ClusterControl.

ClusterControl CLI membuka pintu baru untuk otomatisasi cluster di mana Anda dapat dengan mudah mengintegrasikannya dengan alat otomatisasi penerapan yang ada seperti Ansible, Puppet, Chef, atau Salt.

Mari kita lihat contoh cara membuat load balancer HAProxy dengan IP Address 192.168.100.142 pada cluster ID 1:

[[email protected] ~]# s9s cluster --add-node --cluster-id=1 --nodes="haproxy://192.168.100.142" --wait
Add HaProxy to Cluster
/ Job  7 FINISHED   [██████████] 100% Job finished.

Dan kemudian kita dapat memeriksa semua node kita dari baris perintah:

[[email protected] ~]# s9s node --cluster-id=1 --list --long
STAT VERSION    CID CLUSTER     HOST            PORT COMMENT
coC- 1.7.0.2832   1 PostgreSQL1 192.168.100.135 9500 Up and running.
poS- 10.5         1 PostgreSQL1 192.168.100.136 5432 Up and running.
poM- 10.5         1 PostgreSQL1 192.168.100.137 5432 Up and running.
poS- 10.5         1 PostgreSQL1 192.168.100.138 5432 Up and running.
ho-- 1.5.18       1 PostgreSQL1 192.168.100.142 9600 Process 'haproxy' is running.
Total: 5

Untuk informasi lebih lanjut tentang s9s dan cara menggunakannya, Anda dapat memeriksa dokumentasi resmi atau ini cara blog topik ini.

Kesimpulan

Di blog ini, kami telah meninjau bagaimana HAProxy dapat membantu kami mengelola lalu lintas yang berasal dari aplikasi ke dalam basis data PostgreSQL kami. Kami memeriksa bagaimana itu dapat digunakan dan dikonfigurasi secara manual, dan kemudian melihat bagaimana itu dapat diotomatisasi dengan ClusterControl. Untuk menghindari HAProxy menjadi satu titik kegagalan (SPOF), pastikan Anda menerapkan setidaknya dua instans HAProxy dan mengimplementasikan sesuatu seperti Keepalived dan Virtual IP di atasnya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengekspor tabel sebagai CSV dengan judul di Postgresql?

  2. 8 Fitur kompatibilitas Oracle baru di EnterpriseDB PPAS 9.2 Beta

  3. Dapatkan nama tabel sumber baris saat menanyakan induk yang diwarisinya

  4. Optimalkan kueri GROUP BY untuk mengambil baris terbaru per pengguna

  5. pgFincore 1.2, ekstensi PostgreSQL