İçeriğe geç
HAProxy Yük Dengeleme: Kapsamlı Rehber

HAProxy Yük Dengeleme: Kapsamlı Rehber

11 dk okuma Ağ Yönetimi

Yük dengeleme (load balancing), modern web mimarilerinin temel taşlarından biridir. Artan trafik, kullanıcı beklentileri ve yüksek erişilebilirlik gereksinimleri, istemci trafiğinin birden fazla sunucu arasında etkin şekilde dağıtılmasını zorunlu kılmaktadır. HAProxy, bu alanda yüksek performanslı ve açık kaynaklı çözümlerden biridir.

HAProxy Nedir ve Neden Kullanılır?

HAProxy, TCP ve HTTP tabanlı uygulamalar için tasarlanmış, yüksek performanslı bir yük dengeleyici ve reverse proxy yazılımıdır. Özellikle yüksek trafikli web siteleri, API'ler, mikroservis mimarileri ve TCP tabanlı servislerde yaygın olarak kullanılır.

HAProxy'nin temel özellikleri arasında yük dengeleme, trafik yönlendirme, TLS sonlandırma, health check mekanizmaları, oturum kalıcılığı, erişim kontrolü, rate limiting ve gelişmiş trafik yönetimi bulunur.

HAProxy'nin temel kullanım amacı yük dengeleme ve proxy işlemleridir. Nginx ise web sunucusu, reverse proxy, statik içerik sunumu ve yük dengeleme gibi daha geniş kullanım alanlarına sahip bir yazılımdır. İki yazılımın performansını tek bir yüzde değeriyle karşılaştırmak doğru değildir; gerçek performans kullanılan protokol, bağlantı sayısı, TLS işlemleri, yapılandırma ve donanım gibi birçok faktöre bağlıdır.

HAProxy Sürümleri ve LTS Desteği

HAProxy farklı sürüm dalları üzerinden kararlı ve uzun süre desteklenen sürümler sunmaktadır. 2026 itibarıyla HAProxy 3.4 LTS sürümünün yanı sıra HAProxy 3.2 LTS sürümü de desteklenmektedir. HAProxy 3.2 LTS dalının desteği 2030 yılına kadar devam etmektedir.

Üretim ortamlarında mümkün olduğunca desteklenen bir LTS sürümünün kullanılması ve güvenlik ile hata düzeltmelerini içeren güncel bakım sürümlerinin takip edilmesi önerilir.

HAProxy Mimarisi ve Temel Kavramlar

HAProxy'nin etkin şekilde kullanılabilmesi için çalışma modlarını ve yapılandırma bileşenlerini anlamak önemlidir. HAProxy temel olarak Layer 4 (TCP) ve Layer 7 (HTTP) seviyelerinde trafik yönetimi gerçekleştirebilir.

Layer 4 modunda HAProxy, TCP bağlantılarını içerik seviyesinde incelemeden yönlendirir. Bu yapı HTTP dışındaki TCP tabanlı servisler için de kullanılabilir. Veritabanları, Redis, SMTP ve benzeri servisler bu kullanım alanlarına örnektir.

Layer 7 modunda ise HAProxy HTTP isteklerini inceleyebilir ve URL path, host header, HTTP method veya diğer istek özelliklerine göre farklı backend'lere yönlendirme yapabilir.

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

HAProxy yapılandırması genellikle dört temel bölüm üzerinden oluşturulur:

  • global: HAProxy prosesinin genel ayarlarını belirler.

  • defaults: Frontend ve backend gibi bölümlerde kullanılacak varsayılan değerleri tanımlar.

  • frontend: İstemci bağlantılarını kabul eder ve gelen trafiğin nasıl işleneceğini belirler.

  • backend: Trafiğin gönderileceği gerçek sunucuları ve yük dengeleme kurallarını tanımlar.

Kurulum Süreci

HAProxy, kullanılan Linux dağıtımının paket yöneticisi üzerinden kurulabilir. Ubuntu ve Debian tabanlı sistemlerde aşağıdaki komutlar kullanılabilir:

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

RHEL, Rocky Linux, AlmaLinux ve Fedora gibi RPM tabanlı sistemlerde dağıtımın sunduğu paket yöneticisi kullanılabilir:

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

Kurulumdan sonra HAProxy yapılandırması değiştirilmeden önce yapılandırmanın sözdizimi kontrol edilmelidir:

sudo haproxy -c -f /etc/haproxy/haproxy.cfg

Yapılandırma başarılı şekilde doğrulandıktan sonra servis yeniden yüklenebilir:

sudo systemctl reload haproxy

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

