Apa itu HAProxy?
HAProxy (Proxy Ketersediaan Tinggi) adalah penyeimbang beban sumber terbuka yang dapat memuat keseimbangan layanan TCP apa pun. HAProxy adalah solusi gratis, sangat cepat, dan andal yang menawarkan penyeimbangan beban, ketersediaan tinggi, dan proxy untuk aplikasi berbasis TCP dan HTTP. Ini sangat cocok untuk situs web dengan lalu lintas sangat tinggi dan mendukung banyak situs yang paling banyak dikunjungi di dunia.
Sejak keberadaannya, ia telah menjadi penyeimbang beban sumber terbuka standar de-facto. Meskipun tidak mengiklankan dirinya sendiri, tetapi digunakan secara luas. Di bawah ini adalah diagram dasar tentang tampilan pengaturan:
Memasang HAProxy
Saya menggunakan Ubuntu 14.04 dan menginstalnya dengan:
apt-get install haproxy
Anda dapat memeriksa versi dengan:
haproxy -v
Kita perlu mengaktifkan HAProxy untuk memulai dengan skrip init /etc/default/haproxy. Setel opsi DIAKTIFKAN ke 1 sebagai:
ENABLED=1
Untuk memverifikasi apakah perubahan ini dilakukan dengan benar, jalankan skrip init HAProxy tanpa parameter apa pun. Anda akan melihat yang berikut ini:
$ service haproxy <press_tab_key>
reload restart start status stop
HAProxy sekarang diinstal. Sekarang mari kita membuat setup di mana kita memiliki 2 (dua) instance Apache Web Server dan 1 (satu) instance HAProxy. Di bawah ini adalah informasi setup:
Kami akan menggunakan tiga sistem, muncul secara virtual melalui VirtualBox:
Instance 1 - Load Balancer
Nama host:haproxy
OS:Ubuntu
IP Pribadi:192.168.205.15
Instance 2 - Server Web 1
Hostname:webser01
OS:Ubuntu dengan LAMP
IP Pribadi:192.168.205.16
Instance 2 - Server Web 2
Hostname:webserver02
OS:Ubuntu dengan LAMP
Private IP:192.168.205.17
Berikut adalah diagram tampilan setupnya:
Sekarang mari kita konfigurasikan HAProxy.
Mengonfigurasi HAProxy
Cadangkan file asli dengan mengganti namanya:
mv /etc/haproxy/haproxy.cfg{,.original}
Kita akan membuat file haproxy.cfg kita sendiri. Menggunakan editor teks favorit Anda, buat file /etc/haproxy/haproxy.cfg sebagai:
global log /dev/log local0 log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check
Penjelasan:
global log /dev/log local0 log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy daemon
Direktif log menyebutkan server syslog ke mana pesan log akan dikirim.
Direktif maxconn menentukan jumlah koneksi bersamaan di front-end. Nilai default adalah 2000 dan harus disetel sesuai dengan konfigurasi sistem Anda.
Arahan pengguna dan grup mengubah proses HAProxy ke pengguna/grup yang ditentukan. Ini tidak boleh diubah.
defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000
Bagian di atas memiliki nilai default. Opsi pengiriman ulang memungkinkan redistribusi sesi jika terjadi kegagalan koneksi. Jadi kekakuan sesi diganti jika instance server web turun.
Direktif percobaan ulang menetapkan jumlah percobaan ulang untuk dilakukan pada contoh server web setelah kegagalan koneksi.
Nilai yang akan diubah adalah berbagai arahan timeout. Opsi contimeout menentukan waktu maksimum untuk menunggu upaya koneksi ke instance server web berhasil.
clitimeout dan srvtimeout berlaku ketika klien atau server diharapkan untuk mengakui atau mengirim data selama proses TCP. HAProxy merekomendasikan pengaturan waktu tunggu klien dan server ke nilai yang sama.
listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check
Blok di atas berisi konfigurasi untuk frontend dan backend. Kami mengonfigurasi HAProxy untuk mendengarkan pada port 80 untuk webfarm yang hanya merupakan nama untuk mengidentifikasi aplikasi.
Arahan statistik mengaktifkan halaman statistik koneksi. Halaman ini dapat dilihat dengan URL yang disebutkan dalam stats uri jadi dalam hal ini, http://192.168.205.15/haproxy?stats demo halaman ini dapat dilihat di sini.
Direktif keseimbangan menentukan penyeimbangan beban algoritma yang akan digunakan. Opsi algoritma yang tersedia adalah:
- Robin Bulat (roundrobin),
- Robin Bulat Statis (static-rr),
- Koneksi Terkecil (koneksi terkecil),
- Sumber (sumber),
- URI (uri) dan
- Parameter URL (url_param).
Informasi tentang setiap algoritme dapat diperoleh dari dokumentasi resmi.
Direktif server mendeklarasikan server backend, sintaksnya adalah:
server <server_name> <server_address>[:port] [param*]
Nama yang kami sebutkan di sini akan muncul di log dan peringatan. Ada beberapa parameter lagi yang didukung oleh arahan ini dan kami akan menggunakan parameter centang di artikel ini. Opsi centang mengaktifkan pemeriksaan kesehatan pada instance server web jika tidak, instance server web ?selalu dianggap tersedia.
Setelah Anda selesai mengonfigurasi, mulailah layanan HAProxy:
sudo service haproxy start
Menguji Load-Balancing dan Fail-over
Kami akan menambahkan nama server di kedua file index.html default yang terletak secara default di /var/www/index.html
Pada Instance 2 - Web Server 1 (webserver01 dengan IP-192.168.205.16), tambahkan baris di bawah ini sebagai:
sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"
Pada Instance 3 - Web Server 2 (webserver02 dengan IP-192.168.205.17), tambahkan baris di bawah ini sebagai:
sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"
Sekarang buka browser web di mesin lokal dan telusuri IP haproxy yaitu http://192.168.205.15
Setiap kali Anda me-refresh tab, Anda akan melihat beban sedang didistribusikan ke setiap server web. Di bawah ini adalah screenshot dari browser saya:
Pertama kali saya mengunjungi http://192.168.205.15 , saya mendapatkan:
Dan untuk kedua kalinya, yaitu ketika saya me-refresh halaman, saya mendapatkan:
Anda juga dapat memeriksa statistik haproxy dengan mengunjungi http://192.168.205.15/haproxy?stats
Masih banyak lagi yang dapat Anda lakukan untuk pengaturan ini. Beberapa ide meliputi:
- jadikan satu atau kedua server web offline untuk menguji apa yang terjadi saat Anda mengakses HAProxy
- konfigurasi HAProxy untuk menyajikan halaman pemeliharaan khusus
- mengonfigurasi antarmuka web sehingga Anda dapat memantau statistik HAProxy secara visual
- ubah penjadwal menjadi selain round-robin
- mengonfigurasi prioritas/bobot untuk server tertentu
Itu saja!