İçeriğe geç
NetDevOps
6 dk okuma Ağ Yönetimi

HAProxy Yük Dengeleme: Kapsamlı Rehber

Yük dengeleme (load balancing), modern web mimarilerinin temel taşlarından biridir. Artan trafik, artan kullanıcı beklentileri ve yüksek erişilebilirlik gereksinimleri, sunucular arasında trafiği etkin bir şekilde dağıtmayı zorunlu kılmaktadır. HAProxy, bu alanda açık kaynak dünyasının en güçlü ve en yaygın kullanılan çözümlerinden biridir.

HAProxy Nedir ve Neden Kullanılır?

HAProxy, yüksek erişilebilirlik sağlayan, TCP ve HTTP tabanlı uygulamalar için tasarlanmış açık kaynaklı bir yük dengeleyici ve reverse proxy sunucusudur. Özellikle yüksek trafikli web siteleri, API'ler ve mikroservis mimarileri için optimize edilmiştir. HAProxy'nin temel özellikleri arasında yük dengeleme, trafik yönlendirme, SSL sonlandırma, health check mekanizmaları ve gelişmiş güvenlik kontrolleri yer almaktadır.

HAProxy'nin Nginx'ten temel farkı, öncelikli olarak yük dengeleme amacıyla tasarlanmış olmasıdır. Nginx başlangıçta bir web sunucusu olarak ortaya çıkmış ve sonradan reverse proxy yetenekleri eklenmiştir. Performans karşılaştırmalarına bakıldığında, HAProxy karmaşık mikroservis yönlendirme senaryolarında yaklaşık yüzde on beş daha yüksek verim sağlamaktadır.

HAProxy Sürümleri ve LTS Desteği

HAProxy projesi, her yıl iki ana sürüm yayınlamaktadır. 2025 yılı itibarıyla HAProxy 3.2 LTS sürümü uzun vadeli destek sunan kararlı sürüm olarak öne çıkmaktadır ve 2030 yılına kadar desteklenecektir. HAProxy 3.0 sürümü de 2029 yılına kadar desteklenen bir diğer LTS sürümüdür.

HAProxy Mimarisi ve Temel Kavramlar

HAProxy'nin etkin kullanımı için mimarisini ve temel kavramlarını anlamak kritik öneme sahiptir. HAProxy iki ana modda çalışabilir: Layer 4 (TCP) ve Layer 7 (HTTP). Layer 4 modunda HAProxy, ham TCP akışlarını yük dengeler ve veritabanları, Redis, SMTP gibi HTTP olmayan servisler için idealdir. Layer 7 modunda ise HTTP protokolü üzerinde çalışarak içerik tabanlı yönlendirme, header bazlı routing ve URL path bazlı kararlar alabilir.

Frontend, Backend ve Yapılandırma Bölümleri

HAProxy yapılandırma dosyası dört ana bölümden oluşur. Global bölümü, HAProxy sürecinin kendisi için geçerli olan genel ayarları içerir. Defaults bölümü, diğer bölümler için varsayılan değerleri belirler. Frontend bölümü, gelen istemci bağlantılarını dinler ve istekleri backend'lere yönlendirir. Backend bölümü ise gerçek sunucu havuzlarını tanımlar.

Kurulum Süreci

HAProxy kurulumu farklı Linux dağıtımlarında birkaç basit adımda tamamlanabilir. Ubuntu ve Debian tabanlı sistemlerde apt paket yöneticisi kullanılarak kurulum yapılır:

sudo apt update
sudo apt install haproxy -y
sudo systemctl enable --now haproxy

CentOS, RHEL ve Fedora gibi Red Hat tabanlı dağıtımlarda ise yum veya dnf paket yöneticisi tercih edilir:

sudo yum install haproxy -y
sudo systemctl enable --now haproxy

Temel HTTP Yük Dengeleme Yapılandırması

global
    log /dev/log local0
    maxconn 4096
    daemon

defaults
    log     global
    mode    http
    option  httplog
    timeout connect 5s
    timeout client  30s
    timeout server  30s

frontend http_front
    bind *:80
    default_backend app_servers

backend app_servers
    balance roundrobin
    option httpchk GET /health
    server web1 10.10.10.11:8080 check
    server web2 10.10.10.12:8080 check
    server web3 10.10.10.13:8080 check backup

Yük dengeleme algoritması seçimi, uygulamanın karakteristiklerine göre değişir. Roundrobin algoritması istekleri sırayla her sunucuya eşit olarak dağıtır. Leastconn algoritması en az aktif bağlantısı olan sunucuya yönlendirme yapar. Source algoritması ise aynı kaynak IP adresinden gelen istekleri her zaman aynı backend sunucuya yönlendirir.