Aşağıdaki örnekte HAProxy, HTTP trafiğini üç backend sunucusuna dağıtır. web3 sunucusu ise backup olarak tanımlandığı için normal durumda aktif yük dengelemesine dahil edilmez ve diğer sunucular kullanılamaz olduğunda devreye girer.

global
    log /dev/log local0
    maxconn 4096

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ı uygulamanın çalışma karakteristiğine göre seçilmelidir:

  • roundrobin: Sunucular arasında istekleri sırayla dağıtır.

  • leastconn: Aktif bağlantı sayısı daha az olan sunucuyu tercih eder.

  • source: İstemcinin kaynak IP adresinden türetilen hash değerini kullanarak istemcileri belirli sunuculara yönlendirmeye yardımcı olur.

  • weighted algoritmalar: Daha güçlü sunuculara daha fazla trafik gönderilmesini sağlar.

Health Check Mekanizmaları

Health check mekanizması, yük dengelemenin güvenilirliği açısından kritik öneme sahiptir. HAProxy, backend sunucuların erişilebilirliğini düzenli olarak kontrol ederek başarısız olan sunucuları trafik dağıtımından çıkarabilir.

HTTP health check, belirli bir HTTP endpoint'ine istek göndererek uygulamanın beklenen şekilde yanıt verip vermediğini kontrol etmek için kullanılabilir:

backend app_servers
    mode http
    option httpchk GET /health
    http-check expect status 200

    server srv1 10.0.0.1:80 check
    server srv2 10.0.0.2:80 check

Uygulamanın yalnızca HTTP 200 döndürmesi yeterli olmayabilir. Örneğin health endpoint'i veritabanı veya kritik bir bağımlılığın durumunu da kontrol edebilir. Böylece yalnızca portun açık olması yerine uygulamanın gerçekten hizmet verebilir durumda olup olmadığı kontrol edilebilir.

TCP health check ise temel olarak TCP bağlantısının kurulup kurulamadığını kontrol eder. Bu yöntem, HTTP olmayan TCP servisleri için kullanılabilir. HAProxy ayrıca belirli servisler için protokole özel kontrol yöntemleri de sunabilir.

SSL Sonlandırma ve TLS Yönetimi

TLS sonlandırma (TLS termination), istemciden gelen HTTPS bağlantısının HAProxy üzerinde sonlandırılması ve HTTP isteğinin backend sunucuya iletilmesi anlamına gelir.

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

Üretim ortamlarında güncel TLS sürümleri kullanılmalı, eski ve güvensiz protokoller devre dışı bırakılmalı ve sertifikaların yenilenmesi düzenli olarak yönetilmelidir.

HTTP/2 desteği kullanılacaksa ALPN üzerinden HTTP/2 ve HTTP/1.1 birlikte sunulabilir:

frontend https_front
    bind :443 ssl crt /etc/haproxy/certs/alanadi.pem alpn h2,http/1.1
    default_backend app_servers

HAProxy üzerinde TLS sonlandırması yapılması, backend bağlantısının da mutlaka TLS olması gerektiği anlamına gelmez. Güvenlik gereksinimlerine göre HAProxy ile backend sunucuları arasında da TLS kullanılabilir.

İleri Düzey Yapılandırma Teknikleri

ACL ve İçerik Tabanlı Yönlendirme

Access Control List (ACL), HTTP isteklerini belirli kriterlere göre sınıflandırarak farklı backend'lere yönlendirmeyi sağlar.

frontend web_front
    bind :80

    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

ACL'ler yalnızca URL path ile sınırlı değildir. Host header, HTTP method, kaynak IP, cookie, header değerleri ve çok sayıda başka istek özelliği üzerinden de trafik yönlendirme kuralları oluşturulabilir.

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

Sticky session, belirli bir istemcinin veya oturumun birden fazla istek boyunca aynı backend sunucusuna yönlendirilmesini sağlar. Ancak mümkün olduğunda uygulamanın oturum durumunu merkezi bir veri deposunda tutması veya stateless tasarlanması daha ölçeklenebilir bir yaklaşımdır.

HAProxy'de cookie tabanlı oturum kalıcılığı örneği:

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 Trafik Kontrolü

HAProxy'nin stick table özelliği, istemci bazında istek oranlarını takip etmek ve belirli eşiklerin aşılması durumunda istekleri sınırlandırmak için kullanılabilir.

frontend website
    bind :80

    stick-table type ipv6 size 100k expire 1m store http_req_rate(1m)

    http-request track-sc0 src
    http-request deny deny_status 429 if { sc_http_req_rate(0) gt 1000 }

    default_backend servers

Bu örnekte istemci IP adresleri üzerinden son 1 dakikadaki HTTP istek oranı takip edilir. Belirlenen eşik aşıldığında HAProxy istemciye 429 Too Many Requests yanıtı döndürür.

