Load Balancer Nedir Ve Kurulumu Nasıl Olur ?

Load balancing, iş yükünü birden fazla sunucuya dağıtarak web sitelerinin, veri tabanlarının ve diğer hizmetlerin performansını ve güvenilirliğini artırmak için kullanılan yüksek kullanılabilir altyapıların önemli bir parçasıdır.

Yük dengeleyiciler yükü dağıttıkları sistemlerin sağlıklı olup olmadığını belirli aralıklarla kontrol ederek çalışmayan sunuculara trafiği yönlendirmezler. Bu sayede, yük dengeleyiciler sistemlerimizin ölçeklenmesini sağladıkları gibi yüksek erişilebilirliğini sağlamak için de kullanılırlar. Problemli sunucuya yeni istek gönderilmez ve kullanıcıların problemden etkilenmemesi sağlanır.

Kelime anlamından da anlaşıldığı gibi yük paylaşımı anlamına gelir. Load Balance ile ilgili en temel kanı 2 adet farklı internet bağlatısını aynı anda kullanarak daha hızlı download yapılabilmesidir. Bu tamamen yanlıştır. Bunun olbilmesi için internetin tamamının BGP protokülünü desteklemesi gerekmektedir.

Load Balance şöyle çalışır; Örneğin iki adet ADSL 4 MB bağlantınız var. Bu 4+4 = 8 MB download yapabileceğiniz anlamına gelmez. Bu içeriden internete çıkan kullanıcıların internet yükünü iki bağlantı arasında eşit olarak yada politika tabanlı paylaştırarak internet kullanımlarında doğabilecek performans kayıplarını ortadan kaldırmanız anlamına gelir. Politika tabanlı da şunu yapmanız mümkündür. Şu IP grubu SMTP isteklerini WAN1 den, Şu IP grubu HTTP isteklerini WAN2′ den gitsin diyebilirsiniz. Ya da bütün HTTP istekleri WAN1′ den bütün SMTP istekleri WAN2′ den gitsin ya da gelsin deme şansınız vardır.

Bu durumlarda internet bağlantılarınızdan biri giderse sistem otomatik olarak bütün isteklerinizi diğer internet hattına taşır böylece 1-2 saniyelik kısa kesilmeden sonra internet bağlantınız devam eder.

Online Bankacılık ve SSL bağlantı gerektiren işlemler de bağlı olduğunuz internet koptuğunda diğer hattan internetiniz devam etse bile güvenlik gereği SSL bağlantınız kesilir eğer online bankacılık işlemi yapıyorsanız işleminiz yarım kalacak ve tekrardan kullanıcı adı şifreniz ile girmeniz gerekecektir.

Yük dengeleme iki şekilde uygulanabilir:

  • Hedefe göre (per- destination) : Yönlendirici paketleri hedef adreslerine göre dağıtır. Aynı ağa 2 yol olması durumunda o ağdaki hedef1 için gelen bütün paketler ilk yoldan, hedef2 için gelen bütün paketler de diğer yoldan gönderilir ve böyle devam eder. Aynı ağdaki farklı kullanıcılar için farklı rotalar kullanılmış olur. Hedef adreslerinin fazla olması bağlantıların eşit kullanılmasını sağlar. Her adres için rota önbellek girdisi (route-cache entry) hazırlanır. Bu nedenle hedefe göre yük dengelemede hafıza ve işlem gereksinimi çok fazla olur; binlerce kullanıcıya trafik taşıyan yönlendiriciler için uygun değildir.
  • Pakete göre (per-packet) : Pakete göre yük dengelemede yönlendiriciye hedef1 için gelen ilk paket ilk yoldan, ikinci paket de ikinci yoldan vb. şekilde gönderilir. Her paketin iletim sürecinde çıkış arayüzüne bakılır ve en az kullanılmış bağlantı yönlendirme tablosundan seçilir. Bu linklerin eşit kullanımını sağlar fakat işlemci üzerinde yoğun görev ve iletim performansında düşmeye yol açar. Ayrıca paketlerin hedefe, farklı gecikme süreleri nedeniyle sırası bozulmuş olarak varmasına neden olabilir. Bu tür yük dengeleme yüksek hızlı olması gereken arayüzler için uygun değildir.

Hedefe ve pakete göre yük dengeleme ip paketleri için kullanılan anahtarlama planlarıdır. Hedefe göre yük dengeleme kullanılacak arayüzde hızlı anahtarlama uygulanması gereklidir.

Load Balancing Algoritmaları

Kullanılan yük dengeleme algoritmaları, trafiğin hangi backend sunucusuna iletileceğini belirleyen algoritmalardır. En sık kullanılan algoritmaları şu şekilde sıralayabiliriz:

