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 DataKami 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 1Di 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 1Ketika 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 2Dengan 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 1Untuk tugas ini kita harus pergi ke ClusterControl -> PostgreSQL Cluster Actions -> Add Load Balancer
Menu Tindakan Cluster Kontrol ClusterDi sini kita harus menambahkan informasi yang akan digunakan ClusterControl untuk menginstal dan mengkonfigurasi penyeimbang beban HAProxy kita.
ClusterControl Load Balancer Menyebarkan Informasi 2Informasi 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 LanjutSetelah Anda menyelesaikan konfigurasi dan mengonfirmasi penerapan, kami dapat mengikuti perkembangannya di bagian Aktivitas di UI ClusterControl.
Bagian Aktivitas Kontrol ClusterSetelah selesai, kita harus memiliki topologi berikut:
Tampilan Topologi Kontrol Cluster 2Kami 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.