Install Haproxy Load balancing di Ubuntu 16.04 | Blog Bai Rahmat

Install Haproxy Load balancing di Ubuntu 16.04


Install Haproxy Load balancing di Ubuntu 16.04

Mengenal HAProxy
HAProxy (High Availability Proxy) adalah perangkat lunak yang banyak digunakan untuk penyeimbang beban aplikasi berbasis TCP, HTTP dan protokol lainnya. Haproxy telah menjadi standar untuk load balancing open source, gratis dan dilengkapi dengan sebagian besar distribusi Linux.

Load Balancing
Kegiatan atau aktivitas untuk menyeimbangkan beban trafik, sehingga tidak tertumpu pada 1 server saja. Mudah dibayangkan kita mempunyai lebih dari satu server, 1 server ( web server ) hanya bisa menahan beban sekitar 100 koneksi atau request pengguna web server kita, sedangkan kita harus menanggung beban sebanyak 200 koneksi, dalam hal ini kita membutuhkan lebih dari 1 server, untuk membagi beban itu kita membutuhkan peran dari load balancing. sebelum kita lebih jauh mempelajari haproxy, kita sebaiknya mengerti apa saja terminologi dalam HAProxy tersebut.

Sebelum memulai install HAProxy, kita harus update system ubuntu server yang akan dijadikan HAProxy Load Balacing dengan perintah :
sudo apt-get update && sudo apt-get dist-upgrade
Install HAProxy
HAProxy sudah termasuk dalam sistem manajemen paket dari sebagian besar distribusi Linux, install HAProxy dengan perintah :
sudo apt-get install haproxy
Konfigurasi HAProxy
1. Lihat file konfigurasi default di /etc/haproxy/haproxy.cfg, yang dibuat secara otomatis saat instalasi. File ini mendefinisikan pengaturan standar dari HAProxy, tanpa load balancing :
global
    log /dev/log    local0
    log /dev/log    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/
    # An alternative list with additional directives can be obtained from
    #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3

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
Bagian global mendefinisikan parameter sistem seperti lokasi file dan pengguna dan grup di mana HAProxy dijalankan. Dalam banyak kasus, kita tidak perlu mengubah apa pun di bagian global ini. Pengguna haproxy dan grup haproxy keduanya sudah dibuat selama instalasi.

Bagian default mendefinisikan parameter logging tambahan dan pilihan yang terkait dengan timeout dan kesalahan. Secara default, pesan normal dan pesan kesalahan akan dicatat dalam log.

2. Jika kita ingin menonaktifkan pesan operasi sistem normal dari login, kita dapat menambahkan kalimat berikut setelah opsi "dontlog null":
option dontlog-normal
3. Kita juga dapat memilih untuk memiliki kesalahan log dalam file log yang terpisah :
option log-separate-errors
Konfigurasi Load Balancing
Ketika kita mengkonfigurasi load balancing dengan menggunakan HAProxy, ada dua jenis node yang perlu didefinisikan: frontend dan backend. Frontend adalah node dimana HAProxy mendengarkan koneksi. Node backend adalah yang memungkinkan HAProxy untuk meneruskan permintaan. Jenis node ketiga, node statistik, dapat digunakan untuk memantau load balancer dan dua node lainnya.

1. Buka file /etc/haproxy/haproxy.cfg dalam terminal ubuntu dan tambahkan konfigurasi untuk frontend
nano /etc/haproxy/haproxy.cfg
Tambahkan file dibawah ini :
frontend haproxynode
    bind *:80
    mode http
    default_backend myLB
Konfigurasi diatas menentukan sebuah frontend node bernama myLB, yang terikat ke semua network interfaces pada port 80. HAProxy akan mendengarkan koneksi HTTP ( mungkin untuk menggunakan mode TCP untuk keperluan lain ) dan itu akan menggunakan backend myLB.

2. Menambahkan konfigurasi backend :
backend myLB
    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.1\r\nHost:localhost
    server node-1 10.100.2.10:80 check
    server node-2 10.100.2.11:80 check
Konfigurasi tersebut mendefinisikan backend myLB dan menentukan beberapa pilihan konfigurasi :
  • Setting spesifikasi dan strategi load balancing, dalam hal ini load balancing menggunakan strategi roundrobin, dimana strategi ini menggunakan setiap server secara bergiliran tetapi memungkinkan beban diberikan kesetiap server dengan bobot yang lebih tinggi akan digunakan lebih sering. Strategi ini termasuk static-rr yang memungkinkan bobot akan disesuaikan dengan cepat dan akan meneruskan permintaan ke server dengan jumlah koneksi terendah.
  • Baris option forwardfor, memastikan permintaan yangakan diteruskan termasuk IP client yang sebenarnya.
  • Baris http-request pertama memungkinkan permintaan yang akan diteruskan untuk menyertakan port HTTP client. http-request kedua menambahkan proto-header yang berisi https jika ssl_fc, variable HAProxy mengembalikan nilai true, jika koneksi pertama kali dibuat melalui transport SSL/TLS.
  • Baris httpchk mendefinisikan HAProxy akan digunakan untuk menguji apakah web server masih valid untuk meneruskan permintaan, jika server tidak menanggapi permintaan yang ditentukan, itu tidak akan digunakan untuk load balancing sampai melewati tes koneksi.
  • Baris server menentukan node server dan alamat IP server. Server yang di definisikan adalah node-node yang masing-masing akan menggunakan pemeriksaan koneksi yang telah kita seting.
3. Menambahkan pilihan statistik node ( server )
listen stats
    bind :8080
    stats enable
    stats uri /
    stats hide-version
    stats auth admin:password
Statistik node akan listen di port 8080 dan untuk tampilan akan menyembunyikan versi HAProxy, serta untuk mengakses statistik tersebut kita memerlukan login dengan kata sandi "admin:password".

Untuk akses web statistik tersebut silahkan ketika IP server HAProxy dengan port 8080 contoh : 10.100.2.9:8080

4. Dibawah ini contoh file konfigurasi lengkap setelah kita modifikasi :
global
    log /dev/log    local0
    log /dev/log    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/
    # An alternative list with additional directives can be obtained from
   
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

frontend haproxynode
    bind *:80
    mode http
    default_backend myLB

backend myLB
    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.1\r\nHost:localhost
    server node-1 10.100.2.10:80 check
    server node-2 10.100.2.11:80 check

listen stats
    bind :8080
    stats enable
    stats uri /
    stats hide-version
    stats auth admin:password
 5. Menambahkan session cookie di Load balancer HAProxy
Untuk menjaga konsistensi session user agar tidak kehilangan session sehingga user tidak harus login kembali saat proses load balancer.

ganti konfigurasi backend sebelumnya
backend myLB
    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.1\r\nHost:localhost
    cookie SERVERID insert indirect nocache
    server node-1 10.80.1.30:80 check cookie s1
    server node-2 10.80.1.31:80 check cookie s2
Selamat Mencoba .... semoga berhasil 

Subscribe to receive free email updates:

0 Response to "Install Haproxy Load balancing di Ubuntu 16.04"

Post a Comment