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.
| Rol | Hostname | IP |
|---|---|---|
| HAProxy LB | haproxy.kadirkozan.com.tr | 192.168.1.11 |
| Frontend VIP / DNS | web.kadirkozan.com.tr | 192.168.1.12 |
| Backend 1 | SRV01.kadirkozan.com.tr | 192.168.1.21 |
| Backend 2 | SRV02.kadirkozan.com.tr | 192.168.1.22 |
| Backend 3 | SRV03.kadirkozan.com.tr | 192.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/