HAProxy ile HTTP Load Balancing

Bu makalemizde açık kaynak kodlu ve ücretsiz olarak kullanabileceğiniz HAProxy (High Availability Proxy) ile nasıl Load Balancing yani yük dengeleme işlemi yapabileceğiniz anlatılacaktır.
Makelede örnek olarak HTTP isteklerini HAProxy’imizin akasında konumlanmış iki sanal makinaye nasıl yönleneceğini göstereceğiz.

Tanımlar

Biz kurulum için üç Bulut Sunucu kullanlandık;

Bulut Sunucu 1 - Load Balancer (HAProxy)

Hostname: haproxy
OS: Ubuntu 14.04
Ip adresi: 10.10.10.1

 

Bulut Sunucu 2 - Web01
Hostname: web01
OS: Ubuntu 14.04 ve Apache2 IP Adresi: 10.10.10.2

 

Bulut Sunucu 2 - Web02
Hostname: web02
OS: Ubuntu 14.04 ve Apache2 IP Adresi: 10.10.10.3

HAProxy’i Yükleme

HAProxy’i yüklemek için apt-get komutunu kullanıyoruz.
apt-get install haproxy 
HAProxy servisini başlatabilmemiz için aktif hale getirmemiz gerekiyor. Bunun için text editör programlarından biri ile aşağıdaki config dosyasını açıyoruz. Biz burada nano yu kullandık.
nano /etc/default/haproxy
Konfigürasyon dosyası içinde ki ENABLED seçeneğini 1 yapıyoruz.
ENABLED=1

HAProxy Konfigürasyonu

Kendi konfigürasyon dosyamızı oluşturmak ve orjinalin yedeğini alıyoruz.
mv /etc/haproxy/haproxy.cfg{,.original}
Yeni bir konfigürasyon dosyası oluşturuyoruz:
nano /etc/haproxy/haproxy.cfg
Kısım kısım konfigütasyona başlıyoruz:
global
    log 127.0.0.1 local0 notice
    maxconn 2000
    user haproxy
    group haproxy
Log bölümünde syslog mesajlarının gönderileceği bölümü belirtiyoruz. Maxxconn bölümü aynı anda bağlanacak kişi sayısını belirlememize yarıyor. Bu ayar varsayılan olarak 2000 ama bu sayıyı bulut sunucularınızın konfigürasyonuna göre güncelleyebilirsiniz.
defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    option redispatch
    timeout connect  5000
    timeout client  10000
    timeout server  10000
Bu bölümde varsayılan değerleri belirliyoruz. Timeout bölümünde birden fazla direktif verebiliriz. Connect opsiyonunda sanal makinemize başarılı bir bağlantı için maksimum bekleme süresini belirliyoruz. Client ve Server opsiyonlarında sunucu veya istemci veri iletişim zaman aşımlarını belirliyoruz. HAProxy nin önerilen konfigürasyonuna göre client ve server değerleri aynı olmalı. Retries seçeneği başarısız bağlantıların kaç kere tekrar deneneceğini belirlediğimiz seçenek. Option redispatch seçeneği ile eğer bir sanal makine ulaşılamaz olursa bu gelen isteğin yeniden başka bir sunucuya yönlendirilenmesini sağlıyor.
listen appname 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm Strictly\ Private
    stats auth A_Username:YourPassword
    stats auth Another_User:passwd
    balance roundrobin
    option httpclose
    option forwardfor
    server web01 10.10.10.2:80 check
    server web02 10.10.10.3:80 check
Bu konfigürasyon hem frontend hemde backend için. Bu konfigürasyon ile HAProxy mizi 80 numaralı portu dinlemek üzere ayarladık. Appname kısmı kendi belirleyebileceğiniz bir uygulama ismi olabilir. Stats direktifi bağlantı istatistiklerini korunan bir istatistik sayfasında tutmasını sağlar. Stats auth direktifi ile kullanıcı adı ve şifreyi belirleyebiliriz. Bu istatistikleri aşağıdaki linkten göre bilirsiniz. Tabi bu url bilgisinide stats uri direktif ile değiştirebiliriz.
http://10.10.10.1/haproxy?stats
Balance direktifi ile hangi load balance algoritmasını kullanacağımızı belirliyoruz. Kullanılabilecek opsiyonlar Round Robin (roundrobin), Static Round Robin (static-rr), Least Connections (leastconn), Source (source), URI (uri) ve URL parameter (url_param). Diğer algoritmalar ile ilgili daha detaylı bilgiyi bu linktenedinebilirsiniz. Server direktifi ile backend sunucuları belirliyoruz:
server <adı> [:portu] [param*]
Check paremetresi bulut sunucular üzerinde health check yapılmasını sağlar aksi durumda HAProxy sunuculara herzaman erişebilir gibi hareket eder. Konfigürasyon ayarlarını tammaldıktan sonra HAProxy servisimizi başlatabiliriz:
service haproxy start

Load Balancing Test ve Failover

Yönlendirmelerin çalışıp çalşmadığını anlamak için iki web sunucumuzun web root klasörüne aşağıdaki dosyayı oluşturuyoruz.Genelde bu klasör /var/www/ nun altındadır ama sizin sunucunuza göre farklılık gösterebilir.
nano /var/www/file.php
?php
header('Content-Type: text/plain');
echo "Server IP: ".$_SERVER['SERVER_ADDR'];
echo "\nClient IP: ".$_SERVER['REMOTE_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR'];
?
Şimdi birden çok web sunucumuza http://10.10.10.1 nolu ip adresinden erişmeye çalıştığımızda göreceğizki istekler her seferinde farklı bir sunucuya iletilecek. Failover durumu test etmek için. Web sunuculardan birinde apache servisini durdurmamız veya sunucuyu kapamamız yeterlidir.
service apache2 stop
  • haproxy, loadbalancer
  • 5 Bu dökümanı faydalı bulan kullanıcılar:
Bu cevap yeterince yardımcı oldu mu?

Related Articles

Ubuntu Linux, Apache, MySQL PHP (LAMP)

“LAMP” dinamik web siteleri barındıran Linux sunuculara yüklenen bir grup açık kaynak kodlu...

Ubuntu 14 İçin Temel Ayarlar

Yeni bir sunucuyu kurduğunuzda birkaç temel ayar yapmanız gerekir. Bunlar hem güvenliğinizi...

RVM ile RUBY ON RAILS Kurulumu

Ruby on Rails, günümüzde yazılımcılar arasında çok popüler olan Ruby dilinde yazılmış bir...

Ubuntu Sunucuya Drupal Yükleme

Drupal, internet üzerindeki bazı büyük blog ve web sitelerinin kullandığı popüler bir içerik...

Apache'de Virtual Host oluşturma | Ubuntu 14.04

Gereksinimler Bu makalede anlatılan kurulumlar Ubuntu 14.04 LTS 'e göre anlatılmıştır ancak...