Skip to main content
Skip table of contents

HAProxy ile Ubuntu 16.04 Instance Üzerinde Yük Dengeleme

Bu yazımızda 3 tane instance kullanacağız. 1 instance yük dengeleme görevini üstlenecek. Diğer instance’lar ise web sunucusu görevinde olacaklar. Bunun için öncelikle Skyatlas panelinden 3 tane Ubuntu 16.04 instance oluşturuyoruz.

Instance 1 – Yük dengeleyici

Public IP adresi : x.x.x.x

Private IP adresi : 10.0.0.108

 

Instance 2 – Web sunucusu

Private IP adresi : 10.0.0.107

 

Instance 3 – Web sunucusu

Private IP adresi : 10.0.0.106

 

Öncelikle yük dengeleyici sunucumuza ssh ile bağlanıyoruz ve haproxy paketlerini kuruyoruz. Bunun için

CODE
haproxyinstance:~$ sudo apt-get install haproxy

komutunu kullanıyoruz. HAProxy kurulumu tamamlandıktan sonra web sunucusu olan instance'larımıza ssh ile bağlanıp ikisinede Apache2 paketlerini indirmemiz gerekiyor.

CODE
webinstance1:~$ sudo apt-get install apache2
webinstance2:~$ sudo apt-get install apache2

Web sunucularımızın kurulumları gerçekleştikten sonra tekrar yük dengeleyici instance'ımıza geçiyoruz ve şimdi HAProxy konfigürasyon dosyasına web sunucularımız arasındaki yük dağılımını sağlayacak ayarları yazıyoruz. HAProxy konfigürasyon dosyası :

CODE
/etc/haproxy/haproxy.cfg

Herhangi bir editör ile bu dosyayı açarak , vim editör kullanacağım, gerekli satırları ekleyeceğiz. Burada birkaç tane önemli anahtar kelime mevcut. haproxy.cfg dosyasının görünümü aşağıdaki gibidir.

CODE
global
 log /dev/log local0
 log /dev/log local1 notice
 chroot /var/lib/haproxy
 stats socket /run/haproxy/admin.sock mode 660 level admin
 stats timeout 30s
 user haproxy
 group haproxy
 daemon
# Default SSL material locations
 ca-base /etc/ssl/certs
 crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
 # For more information, see ciphers(1SSL). This list is from:
 # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
 ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
 ssl-default-bind-options no-sslv3
defaults
 log global
 mode http
 option httplog
 option dontlognull
 timeout connect 5000
 timeout client 50000
 timeout server 50000
 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

 

Burada hangi sunucular arasında yük dengeleme yapacağımızı belirtmemiz gerekiyor. Bunun için konfigürasyon dosyasının en altına şu satırları eklememiz gerekiyor :

CODE
listen firstbalance
 bind *:80
 balance roundrobin
 option forwardfor
 option httpchk
 server webinstance1 10.0.0.106:80 check
 server webinstance2 10.0.0.107:80 check

Dengelemeyi roundrobin algoritması ile yapacağımızı belirtmiş oluyoruz.Apache2 web sunucusu 80 portunda çalıştığı için 80 portunu dinliyoruz ve bu porta gelen istekleri dağıtıyoruz. En alt satırlarda ise dinlenecek olan sunucularımızın private IP adreslerini belirtiyoruz. Bu işlemlerden sonra haproxy servisini yeniden başlatmamız gerekiyor.

CODE
haproxyinstance:~$ sudo service haproxy restart

Hangi sunucuya yönlendirildiğimizi anlamak için web sunucularımızdaki Default Apache sayfasını değiştirmemiz gerekiyor. Bunun için web sunucularımıza ssh ile bağlanmamız gerekiyor. Bağlandıktan sonra /var/www/html/index.html dosyasını siliyoruz ve yeni bir index.html dosyası oluşturuyoruz.

CODE
webinstance1~$: cd /var/www/html
webinstance1~$: sudo rm index.html
webinstance1~$: vim index.html

Bu dosyanın içine basit bir html kodu yazıp kaydediyoruz ve apache2 servisini yeniden başlatıyoruz.

CODE
<html>
<header><title>Web Instance 1</title></header>
<body>Web instance 1</body>
</html>
webinstance1~$: sudo service apache2 restart

 

Aynı işlemi diğer  web sunucumuzda da gerçekleştiriyoruz.

CODE
webinstance2~$: cd /var/www/html
webinstance2~$: sudo rm index.html
webinstance2~$: vim index.html
<html>
<header><title>Web Instance 2</title></header>
<body>Web instance 2</body>
</html>
webinstance2~$: sudo service apache2 restart

Bu işlemlerden sonra web tarayıcısından yük dengeleyici instance'ımızın public IP adresini yazıp sayfaları yenilersek bizi diğer iki web sunucumuzdan birine yönlendirdiğini göreceğiz.Ya da terminal üzerinden curl komutu ile test edebiliriz.

CODE
$ curl YUK_DENGELEYİCİ_PUBLIC_IP
<html>
<header><title>This is web instance2</title></header>
<body>
Web Instance 2
</body>
</html>

$ curl YUK_DENGELEYİCİ_PUBLIC_IP
<html>
<header><title>This is web instance1</title></header>
<body>
Web Instance 1
</body>
</html>


Görüldüğü gibi yük dengeleyici isteklerimizi web sunucuları arasında dağıttı.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.