HAProxy adalah alat penyeimbang beban dan layanan proxy ketersediaan tinggi sumber terbuka untuk aplikasi jaringan berbasis TCP dan HTTP. Mudah digunakan, cocok untuk situs web volume tinggi dan integrasinya yang mulus ke dalam arsitektur yang ada. Ini menawarkan koneksi transparan, pembongkaran server, penegakan kebijakan, membatasi koneksi selain dari fungsi utama layanan proxy. Pada artikel ini kami menjelaskan cara mengatur haproxy di Ubuntu 16.04.
1. Siapkan Jaringan
Kami akan menambahkan tiga server web yang berjalan dengan Apache2 dan satu server HAPROXY yang akan mem-proxy semua permintaan/tanggapan dari tiga layanan web di jaringan kami.
Berikut daftar Detail Server Web di jaringan kami.
Server 1: site1.local 10.0.1.116
Server 2: site2.local 10.0.1.117
Server 3: site3.local 10.0.1.119
Server HAProxy:
load-balancer.local 10.0.1.118
Kami juga akan melampirkan satu IP publik ke load-balancer.local untuk mengaksesnya dari domain publik (opsional). Jika Anda tidak ingin mengaksesnya dari domain publik, Anda dapat melewati pemasangan IP publik dengan asumsi Anda akan mengakses server proxy dalam jaringan Anda.
2. Konfigurasi nama host
Karena kita akan mengakses load balancer dan server web dengan namanya ( bukan dengan IPADDRESS ) maka kita akan mengatur nama host dari tiga server web dan satu server proxy. Kami akan menyiapkan nama host dari tiga server web dan server proxy masing-masing sebagai site1.local, site2.local, site3.local dan load-balancer.local.
Kami akan mengatur nama host 10.0.1.116 sebagai site1.local di /etc/hosts dan /etc/hostname
root@site1:~# vi /etc/hosts
127.0.0.1 localhost
10.0.1.116 site1.local
root@site1:~# vi /etc/hostname
site1.local
Mulai ulang jaringan
root@site1:~# service networking restart
Instal apache dan aktifkan.
root@site1:~# apt-get install apache2
root@site1:~# service apache2 enable
root@site1:~# service apache2 start
Buat file indeks untuk site1.local
root@site1:~# vi /var/www/html/index.html
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>
Tambahkan aturan firewall untuk http
# ufw allow 80/tcp
# ufw reload
Sekarang periksa apakah Anda dapat mengakses site1
root@site1:~# curl -I site1.local
HTTP/1.1 200 OK
Date: Sun, 14 Aug 2016 14:30:29 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Sun, 14 Aug 2016 03:50:35 GMT
ETag: "ec-53a0004a26c6d"
Accept-Ranges: bytes
Content-Length: 236
Vary: Accept-Encoding
Content-Type: text/html
ATAU
root@site1:~# curl site1.local
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>
Ulangi langkah 2 untuk site2 ( 10.0.1.117 ) dan site3 ( 10.0.1.119 ).
Di server proxy tambahkan ketiga entri server web ( IPADDRESS HOSTNAME ) selain dari nama hostnya sendiri sebagai load-balancer.local
root@load-balancer:~# vi /etc/hosts
127.0.0.1 localhost
10.0.1.118 load-balancer.local
10.0.1.116 site1.local
10.0.1.117 site2.local
10.0.1.119 site3.local
Siapkan nama host server proxy
root@load-balancer:~# vi /etc/hostname
load-balancer.local
3. Instal HAProxy
Sebelum menginstalnya perbarui Ubuntu. Jalankan perintah berikut sebagai root atau gunakan sudo untuk memperbarui ubuntu.
root@load-balancer:~# apt-get update
Sekarang perbarui paket pada sistem.
root@load-balancer:~# apt-get upgrade
Instal dengan menjalankan perintah berikut di terminal.
root@load-balancer:~# apt-get install haproxy
Untuk mengaktifkan layanan sebagai daemon, edit /etc/defaults/haproxy dan tambahkan baris berikut.
DIAKTIFKAN=1
root@load-balancer:~# vi /etc/defaults/haproxy
ENABLED=1
# Add extra flags here
#EXTRAOPTS="-de -m 16"
Memulai layanan
root@load-balancer:~# service haproxy start
4. Konfigurasi HAProxy
File konfigurasi terletak di /etc/haproxy/haproxy.cfg dan memiliki dua bagian global dan proxy, bagian Global menetapkan parameter seluruh proses dan bagian proxy terdiri dari bagian default, mendengarkan, front-end, dan back-end.
Edit file konfigurasi dengan editor teks vi
root@load-balancer:~# vi /etc/haproxy/haproxy.cfg
File konfigurasi default akan terlihat seperti berikut ini. Pertahankan bagian global dan default apa adanya.
Bagian global
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH
+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
Bagian default
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
Menambahkan Pendengar:
Bagian "ujung depan" menjelaskan satu set soket pendengar yang menerima koneksi klien. Front-end mendefinisikan bagaimana permintaan harus ditangani dan dikirim ke server back-end:
frontend Local_Server
bind 10.0.1.118:80
mode http
default_backend My_Web_Servers
Menambahkan Server Web Back-end:
Bagian "back-end" menjelaskan sekumpulan server yang akan disambungkan oleh proxy untuk meneruskan koneksi masuk. Sesuai dengan konfigurasi di atas, penyeimbang beban sekarang mendengarkan pada port 80. Sekarang tentukan server web back-end tempat ia akan mengirim permintaan.
backend My_Web_Servers
mode http
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1rnHost:localhost
server site1.local 10.0.1.116:80
server site2.local 10.0.1.117:80
server site3.local 10.0.1.119:80
Anda dapat menambahkan parameter “check” di akhir tiga baris di atas untuk memeriksa parameter kesehatan server web Anda.
Anda dapat menggunakan algoritme penyeimbangan lainnya tergantung pada kebutuhan Anda.
Koneksi Terkecil
Memilih server dengan jumlah koneksi paling sedikit--disarankan untuk sesi yang lebih lama. Server di backend yang sama juga dirotasi secara round-robin.
Sumber
Ini memilih server mana yang akan digunakan berdasarkan hash dari IP sumber yaitu alamat IP pengguna Anda. Ini adalah salah satu metode untuk memastikan bahwa pengguna akan terhubung ke server yang sama.
Aktifkan Statistik (Opsional)
Sekarang jika mau, Anda dapat mengaktifkan statistik dengan menambahkan berikut di file konfigurasi.
listen stats
bind :9000
stats enable
stats hide-version
stats refresh 20s
stats show-node
stats uri /stats
5. Mulai ulang HAProxy
Karena Anda telah selesai dengan semua konfigurasi yang diperlukan untuk server proxy, verifikasi file konfigurasi sebelum memulai ulang layanan menggunakan perintah berikut.
root@load-balancer:~# haproxy -c -f /etc/haproxy/haproxy.cfg
Jika perintah di atas mengembalikan output sebagai “file konfigurasi valid”, maka mulai ulang layanan HAProxy
root@load-balancer:~# service haproxy restart
Sekarang periksa status server HAProxy.
root@load-balancer:~# service haproxy status
6. Uji HAProxy
Sebelum pengujian, pastikan Anda dapat melakukan ping ke server web ( site1.local, site2.local, site3.local) dari load-balancer.local
root@load-balancer:~# ping site1.local
PING site1.local (10.0.1.116) 56(84) bytes of data.
64 bytes from site1.local (10.0.1.116): icmp_seq=1 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=2 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=3 ttl=64 time=0.648 ms
root@load-balancer:~# ping site2.local
PING site2.local (10.0.1.117) 56(84) bytes of data.
64 bytes from site2.local (10.0.1.117): icmp_seq=1 ttl=64 time=3.02 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=2 ttl=64 time=0.687 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=3 ttl=64 time=0.778 ms
root@load-balancer:~# ping site3.local
PING site3.local (10.0.1.119) 56(84) bytes of data.
64 bytes from site3.local (10.0.1.119): icmp_seq=1 ttl=64 time=0.830 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=2 ttl=64 time=0.631 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=3 ttl=64 time=0.771 ms
Uji HAPROXY menggunakan CURL
Untuk menguji eksekusi skrip berikut dari terminal , Anda akan menemukan bahwa penyeimbang beban mengirim permintaan ke tiga server web dalam metode round robin.
root@load-balancer:~# while true; do curl http://10.0.1.118; sleep 1; done
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>
...............................
...............................
...............................
Uji di browser:
Arahkan browser Anda ke http://load-balancer.local atau http://Server-Public-IP Anda akan mendapatkan respons dari tiga server web secara round robin yang mengonfirmasi bahwa itu berfungsi dengan harapan kami. Dengan setiap penyegaran, server proxy mengirimkan permintaan ke server web back-end satu per satu.
Anda juga dapat mengunjungi url statistik yang dikonfigurasi di bagian terakhir file konfigurasi untuk mengonfirmasi bahwa port dibuka untuk lalu lintas. Cukup navigasikan ke IP Publik atau http://load-balancer.local pada port 9000.
Misalnya, navigasikan ke http://load-balancer.local:9000/stats
Anda juga dapat memantau status server dari terminal menggunakan HATOP. HATOP adalah alat pihak ketiga yang mengekstrak statistik dari file soket yang dibuat oleh penyeimbang beban. Instal HATOP dengan menjalankan perintah berikut dari terminal.
root@load-balancer:~# apt-get install hatop
Biasanya ketika menjalankan HATOP, Anda harus menggunakan parameter -s dengan perintah sudo hatop -s /var/run/haproxy.sock. Untuk menghindari keharusan memasukkan parameter -s saat memanggil HATOP, Anda dapat memasukkan baris berikut ke dalam file ~/.bashrc Anda:
ekspor unix-socket=/var/run/haproxy.sock
7. Pencatatan HAProxy
Edit /etc/rsyslog.d/haproxy.conf dan tambahkan baris berikut di dalamnya.
local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log
Mulai ulang rsyslog
root@load-balancer:~# service rsyslog restart
Sekarang periksa log menggunakan perintah berikut
root@load-balancer:~# tail -f /var/log/haproxy*.log
Tambahkan juga baris “debug” di bagian global file konfigurasi untuk pencatatan verbose.
Kesimpulan
Dengan HAProxy, Anda dapat meningkatkan kinerja dan ketersediaan aplikasi web Anda. Tutorial ini hanyalah pengantar untuk load balancing meskipun mampu melakukan lebih dari apa yang dijelaskan dalam tutorial ini. Anda dapat meningkatkan ketersediaan tinggi dengan menyiapkan IP mengambang di antara beberapa penyeimbang beban untuk melindungi dari kegagalan dalam satu penyeimbang beban.