HAProxy ile Ubuntu VPS Üzerinde HTTP Yük Dengeleme Nasıl Kurulur?
Yüksek trafikli web uygulamaları ve servisler için performans, güvenilirlik ve ölçeklenebilirlik hayati öneme sahiptir. Tek bir sunucu üzerinde çalışan bir uygulama, belirli bir trafik eşiğini aştığında yavaşlamaya, hatta tamamen erişilemez hale gelmeye başlayabilir. İşte bu noktada “yük dengeleme” devreye girer. Yük dengeleme, gelen ağ trafiğini birden fazla sunucu arasında dağıtarak tek bir sunucunun aşırı yüklenmesini önleyen, böylece uygulamanın veya servisin sürekli olarak yüksek performansla çalışmasını sağlayan bir yöntemdir. Bu kapsamlı teknik makalede, HAProxy kullanarak bir Ubuntu Sanal Özel Sunucu (VPS) üzerinde HTTP yük dengelemenin nasıl kurulacağını adım adım inceleyeceğiz.
Yük Dengelemenin Temelleri
Yük dengeleme, modern web mimarilerinin temel taşlarından biridir. Bir ağ geçidi gibi davranarak, istemcilerden gelen istekleri önceden tanımlanmış bir dizi kurala göre birden fazla arka uç (backend) sunucusuna yönlendirir. Bu işlem, hem performansı artırır hem de sistemin genel güvenilirliğini sağlar.
Yük Dengeleme Nedir?
Yük dengeleme, basitçe, bir uygulamanın veya servisin taleplerini birden fazla sunucuya eşit veya optimize edilmiş bir şekilde dağıtma işlemidir. Bu sayede her sunucuya düşen yük azalır, yanıt süreleri kısalır ve aynı anda daha fazla isteğin işlenmesi mümkün olur. Yük dengeleyici, bir sunucu arızalandığında trafiği otomatik olarak sağlıklı sunuculara yönlendirerek hizmet kesintisini en aza indirir.
Neden Yük Dengelemeye İhtiyaç Duyarız?
* Performans ve Hız: Gelen istekleri birden fazla sunucuya dağıtarak, her bir isteğin daha hızlı işlenmesini sağlar. Bu, web sitelerinin ve uygulamaların genel yanıt sürelerini önemli ölçüde iyileştirir.
* Yüksek Erişilebilirlik (High Availability): Yük dengeleyici, arka uç sunucularının sağlık durumlarını sürekli olarak kontrol eder. Bir sunucu yanıt vermediğinde veya arızalandığında, trafiği otomatik olarak diğer sağlıklı sunuculara yönlendirir. Bu, tek bir hata noktasının (Single Point of Failure) oluşmasını engeller ve hizmetin kesintisiz devam etmesini sağlar.
* Ölçeklenebilirlik (Scalability): Uygulamanızın trafik talepleri arttığında, mevcut sisteme kolayca yeni sunucular ekleyerek kapasiteyi artırabilirsiniz. Yük dengeleyici, bu yeni sunucuları otomatik olarak yapılandırmaya dahil eder ve trafiği onlara da yönlendirmeye başlar. Bu, dikey ölçeklendirme (daha güçlü bir sunucuya geçmek) yerine yatay ölçeklendirme (daha fazla sunucu eklemek) imkanı sunar.
* Esneklik: Yük dengeleme, sunucu bakımı veya güncellemeler sırasında hizmet kesintisi olmadan sunucuların devre dışı bırakılıp tekrar devreye alınmasına olanak tanır.
* Güvenlik: Yük dengeleyiciler, DDoS saldırılarına karşı bir ilk savunma hattı olarak hareket edebilir ve belirli güvenlik politikalarını uygulayabilir.
Yük Dengeleme Algoritmaları
Yük dengeleyiciler, gelen trafiği arka uç sunucularına dağıtmak için çeşitli algoritmalardan yararlanır:
* Round Robin: İstekleri sırayla her sunucuya birer birer gönderir. En basit ve en yaygın algoritmadır.
* Least Connection: O anda en az aktif bağlantıya sahip olan sunucuya istek gönderir. Daha yoğun iş yüküne sahip sunucuların aşırı yüklenmesini engellemeye yardımcı olur.
* Source IP Hash: İstemcinin IP adresini kullanarak bir karma (hash) değeri oluşturur ve bu değere göre sunucu seçer. Aynı istemcinin her zaman aynı sunucuya yönlendirilmesini sağlar (sticky sessions için kullanışlıdır).
* Least Time: Sunucuların yanıt sürelerini ve aktif bağlantılarını dikkate alarak en hızlı yanıt veren sunucuya istek gönderir.
* Weighted Round Robin/Least Connection: Sunuculara ağırlık (weight) değerleri atanır. Daha yüksek ağırlığa sahip sunuculara daha fazla istek gönderilir. Donanım kapasitesi farklı olan sunucular için kullanışlıdır.
HAProxy Nedir?
HAProxy (High Availability Proxy), TCP ve HTTP tabanlı uygulamalar için ücretsiz, açık kaynaklı ve yüksek performanslı bir yük dengeleyici ve proxy sunucusudur. Genellikle çok yüksek trafikli web sitelerinin mimarilerinde kullanılır ve milyonlarca eşzamanlı bağlantıyı işleyebilecek şekilde tasarlanmıştır.
HAProxy’nin Tanımı ve Özellikleri
HAProxy, özellikle HTTP ve TCP protokolleri için optimize edilmiş, hafif ve son derece yapılandırılabilir bir çözümdür. İşte temel özellikleri:
* Yüksek Performans: Düşük CPU ve bellek tüketimiyle yüksek throughput ve düşük gecikme süreleri sunar.
* Esnek Yapılandırma: Kapsamlı bir yapılandırma dili sayesinde çok çeşitli senaryolara uyarlanabilir. ACL’ler (Access Control Lists) ile karmaşık yönlendirme kuralları tanımlanabilir.
* Yüksek Erişilebilirlik: Arka uç sunucularının sağlık durumunu sürekli izler ve arızalı sunucuları otomatik olarak havuzdan çıkarır.
* SSL/TLS Sonlandırma: SSL/TLS şifrelemesini HAProxy üzerinde sonlandırarak arka uç sunucularının yükünü hafifletebilir.
* Sticky Sessions: Belirli bir istemcinin her zaman aynı arka uç sunucusuna yönlendirilmesini sağlayabilir, bu da oturum yönetimi gerektiren uygulamalar için önemlidir.
* İstatistik Paneli: Gerçek zamanlı trafik ve sunucu durumu hakkında bilgi sağlayan bir web arayüzü sunar.
HAProxy’nin Çalışma Prensibi
HAProxy’nin yapılandırması üç ana bölümden oluşur:
* Global: HAProxy işleminin genel ayarlarını içerir. Loglama, kullanıcı/grup ayarları, performans sınırları gibi global parametreler burada tanımlanır.
* Defaults: Frontend ve backend bölümlerinde ortak olarak kullanılacak varsayılan ayarları içerir. Örneğin, bağlantı zaman aşımları (timeouts) gibi.
* Frontend: İstemcilerin HAProxy’ye bağlandığı dinleme soketini (IP adresi ve port) tanımlar. Gelen isteklerin hangi arka uç havuzuna yönlendirileceğine dair kurallar (ACL’ler) burada belirlenir.
* Backend: Arka uç sunucu grubunu tanımlar. Bu gruptaki sunucuların IP adresleri ve portları, kullanılacak yük dengeleme algoritması ve sağlık kontrolü ayarları burada yapılandırılır.
* Listen: Hem frontend hem de backend işlevlerini tek bir bölümde birleştiren bir yapıdır. Genellikle istatistik paneli veya basit yük dengeleme senaryoları için kullanılır.
Ön Koşullar ve Sistem Mimarisi
Bu rehber için aşağıdaki ön koşullara ve bir sistem mimarisine ihtiyacımız olacak:
* Ubuntu VPS’ler: En az üç adet Ubuntu 20.04 (veya daha yeni) VPS’e ihtiyacımız olacak:
* Bir adet HAProxy sunucusu (yük dengeleyici olarak görev yapacak).
* İki adet web sunucusu (örneğin Apache2 veya Nginx kurulu).
* Temel Ağ Bilgisi: IP adresleri, portlar ve temel ağ kavramları hakkında bilgi sahibi olmak.
* SSH Erişimi: Tüm sunuculara SSH ile erişim yetkisi.
* Güvenlik Duvarı (UFW): Sunucular arasında doğru portların açık olduğundan emin olmak için UFW yapılandırması.
Basit Sistem Mimarisi:
İstemci (Tarayıcı)
|
| (HTTP/HTTPS isteği)
V
+---------------------+
| HAProxy Sunucusu | (Örn: 192.168.1.100)
| (Yük Dengeleyici) |
+----------+----------+
|
| (Yük Dengeleme)
|
+----------V----------+ +----------V----------+
| Web Sunucusu 1 | | Web Sunucusu 2 |
| (Örn: 192.168.1.101) | | (Örn: 192.168.1.102) |
| (Nginx/Apache) | | (Nginx/Apache) |
+---------------------+ +---------------------+
Bu rehberde örnek IP adresleri olarak 192.168.1.100 (HAProxy), 192.168.1.101 (Web1) ve 192.168.1.102 (Web2) kullanacağız. Kendi VPS’lerinizin IP adreslerini buna göre değiştirmeyi unutmayın.
Adım 1: Ubuntu VPS’lerin Hazırlanması
Öncelikle tüm sunucularımızı güncelleyelim ve web sunucularımızı hazırlayalım.
Tüm Sunucularda Sistem Güncellemesi
Her bir VPS’e SSH ile bağlanın ve aşağıdaki komutları çalıştırın:
sudo apt update
sudo apt upgrade -y
Web Sunucularına Nginx Kurulumu
web1 ve web2 sunucularına Nginx kuralım. Apache2 de kullanabilirsiniz, ancak Nginx daha hafif olduğu için bu örnekte tercih edilmiştir.
web1 ve web2 sunucularında:
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
Her iki sunucuda da Nginx’in çalıştığını doğrulamak için systemctl status nginx komutunu kullanabilirsiniz.
Her Web Sunucusunda Farklı Bir İçerik Oluşturma
Yük dengelemenin çalıştığını görsel olarak anlamak için her web sunucusunda farklı bir index.html dosyası oluşturalım.
web1 sunucusunda:
echo "" | sudo tee /var/www/html/index.nginx-debian.html
web2 sunucusunda:
echo "" | sudo tee /var/www/html/index.nginx-debian.html
Bu sayede HAProxy üzerinden eriştiğinizde hangi sunucudan yanıt aldığınızı görebileceksiniz.
Güvenlik Duvarı (UFW) Ayarları
Tüm sunucularda SSH (22) portunun ve HTTP (80) portunun açık olduğundan emin olalım. Eğer HTTPS (443) kullanacaksanız onu da açmanız gerekecek.
Tüm sunucularda (HAProxy, web1, web2):
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx HTTP' # veya sudo ufw allow 80/tcp
sudo ufw enable
sudo ufw status
web1 ve web2 sunucularında, web sunucularının IP adreslerine doğrudan tarayıcıdan erişerek Nginx’in çalıştığını ve özel sayfalarınızın göründüğünü test edebilirsiniz.
Adım 2: HAProxy Kurulumu
Şimdi HAProxy sunucumuza geçelim ve HAProxy’yi kuralım.
haproxy sunucusunda (192.168.1.100):
sudo apt update
sudo apt install haproxy -y
Kurulum tamamlandıktan sonra HAProxy servisinin durumunu kontrol edelim:
sudo systemctl status haproxy
Servis active (exited) veya active (running) şeklinde görünmelidir. exited olması normaldir çünkü henüz bir yapılandırma yapmadık.
Adım 3: HAProxy Yapılandırması
HAProxy’nin ana yapılandırma dosyası /etc/haproxy/haproxy.cfg konumundadır. Bu dosyayı düzenleyerek yük dengelemeyi ayarlayacağız.
Öncelikle mevcut yapılandırma dosyasının bir yedeğini alalım:
sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
Şimdi dosyayı bir metin düzenleyici ile açalım (örneğin nano):
sudo nano /etc/haproxy/haproxy.cfg
Dosyanın içeriğini temizleyip veya mevcut ayarları düzenleyerek aşağıdaki yapılandırmayı ekleyelim. Açıklamalar her bölümün ne işe yaradığını anlatacaktır.
# Global Ayarlar
HAProxy işleminin genel ayarlarını içerir.
global
log /dev/log local0
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
maxconn 20000 # Maksimum eşzamanlı bağlantı sayısı
# SSL/TLS için performans iyileştirmeleri (isteğe bağlı)
ssl-default-bind-ciphers ECDHE+AESGCM:DH+AESGCM:ECDHE+AES256:DH+AES256:ECDHE+AES128:DH+AES128:RSA+AESGCM:RSA+AES256:RSA+AES128:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11
tune.ssl.default-dh-param 2048
Varsayılan Ayarlar
Frontend ve backend bölümlerinde ortak olarak kullanılacak varsayılan ayarlar.
defaults
log global
mode http # HTTP trafiği için 'http', TCP için 'tcp'
option httplog
option dontlognull
timeout connect 5000ms # Backend sunucusuna bağlantı zaman aşımı
timeout client 50000ms # İstemci bağlantı zaman aşımı
timeout server 50000ms # Backend sunucusuna veri gönderme/alma zaman aşımı
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
Frontend Tanımı
İstemcilerin HAProxy'ye bağlandığı dinleme noktası.
frontend http_frontend
bind *:80 # HAProxy sunucusunun 80. portundan gelen tüm HTTP isteklerini dinle
mode http
default_backend web_servers # Gelen istekleri 'web_servers' backend grubuna yönlendir
Backend Tanımı
Arka uç web sunucularının tanımlandığı grup.
backend web_servers
mode http
balance roundrobin # Yük dengeleme algoritması: Round Robin
option httpchk GET /index.nginx-debian.html # Sağlık kontrolü için HTTP GET isteği
server web1 192.168.1.101:80 check # Web Sunucusu 1, IP:Port, sağlık kontrolü aktif
server web2 192.168.1.102:80 check # Web Sunucusu 2, IP:Port, sağlık kontrolü aktif
HAProxy İstatistik Paneli
HAProxy'nin durumunu ve arka uç sunucularının sağlığını izlemek için bir web arayüzü.
listen stats
bind *:8080 # İstatistik panelini 8080 portundan yayınla
mode http
stats enable # İstatistik panelini etkinleştir
stats uri /haproxy?stats # İstatistik paneline erişim URI'si
stats realm Haproxy\ Statistics # Kimlik doğrulama başlığı
stats auth admin:password123 # Kimlik doğrulama kullanıcı adı ve şifresi (gerçek projelerde güçlü bir şifre kullanın!)
stats refresh 10s # Sayfayı her 10 saniyede bir yenile
Yapılandırma Dosyası Açıklamaları:
* global: HAProxy’nin genel davranışını belirler. log ayarı, chroot dizini, user ve group gibi temel güvenlik ve çalışma ortamı ayarları buradadır. maxconn maksimum eşzamanlı bağlantı sayısını belirler. SSL ayarları, eğer SSL sonlandırma yapacaksanız önemlidir.
* defaults: frontend ve backend bölümlerinde varsayılan olarak uygulanacak ayarları içerir. mode http HTTP trafiği işleyeceğimizi belirtir. timeout değerleri, bağlantıların ne kadar süreyle açık kalacağını veya ne kadar süre sonra zaman aşımına uğrayacağını kontrol eder. errorfile direktifleri, HAProxy’nin belirli HTTP hata kodları için özel hata sayfaları sunmasını sağlar. Bu dosyaları /etc/haproxy/errors/ dizininde oluşturmanız gerekir, ancak bu rehberde varsayılanları kullanacağız.
frontend http_frontend: Bu bölüm, istemcilerin HAProxy’ye bağlandığı noktayı tanımlar. bind :80 HAProxy sunucusunun tüm IP adreslerinden gelen 80 numaralı porttaki HTTP isteklerini dinlemesini sağlar. default_backend web_servers ise bu frontend’e gelen tüm isteklerin web_servers adındaki backend grubuna yönlendirileceğini belirtir.
* backend web_servers: Bu bölüm, gerçek web sunucularımızı tanımlar.
* mode http: Yine HTTP trafiği işleyeceğimizi belirtir.
* balance roundrobin: Yük dengeleme algoritmasını Round Robin olarak ayarlar. Diğer seçenekler arasında leastconn (en az bağlantı), source (kaynak IP’ye göre) vb. bulunur.
* option httpchk GET /index.nginx-debian.html: HAProxy’nin arka uç sunucularının sağlıklı olup olmadığını kontrol etmek için /index.nginx-debian.html adresine bir HTTP GET isteği göndermesini sağlar. Eğer sunucu bu isteğe başarılı bir yanıt (2xx veya 3xx) verirse, sağlıklı kabul edilir.
* server web1 192.168.1.101:80 check: web1 adında bir sunucu tanımlar. IP adresi 192.168.1.101, portu 80‘dir. check anahtar kelimesi, bu sunucu üzerinde sağlık kontrolünün aktif olmasını sağlar. Aynı şekilde web2 sunucusu da tanımlanır.
* listen stats: Bu bölüm, HAProxy’nin dahili istatistik paneli için bir dinleyici tanımlar.
bind :8080: İstatistik panelinin HAProxy sunucusunun 8080 portundan erişilebilir olmasını sağlar.
* stats enable: İstatistik panelini etkinleştirir.
* stats uri /haproxy?stats: Panele erişmek için kullanılacak URI’yi belirtir.
* stats realm Haproxy\ Statistics: Tarayıcıda gösterilecek kimlik doğrulama başlığını belirler.
* stats auth admin:password123: İstatistik paneline erişim için bir kullanıcı adı (admin) ve şifre (password123) belirler. Gerçek bir üretim ortamında bu şifreyi kesinlikle değiştirin!
* stats refresh 10s: İstatistik sayfasının her 10 saniyede bir otomatik olarak yenilenmesini sağlar.
Yapılandırma dosyasını kaydettikten sonra (nano’da Ctrl+O, Enter, Ctrl+X), güvenlik duvarında 8080 portunu açmayı unutmayın:
haproxy sunucusunda:
sudo ufw allow 8080/tcp
sudo ufw reload
Adım 4: HAProxy Servisini Yeniden Başlatma ve Test Etme
Yapılandırma dosyasını kaydettikten sonra, HAProxy servisini yeniden başlatmadan önce sözdizimini kontrol etmek iyi bir uygulamadır.
haproxy sunucusunda:
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
Eğer herhangi bir hata yoksa, Configuration file is valid mesajını görmelisiniz. Şimdi servisi yeniden başlatalım:
sudo systemctl restart haproxy
Servisin çalıştığından emin olmak için tekrar durumunu kontrol edin:
sudo systemctl status haproxy
Şimdi test etme zamanı!
1. Yük Dengelemeyi Test Etme: Tarayıcınızı açın ve HAProxy sunucunuzun IP adresine gidin (örneğin, http://192.168.1.100). Her yenilediğinizde, sırayla “Merhaba, bu Web Sunucusu 1!” ve “Merhaba, bu Web Sunucusu 2!” mesajlarını görmelisiniz. Bu, Round Robin yük dengeleme algoritmasının çalıştığını gösterir.
2. HAProxy İstatistik Panelini Test Etme: Tarayıcınızı açın ve http://192.168.1.100:8080/haproxy?stats adresine gidin. Belirlediğiniz kullanıcı adı (admin) ve şifre (password123) ile giriş yapmanız istenecektir. Giriş yaptıktan sonra, arka uç sunucularınızın (web1, web2) durumunu, mevcut bağlantı sayısını ve diğer istatistikleri gösteren bir panel göreceksiniz. Her iki sunucunun da “UP” (yukarıda) durumda olduğunu kontrol edin. Eğer bir sunucuyu durdurursanız (örneğin sudo systemctl stop nginx komutuyla), istatistik panelinde o sunucunun “DOWN” olduğunu göreceksiniz ve HAProxy trafiği otomatik olarak diğer sunucuya yönlendirecektir.
Tebrikler! HAProxy ile temel HTTP yük dengeleme kurulumunu başarıyla tamamladınız.
Gelişmiş HAProxy Yapılandırmaları ve En İyi Uygulamalar
Temel kurulumu tamamladık, ancak HAProxy’nin gücü ve esnekliği çok daha fazlasını sunar. İşte daha gelişmiş senaryolar ve en iyi uygulamalar:
SSL/TLS Sonlandırma (SSL Offloading)
Günümüzde web sitelerinin büyük çoğunluğu HTTPS kullanır. SSL/TLS şifrelemesi, sunucular üzerinde ek bir yük oluşturur. HAProxy, bu şifreleme/şifre çözme işlemini kendi üzerinde yaparak arka uç web sunucularının yükünü hafifletebilir. Buna SSL Offloading denir.
Nasıl Yapılır:
1. SSL sertifikası (örneğin Let’s Encrypt veya kendi sertifikanız) edinmelisiniz. Sertifika ve özel anahtarınızı tek bir .pem dosyasına birleştirmeniz gerekir. Örneğin, fullchain.pem ve privkey.pem dosyalarınız varsa:
sudo cat /etc/letsencrypt/live/alanadiniz.com/fullchain.pem /etc/letsencrypt/live/alanadiniz.com/privkey.pem | sudo tee /etc/haproxy/certs/alanadiniz.com.pem
sudo chmod -R go-rwx /etc/haproxy/certs/
2. HAProxy yapılandırma dosyasını (/etc/haproxy/haproxy.cfg) düzenleyin:
frontend https_frontend
bind *:443 ssl crt /etc/haproxy/certs/alanadiniz.com.pem # HTTPS için 443 portunu dinle
mode http
reqadd X-Forwarded-Proto:\ https # Backend'e HTTPS kullanıldığını bildir
default_backend web_servers
# HTTP'den HTTPS'ye yönlendirme (isteğe bağlı ama önerilir)
frontend http_redirect
bind *:80
mode http
redirect scheme https code 301 if !{ ssl_fc }
Bu yapılandırmada, 443 portundan gelen HTTPS istekleri HAProxy tarafından şifresi çözülür ve web_servers backend’ine HTTP olarak yönlendirilir. X-Forwarded-Proto başlığı, backend sunucularına orijinal isteğin HTTPS olduğunu bildirir. HTTP’den HTTPS’ye otomatik yönlendirme için ayrı bir frontend http_redirect eklenmiştir. HAProxy sunucusunda 443 portunu UFW’den açmayı unutmayın.
Sticky Sessions (Kalıcı Oturumlar)
Bazı uygulamalar, bir kullanıcının tüm isteklerinin aynı arka uç sunucusuna gitmesini gerektirir (örneğin, oturum tabanlı uygulamalar). Buna “sticky sessions” veya “oturum kalıcılığı” denir.
Nasıl Yapılır:
backend web_servers bölümüne aşağıdaki satırlardan birini ekleyebilirsiniz:
* Cookie tabanlı (önerilen):
backend web_servers
mode http
balance roundrobin
cookie SERVERID insert indirect nocache # SERVERID adında bir çerez ekler
server web1 192.168.1.101:80 check cookie web1_id # Sunucuya özel çerez değeri
server web2 192.168.1.102:80 check cookie web2_id
Bu, HAProxy’nin istemciye bir çerez eklemesini ve bu çerezin değerine göre istemciyi her zaman aynı sunucuya yönlendirmesini sağlar.
* Source IP tabanlı (daha az esnek):
backend web_servers
mode http
balance source # İstemcinin IP adresine göre yönlendirme
# ... diğer sunucu tanımları
Bu yöntem, aynı IP adresinden gelen tüm istekleri aynı sunucuya yönlendirir. Ancak, NAT arkasındaki istemciler veya mobil ağlar gibi durumlarda tüm istemciler aynı IP’den gelebileceği için sorunlara yol açabilir.
Sağlık Kontrolleri (Health Checks)
HAProxy’nin en önemli özelliklerinden biri, arka uç sunucularının sağlık durumunu sürekli olarak izlemesidir. check anahtar kelimesi basit bir TCP kontrolü yapar. Daha gelişmiş kontroller için:
* HTTP Sağlık Kontrolü:
backend web_servers
option httpchk GET /healthz # /healthz URL'sine GET isteği gönder
# ... sunucu tanımları
Bu, sunucunuzun belirli bir URL’ye yanıt verip vermediğini kontrol eder. Sunucunuzun bu URL’ye 2xx veya 3xx durum koduyla yanıt vermesi gerekir.
* Bekleme Süresi ve Tekrar Deneme:
backend web_servers
server web1 192.168.1.101:80 check inter 2s fall 3 rise 2
# inter 2s: Her 2 saniyede bir kontrol et
# fall 3: 3 ardışık başarısız kontrolden sonra sunucuyu DOWN işaretle
# rise 2: 2 ardışık başarılı kontrolden sonra sunucuyu UP işaretle
Hata Sayfaları ve Yeniden Yönlendirmeler
HAProxy, arka uç sunucuları kullanılamadığında veya belirli hatalar oluştuğunda özel hata sayfaları sunabilir.
# defaults bölümünde:
errorfile 503 /etc/haproxy/errors/503.http
/etc/haproxy/errors/503.http dosyasını kendi özel hata sayfanızla oluşturun.
Loglama ve İzleme
HAProxy’nin loglarını etkinleştirmek, sorun giderme ve performans analizi için kritik öneme sahiptir.
Global bölümde:
global
log /dev/log local0 notice # syslog üzerinden loglama
Defaults bölümünde:
defaults
log global
option httplog # HTTP isteklerini logla
HAProxy, logları genellikle syslog üzerinden gönderir. Bu logları /var/log/syslog veya /var/log/haproxy.log (rsyslog yapılandırmasına bağlı olarak) adresinde bulabilirsiniz. Daha detaylı loglama için rsyslog yapılandırmasını özelleştirebilirsiniz.
Yüksek Erişilebilirlik (HA) için Keepalived
HAProxy sunucusu, tek başına bir hata noktası olabilir. Bu riski ortadan kaldırmak için iki HAProxy sunucusunu Keepalived ile aktif/pasif (veya aktif/aktif) modda çalıştırarak sanal bir IP adresi üzerinden yüksek erişilebilirlik sağlayabilirsiniz. Keepalived, birincil HAProxy sunucusu arızalandığında sanal IP’yi yedek HAProxy sunucusuna taşır. Bu, daha karmaşık bir kurulum gerektirir ancak üretim ortamları için şiddetle tavsiye edilir.
Güvenlik
HAProxy, güvenlik için de bazı özellikler sunar:
* Rate Limiting: Belirli bir kaynaktan gelen istek oranını sınırlayarak DDoS saldırılarını hafifletebilir.
frontend http_frontend
# ...
stick-table type ip size 1m expire 30s store http_req_rate(10s)
tcp-request connection track-sc1 src
acl too_many_requests sc1_http_req_rate gt 100 # 10 saniyede 100'den fazla istek
http-request deny if too_many_requests
* IP Tabanlı Kısıtlamalar: Belirli IP adreslerinden gelen erişimi engelleyebilir veya izin verebilirsiniz.
frontend http_frontend
# ...
acl bad_ip src 1.2.3.4
http-request deny if bad_ip
Sorun Giderme (Troubleshooting) İpuçları
HAProxy kurulumunda veya çalışmasında sorunlarla karşılaşırsanız, aşağıdaki adımlar size yardımcı olabilir:
* HAProxy Loglarını Kontrol Edin: En önemli ilk adımdır.
sudo journalctl -u haproxy
sudo tail -f /var/log/syslog # veya /var/log/haproxy.log
Loglar size yapılandırma hataları, bağlantı sorunları veya arka uç sunucu arızaları hakkında bilgi verecektir.
* Yapılandırma Dosyasını Kontrol Edin: Sözdizimi hataları yaygın bir sorundur.
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
Hata mesajlarını dikkatlice okuyun.
* Güvenlik Duvarı Ayarlarını Kontrol Edin: HAProxy sunucusunda 80 (HTTP), 443 (HTTPS) ve 8080 (Stats) portlarının açık olduğundan emin olun. Arka uç sunucularında 80 (veya uygulamanızın kullandığı port) portunun açık olduğundan emin olun.
sudo ufw status verbose
* Backend Sunucularının Erişilebilirliğini Kontrol Edin: HAProxy sunucusundan arka uç web sunucularına doğrudan erişebildiğinizden emin olun.
curl http://192.168.1.101/index.nginx-debian.html
telnet 192.168.1.101 80
Eğer curl veya telnet ile erişemiyorsanız, arka uç sunucusunun kendisinde veya ağ yapılandırmasında bir sorun vardır.
* HAProxy Servisinin Çalıştığından Emin Olun:
sudo systemctl status haproxy
Servis durmuşsa veya hata veriyorsa, logları kontrol edin.
* HAProxy İstatistik Panelini Kullanın: İstatistik paneli, arka uç sunucularının sağlık durumunu ve trafiği görsel olarak izlemek için harika bir araçtır. Bir sunucu “DOWN” görünüyorsa, o sunucunun loglarını ve servis durumunu kontrol edin.
Sonuç
Bu makalede, HAProxy kullanarak bir Ubuntu VPS üzerinde HTTP yük dengelemenin nasıl kurulacağını ayrıntılı bir şekilde ele aldık. Temel kurulumdan başlayarak, global, defaults, frontend ve backend bölümlerinin nasıl yapılandırılacağını, yük dengeleme algoritmalarını ve sağlık kontrollerini öğrendik. Ayrıca, HAProxy istatistik panelini etkinleştirerek sistemin durumunu izleme yeteneği kazandık.
Daha sonra, SSL/TLS sonlandırma, sticky sessions, gelişmiş sağlık kontrolleri, özel hata sayfaları, loglama ve güvenlik gibi gelişmiş HAProxy özelliklerine değindik. Son olarak, karşılaşılabilecek sorunları gidermek için pratik ipuçları sunduk.
HAProxy, yüksek performanslı ve esnek bir yük dengeleme çözümü sunarak web uygulamalarınızın ölçeklenebilirliğini, güvenilirliğini ve performansını önemli ölçüde artırır. Bu rehberdeki bilgileri kullanarak kendi altyapınız için sağlam bir yük dengeleme çözümü oluşturabilir ve web servislerinizi daha güçlü hale getirebilirsiniz. Unutmayın, üretim ortamlarında her zaman güçlü şifreler kullanın ve güvenlik en iyi uygulamalarına uyun.