HAProxy ile Load Balancer Konfigürasyonu

Selamlar, bu yazıda HAProxy kullanarak load balance yapısı oluşturulmasından bahsedeceğim.
İlk olarak kullandığınız LinuxOS’a göre HAProxy uygulamasını makineye install ediyoruz.
|
1 2 3 4 5 6 7 8 9 |
Ubuntu/Debian: sudo add-apt-repository ppa:vbernat/haproxy-1.8 sudo apt-get update sudo apt-get install haproxy CentOS: yum -y install haproxy |
Sonrasında /etc/haproxy/ dizininde haproxy.cfg dosyamız oluşuyor. Her ihtimale karşı konfigüre etmeden önce yedeğini alıyoruz.
|
1 2 |
cd /etc/haproxy/ cp haproxy.cfg haproxy.cfg.org |
Bir editor yardımıyla (nano, vim vs.) haproxy.cfg dosyamızı açarak load balance yapısını konfigüre etmeye başlıyoruz.
|
1 |
vi haproxy.cfg |
|
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 62 63 64 65 66 67 68 69 70 |
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/haproxy/cert crt-base /etc/haproxy/cert # 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 10000 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 listen stats bind :8080 mode http stats enable stats hide-version stats realm Haproxy\ Statistics stats uri /ha_status stats auth root:password frontend public bind *:80 bind *:443 ssl crt /etc/haproxy/cert/nurigundogan_net.pem acl site1 hdr(host) -i nurigundogan.net acl site1 hdr(host) -i www.nurigundogan.net redirect scheme https if !{ ssl_fc } rspadd Content-Security-Policy:\ upgrade-insecure-requests use_backend nurigundogan.net if site1 backend nurigundogan.net 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 } server WEB01 192.168.1.1:80 check fall 3 rise 2 server WEB02 192.168.1.2:80 check fall 3 rise 2 |
Yukarıdaki konfigürasyonu özetlemek gerekirse;
global tag’inin içinde, haproxy servisinin hangi user ve group yetkisinde çalışacağı, log path’leri, ssl sertifikası path’i gibi bilgiler yer alıyor.
default tag’inin içinde, client ve server tarafındaki timeout süreleri ve error file path’leri yer alıyor.
listen stats bölümü, aşağıdaki görseldeki gibi haproxy servisini izleyebileceğimiz bir monitoring ekranı oluşturmak için kullanılıyor. Giriş için, root ve password bilgilerini kullanmanız gerekli.

frontend bölümünde load balance konfigürasyonumuz başlıyor. Clientların ilk olarak geleceği yer burası. Bu kısma gireceğiniz configler üzerinden ilgili yerlere yönlendirmeler yapılıyor.
- bind ile hangi portların dinleneceğini belirtiyoruz. SSL sertifikamız bulunuyorsa onun da path’ini belirtmemiz gerekli.
- acl (Access Control List) ile birden fazla domainimiz ya da subdomainimiz varsa onları bu parametrenin içinde belirtiyoruz.
- redirect scheme https if !{ ssl_fc } komutu ile SSL yönlendirmesini yapıyoruz.
- use_backend komutu ile site1 adlı acl’nin, nurigundogan.net backend’ini kullanacağını belirtiyoruz.
backend bölümünde nurigundogan.net adlı sitemizin hangi makineler üzerinden yayın yapacağını belirtiyoruz.
- mode parametresiyle http üzerinden yayın yapacağını belirtiyoruz.
- balance parametresiyle 2 veya daha fazla makineye yükün hangi şekilde dağıtılacağını belirtiyoruz.
- server kısmında yayın yapılacak makinelerin IP ve port bilgilerini belirtiyoruz.
- IP ve port bilgisinden sonra gelen check parametresi ile node’ların sürekli olarak up/down olup olmadığının kontrolü yapılıyor.
- Örnek olarak WEB01’in konfigürasyonuna göre; gelen 3 isteğe üst üste cevap veremezse makine down oluyor. Sonrasında, üst üste gelen 2 isteğe cevap verebilirse makine up durumuna geçiyor.
Konfigürasyonların aktif olması için aşağıdaki komut ile haproxy servisini reload ediyoruz. Ve artık load balancer’ımız hazır hale geliyor.
Bir sonraki yazıda görüşmek üzere…
|
1 |
systemctl reload haproxy |