Health Check Mekanizmaları

Health check mekanizması, yük dengelemenin güvenilirliğini belirleyen en kritik bileşenlerden biridir. HAProxy, backend sunucuların durumunu düzenli aralıklarla kontrol ederek başarısız sunucuları otomatik olarak devre dışı bırakır.

HTTP health check, Layer 7 seviyesinde çalışır ve belirli bir endpoint'e HTTP isteği göndererek sunucunun sağlığını doğrular:

backend servers
    option httpchk
    http-check expect string OK
    server srv1 10.0.0.1:80 check
    server srv2 10.0.0.2:8080 check

TCP health check, Layer 4 seviyesinde çalışır ve TCP bağlantısı kurulup kurulamadığını kontrol eder. MySQL ve PostgreSQL gibi veritabanları için özelleştirilmiş check türleri mevcuttur.

SSL Sonlandırma ve TLS Yönetimi

SSL sonlandırma (TLS termination), HTTPS trafiğini HAProxy üzerinde çözmek anlamına gelir:

frontend https_front
    bind *:443 ssl crt /etc/haproxy/certs/alanadi.pem
    default_backend app_servers

Modern TLS yapılandırması için güvenli şifreleme algoritmaları tercih edilmeli ve eski protokoller (SSLv3, TLS 1.0) devre dışı bırakılmalıdır. HTTP/2 desteği ALPN uzantısı ile etkinleştirilebilir.

İleri Düzey Yapılandırma Teknikleri

ACL ve İçerik Tabanlı Yönlendirme

Access Control List (ACL) mekanizması, istekleri belirli kriterlere göre sınıflandırmayı sağlar:

acl is_api path_beg /api
acl is_admin path_beg /admin
use_backend api_servers if is_api
use_backend admin_servers if is_admin
default_backend web_servers

Oturum Kalıcılığı (Sticky Sessions)

Oturum kalıcılığı, aynı istemcinin isteklerinin her zaman aynı backend sunucuya yönlendirilmesini sağlar:

backend app_servers
    balance roundrobin
    cookie SRVID insert indirect nocache
    server srv1 10.0.0.1:8080 check cookie srv1
    server srv2 10.0.0.2:8080 check cookie srv2

Rate Limiting ve DDoS Koruması

HAProxy'nin stick table özelliği, rate limiting ve DDoS koruması için güçlü bir altyapı sunar:

frontend website
    bind :80
    stick-table type ipv6 size 100k expire 24h store http_req_cnt
    http-request track-sc0 src
    http-request deny deny_status 429 if { sc_http_req_cnt(0) gt 1000 }
    default_backend servers

Stats Paneli ve İzleme

HAProxy'nin yerleşik stats paneli, backend sunucuların durumunu gerçek zamanlı olarak izlemeyi sağlar:

listen stats
    bind :8404
    mode http
    stats enable
    stats uri /stats
    stats refresh 10s
    stats auth admin:parola123

Prometheus entegrasyonu sayesinde HAProxy metrikleri merkezi izleme sistemlerine aktarılabilir ve uzun vadeli analizler yapılabilir.

Docker ve Kubernetes Entegrasyonu

version: "3.9"
services:
  haproxy:
    image: haproxy:3.0
    ports:
      - "80:80"
      - "443:443"
      - "8404:8404"
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    ulimits:
      nofile: 200000

Kubernetes için HAProxy Ingress Controller, Ingress kaynaklarını HAProxy yapılandırmasına dönüştürür ve dinamik backend yönetimi sağlar.

En İyi Uygulamalar ve Üretim İpuçları

  • Yeterli kaynak ayrılmalı ve maxconn değeri beklenen trafiği karşılayacak şekilde ayarlanmalıdır.

  • Thread sayısı (nbthread) CPU çekirdek sayısına göre belirlenmelidir.

  • Sertifika yönetimi otomatikleştirilmeli ve Let's Encrypt gibi otomatik yenileme mekanizmaları kullanılmalıdır.

  • Yedeklilik için birden fazla HAProxy instance'ı kullanılmalı ve keepalived ile virtual IP yönetimi yapılmalıdır.

Sonuç

HAProxy, yük dengeleme ve reverse proxy alanında endüstri standardı haline gelmiş güçlü bir araçtır. Doğru yapılandırıldığında HAProxy, yüksek erişilebilirlik, performans optimizasyonu ve güvenlik kontrolleri sağlar. Layer 4 ve Layer 7 modlarının farkını anlamak, health check mekanizmalarını doğru yapılandırmak ve ileri düzey özellikleri etkin kullanmak, HAProxy'den maksimum verim almanın anahtarıdır.