Round Robin: Round robin, sunucuların sıralı olarak seçildiği ve trafiğin bu sıralama ile paylaştırıldığı algoritmalardır. Bu algoritmada load balancer, ilk istek için listesindeki ilk sunucuyu seçer ve sonra sırayla listenin altına doğru devam eder. Listenin sonuna gelindiğinde ise tekrar üstten başlayarak sırayla aşağıya doğru seçim devam eder.

Least Connection: Least connection algoritmasında yük dengeleyici en az bağlantıya sahip sunucuyu seçer. Bu algoritma trafiğin daha uzun oturumlarla sonuçlandığı durumlarda önerilir.

Source (IP Hash): Source algoritmasında yük dengeleyici istemcinin IP adresini, hangi sunucunun isteği alacağını belirlemek için kullanır. Bu yöntem ile belirli bir kullanıcının sürekli olarak aynı sunucuya bağlanması sağlanır.

 

Neden Load Balancing Kullanılmalı?

  • Load balancing ile erişilebilirlik ve sunucu sürekliliği en üst seviyeye çıkarılabilir. Bu sayede sunucu sistemi kullanıcılar için her zaman hazır ve çalışabilir durumda olur.
  • Dönemsel olarak yaşanacak trafik artışlarında dahi gecikmeler ve erişim kesintileri yaşanmayacağı için kullanıcı deneyimi de gelişmeler gösterir.
  • Kullanıcılar en uygun uygulama / veri tabanı kaynaklarına yönlendirileceği ve uygulama / veri tabanı optimizasyonu sağlanacağı için “single point of failure” riski ortadan kalkar.

 

Tarafımca yapmış olduğum Load Balancer Uygulaması kodları tarafınıza paylaşarak nasıl olduğu konusunda umarım kafanızda birşeyler şekillenmiştir.

 

Centos 7 HaProxy Server IP: 192.168.1.19
Centos 7 Nginx 1 Server IP: 192.168.1.20
Centos 7 Nginx 2 Server IP: 192.168.1.21

CENTOS 7 + NGINX YÜK DENGELEME, HAPROXY KURULUMU VE AYARLARI
————————————————————

1. CENTOS 7 NGINX KURULUMU VE AYARLARI:

NGINX WEBSERVER 1 (192.168.1.20):
# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum install nginx -y
# systemctl start nginx && systemctl enable nginx
# echo ” Web server 1 (192.168.1.20)” > /usr/share/nginx/html/index.html
# firewall-cmd –permanent –add-port=80/tcp
# firewall-cmd –reload

NGINX WEBSERVER 2 (192.168.1.21):

# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum install nginx -y
# systemctl start nginx && systemctl enable nginx
# echo ” Web Server 2 (192.168.1.21)” > /usr/share/nginx/html/index.html
# firewall-cmd –permanent –add-port=80/tcp
# firewall-cmd –reload

2. HAPROXY KURULUMU VE AYARLARI (192.168.1.19):

# yum install haproxy -y
# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy_yedek.cfg

# vi /etc/haproxy/haproxy.cfg
#———————————————————————
# Global settings
#———————————————————————
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#———————————————————————
# common defaults that all the ‘listen’ and ‘backend’ sections will
# use if not designated in their block
#———————————————————————
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#———————————————————————
#HAProxy Monitoring Config
#———————————————————————
listen haproxy3-monitoring *:8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats
stats realm Haproxy\ Statistics
stats auth admin:123456                             #KULLANICIADI VE PAROLA
stats admin if TRUE
default_backend app-main
#———————————————————————
# FrontEnd Configuration
#———————————————————————
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#———————————————————————
# BackEnd roundrobin as balance algorithm
#———————————————————————
backend app-main
balance roundrobin
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost
server Nginx1 192.168.0.220:80 check
server Nginx2 192.168.0.221:80 check
#———————————————————————

# vi /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514

# vi /etc/rsyslog.d/haproxy.conf
local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log

# systemctl restart rsyslog
# systemctl enable haproxy && systemctl start haproxy
# firewall-cmd –permanent –add-port=80/tcp
# firewall-cmd –permanent –add-port=8080/tcp
# firewall-cmd –reload

YÜK DENGELEME TESTİ
KOMUT : # curl 192.168.1.19
WEB TEST : http://192.168.1.19

HAPROXY RAPOR ISTATISTIKLERI LOGIN:

http://192.168.1.19:8080/stats
user: admin
pass: 123456

 

Bir sonraki makalede sizlerle yeniden görüşmek dileğiyle .İyi Çalışmalar Herkese 🙂

You may also like...

2 Responses

  1. Ali dedi ki:

    Kubernetesde 5 dk da yapılacak şeyler.

    • System Engineer And Coder-Man dedi ki:

      Doğrudur Kubernet ile uğraşmadım.Benimkisi yöntemlerden bir tanesi sadece.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir