Günümüzde yüksek trafikli web servislerinde tek bir sunucuya bağlı kalmak performans problemlerine, kesintilere ve ölçeklenebilirlik sorunlarına yol açar. Bu noktada yük dengeleme (load balancing) ve yüksek erişilebilirlik (high availability) kritik hale gelir. Bu ihtiyaçlara yönelik en güçlü çözümlerden biri de HAProxy (High Availability Proxy)’dir.

Bu makalede Red Hat Enterprise Linux 9 (RHEL9) veya CentOS Stream 9 üzerinde HAProxy’nin kurulumunu adım adım ele alacağız.

Kurulum sonunda aşağıdaki hedefleri sağlamış olacağız;

  • SSL termination (HTTPS sertifikasını HAProxy üzerinde sonlandırma),
  • HTTP → HTTPS yönlendirme,
  • Backend sunuculara yük dağıtımı (load balancing),
  • Backend health check (sağlık kontrolü),
  • HAProxy Stats Monitoring sayfası ile izleme ve raporlama,
  • Firewall ayarlarının yapılması,
  • Log takibi ile doğrulama,

HAProxy Nedir? Ne İşe Yarar?

HAProxy TCP ve HTTP tabanlı uygulamalar için geliştirilmiş açık kaynaklı (open-source) bir yük dengeleyici (load balancer) ve reverse proxy çözümüdür. Özellikle kurumsal ortamlarda sıkça kullanılır çünkü;

  • Çok yüksek eş zamanlı bağlantıları yönetebilir,
  • Trafiği birden fazla sunucuya dağıtır,
  • Sunucu arızalarında otomatik olarak sağlam sunuculara yönlendirme yapar,
  • SSL yükünü backend sunucuların üzerinden alır (SSL termination),
  • Uygulama katmanında (Layer 7) akıllı yönlendirme yapabilir,

Bu sayede sisteminiz hem daha hızlı hem daha ölçeklenebilir hem de daha dayanıklı hale gelir.

HAProxy Load Balancing Algoritmaları

HAProxy’nin en güzel yanlarından biri farklı ihtiyaçlar için farklı yük dengeleme algoritmalarını desteklemesidir. Aşağıda yaygın algoritmalar ve hangi senaryolarda kullanıldıkları yer alıyor;

1) Round Robin

İstekleri sırayla backend sunuculara dağıtır.
Avantaj: Basit ve dengeli dağıtım sağlar.

2) Least Connections

Bağlantı sayısı en az olan sunucuya yönlendirir.
Avantaj: Yoğunluğu en iyi dengeleyen yöntemlerden biridir.

3) Source (IP Affinity)

İstemci IP’sine göre aynı kullanıcıyı hep aynı sunucuya yönlendirir (sticky session).
Avantaj: Oturum bağımlı uygulamalarda faydalıdır.

4) URI Hash

URI bazlı hash alır ve aynı URI’leri aynı backend’e gönderir.
Avantaj: Cache mekanizması olan servislerde etkilidir.

5) Least Response Time

En düşük cevap süresi olan sunucuya yönlendirir.
Avantaj: Performans odaklı uygulamalarda çok verimli olabilir.

6) Random

Her istekte rastgele backend seçer.

7) First

Uygun olan ilk backend sunucuyu seçer (aşırı yük yoksa).

8) HTTP Header Based

Cookie, user-agent gibi header’lara göre yönlendirme yapar.
Avantaj: Gelişmiş routing senaryolarında kullanılır.

HAProxy’nin Öne Çıkan Özellikleri

HAProxy’yi enterprise dünyada popüler yapan özellikler:

  • Load Balancing: Trafiği dağıtır, performansı artırır.
  • High Availability: Failover mantığıyla servis kesintisini azaltır.
  • Proxying: İstemci ile backend arasında aracı görevi görür.
  • SSL Termination: HTTPS şifreleme çözme yükünü backend’ten alır.
  • Health Checks: Sunucu sağlık durumunu izler, arızalıya trafik yollamaz.
  • ACL (Access Control Lists): Kural bazlı erişim kontrolü sağlar.

HAProxy OSI Modelinde Hangi Katmanda Çalışır?

HAProxy iki farklı katmanda etkin çalışabilir:

Layer 5 (Session Layer)

  • TCP seviyesinde çalışır
  • Trafiğin içeriğine bakmaz, bağlantıyı yönetir
  • Oturum sürekliliği (session persistence) gerektiren protokollerde işe yarar

Örnek kullanım: FTP, DB bağlantıları, TCP servisleri

Layer 7 (Application Layer)

  • HTTP/HTTPS içeriklerini analiz edebilir
  • URL path, header, cookie gibi alanlara göre routing yapabilir
  • SSL termination ve içerik bazlı yönlendirme burada devreye girer

Örnek kullanım: /api başka sunucuya, /web başka sunucuya yönlendirme.

Lab Mimarisi ve Gereksinimler

Bu makalede örnek bir yapı kullanacağız.

RolHostnameIP
HAProxy LBhaproxy.kadirkozan.com.tr192.168.1.11
Frontend VIP / DNSweb.kadirkozan.com.tr192.168.1.12
Backend 1SRV01.kadirkozan.com.tr192.168.1.21
Backend 2SRV02.kadirkozan.com.tr192.168.1.22
Backend 3SRV03.kadirkozan.com.tr192.168.1.23

Adım 1: Hostname Ayarlarını Yapılandırma (Tüm Nodelarda)

Her sunucuya bağlanıp hostname tanımlayalım:

HAProxy Sunucusu

sudo hostnamectl set-hostname haproxy.kadirkozan.com.tr

Web Server 1

sudo hostnamectl set-hostname SRV01.kadirkozan.com.tr

Web Server 2

sudo hostnamectl set-hostname SRV02.kadirkozan.com.tr

Web Server 3

sudo hostnamectl set-hostname SRV03.kadirkozan.com.tr

Front End

sudo hostnamectl set-hostname web.kadirkozan.com.tr

Not: DNS kullanmıyorsanız /etc/hosts içine IP-hostname eşleşmesi eklenmelidir.

HAProxy Kurulumu (RHEL 9 / CentOS 9)

HAProxy sunucusunda kurulum:

sudo dnf install haproxy -y

Servisi başlatıp otomatik başlatmaya ekleyelim:

sudo systemctl start haproxy
sudo systemctl enable haproxy

Durumu kontrol edelim:

sudo systemctl status haproxy

Adım 2: SSL Sertifikası Oluşturma ve Yapılandırma

Gerçek ortamda bir CA sertifikası tercih edilir. Ancak bu makalede self-signed SSL ile devam edeceğiz.

SSL klasörü oluşturalım

sudo mkdir -p /etc/haproxy/ssl

Sertifika üretimi

sudo openssl req -newkey rsa:2048 -nodes \
-keyout /etc/haproxy/ssl/web.kadirkozan.com.tr.key \
-x509 -out /etc/haproxy/ssl/web.kadirkozan.com.tr

Sertifika + key birleştirip PEM oluşturalım

HAProxy genellikle PEM formatı ile çalışır:

sudo cat /etc/haproxy/ssl/web.kadirkozan.com.tr.crt \
/etc/haproxy/ssl/web.kadirkozan.com.tr.key \
| sudo tee /etc/haproxy/ssl/web.kadirkozan.com.tr.pem

Kontrol:

sudo ls -l /etc/haproxy/ssl/