Cara Setting Load Balancing dengan HAProxy

HAProxy adalah perangkat lunak open source yang berfungsi sebagai load balancing dan proxy untuk TCP dan HTTP. Load balancing adalah metode untuk mendistribusikan atau membagikan trafik ke beberapa server.

Topologi Load Balancing

*0.Perangkat yang digunakan*

Perangkat yang digunakan di tutorial ini:

· OS Ubuntu 18.04 LTS · HAProxy · Nginx web server · PHP-FPM 7.2 · Node1: 10.130.127.167 · Node2: 10.130.128.35 · LoadBalancer: 128.199.187.215 · Domain: defnex.com

Node1 dan Node2 sudah terinstall Nginx web server dan PHP-FPM 7.2. Masing-masing node dibuatkan file index.php yang berisi tulisan node1 dan node2 sebagai halaman pengujian untuk mengetahui halaman yang ditampilkan berasal dari node yang mana.

*1.Install HAProxy*

Update dan install HAProxy.

[INPUT]

1 2 sudo apt update sudo apt install haproxy -y    

*2.Konfigurasi HAProxy*

Buka file konfigurasi HAProxy.

[INPUT]

1 sudo vim /etc/haproxy/haproxy.cfg

File konfigurasi default dari haproxy.cfg.

[INPUT]

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 global     log /dev/log    local0     log /dev/log    local1 notice     chroot /var/lib/haproxy     stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners     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

Tambahkan konfigurasi untuk HAProxy listener.

[INPUT]

1 2 3 4 frontend http_front    bind *:80    mode http    default_backend http_back    

Tambahkan konfigurasi untuk backend web server.

[INPUT]

1 2 3 4 5 6 7 8 9 backend http_back         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 node1 10.130.127.167:80     server node2 10.130.128.35:80

Konfigurasi tambahan untuk statistik HAProxy.

[INPUT]

1 2 3 4 5 6 7 8 listen stats     bind  *:1234     stats enable     stats hide-version     stats refresh 30s     stats show-node     stats auth username:password     stats uri /stats    

Hasil akhir konfigurasi HAProxy secara lengkap.

[INPUT]

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 global     log /dev/log    local0     log /dev/log    local1 notice     chroot /var/lib/haproxy     stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners     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   frontend http_front    bind *:80    mode http    default_backend http_back   backend http_back         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 node1 10.130.127.167:80     server node2 10.130.128.35:80   listen stats     bind *:1234     stats enable     stats hide-version     stats refresh 30s     stats show-node     stats auth username:password     stats uri /stats        

Verifikasi konfigurasi dan restart HAProxy.

[INPUT]

1 2 sudo haproxy -c -f /etc/haproxy/haproxy.cfg sudo systemctl restart haproxy

*3.Pengujian*

Browse domain, refresh halaman berulang kali sampai menampilkan file index.php dari Node1 dan Node2.

Halaman index.php dari Node1

Halaman index.php dari Node2

*4.Statistik*

Browse *http://domain.com:1234/stats* untuk membaca statistik HAProxy.

Statistik HAProxy

Selamat mencoba 🙂

Leave a Reply

Your email address will not be published.