Bu tür rate limiting mekanizmaları uygulama katmanındaki kötüye kullanımı azaltabilir; ancak tek başına büyük hacimli ve dağıtık DDoS saldırılarına karşı yeterli değildir. İnternet ölçeğindeki DDoS saldırıları için CDN, WAF veya upstream DDoS koruma hizmetleri gibi ek çözümler gerekebilir.

Stats Paneli ve İzleme

HAProxy'nin yerleşik stats arayüzü, frontend ve backend durumlarının, bağlantıların, hata sayaçlarının ve sunucu sağlık durumlarının izlenmesini sağlar.

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

    stats auth admin:guclu-bir-parola

Stats arayüzü internete doğrudan açık bırakılmamalıdır. Yönetim ağı veya güvenilir kaynak IP'leri ile sınırlandırılması ve güçlü kimlik doğrulama kullanılması önerilir.

Prometheus entegrasyonu sayesinde HAProxy metrikleri merkezi izleme sistemlerine aktarılabilir. Böylece bağlantı sayıları, hata oranları, backend durumları ve trafik metrikleri uzun vadeli olarak takip edilebilir.

Docker ve Kubernetes Entegrasyonu

HAProxy Docker ortamlarında resmi imaj kullanılarak çalıştırılabilir. Üretim ortamlarında belirli bir desteklenen sürümün pinlenmesi ve güncellemelerin kontrollü şekilde yapılması önerilir.

services:
  haproxy:
    image: haproxy:3.2
    ports:
      - "80:80"
      - "443:443"
      - "8404:8404"
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    ulimits:
      nofile:
        soft: 200000
        hard: 200000

Kubernetes ortamlarında HAProxy Ingress Controller, Kubernetes kaynaklarını HAProxy tabanlı trafik yönlendirme kurallarına dönüştürerek ingress trafiğinin yönetilmesini sağlar. Bu yapı sayesinde backend'ler ve yönlendirme kuralları Kubernetes ortamındaki değişikliklere göre dinamik olarak güncellenebilir.

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

  • HAProxy sunucusuna beklenen bağlantı ve trafik miktarına uygun CPU, RAM ve ağ kaynakları ayrılmalıdır.

  • maxconn değeri yalnızca yüksek bir sayı verilerek değil, işletim sistemi limitleri ve gerçek bağlantı kapasitesi dikkate alınarak belirlenmelidir.

  • nbthread değeri kullanılabilir CPU kaynakları ve iş yüküne göre belirlenmeli, üretim ortamında gerçek trafik altında test edilmelidir.

  • Health check endpoint'leri yalnızca HTTP sunucusunun çalıştığını değil, gerekiyorsa uygulamanın kritik bağımlılıklarının kullanılabilirliğini de doğrulamalıdır.

  • TLS sertifikalarının yenilenmesi otomatikleştirilmeli ve sertifika süreleri izlenmelidir.

  • Stats ve yönetim arayüzleri internete açık bırakılmamalı, güvenilir ağlar veya IP adresleri ile sınırlandırılmalıdır.

  • Rate limiting kullanılmalı ancak bunun tek başına kapsamlı bir DDoS koruması olmadığı unutulmamalıdır.

  • Yüksek erişilebilirlik gereken ortamlarda birden fazla HAProxy instance'ı kullanılmalı ve Keepalived gibi çözümlerle sanal IP (VIP) yönetimi yapılmalıdır.

  • HAProxy yapılandırması değiştirildikten sonra haproxy -c ile sözdizimi kontrol edilmeli ve servis yeniden yüklenmeden önce yapılandırmanın geçerli olduğu doğrulanmalıdır.

Sonuç

HAProxy, yüksek performanslı yük dengeleme ve reverse proxy ihtiyaçları için güçlü ve esnek bir çözümdür. Layer 4 ve Layer 7 seviyelerinde trafik yönetimi, gelişmiş health check mekanizmaları, TLS sonlandırma, ACL, sticky session ve rate limiting gibi özellikleri sayesinde hem klasik web uygulamalarında hem de mikroservis mimarilerinde kullanılabilir.

HAProxy'den maksimum verim almak için yalnızca yük dengeleme algoritmasını seçmek yeterli değildir. Health check yapılandırması, bağlantı limitleri, TLS ayarları, gözlemlenebilirlik, güvenlik kontrolleri ve yüksek erişilebilirlik mimarisi birlikte değerlendirilmelidir. Doğru tasarlanmış bir HAProxy altyapısı, uygulamaların performansını ve erişilebilirliğini artırırken trafik yönetimini de merkezi ve kontrol edilebilir hale getirir.