DevOps Siber Güvenlik

Load Balancing (Yük Dengeleme) ve HAproxy

By on 7 Ağustos 2017

Merhaba , bu yazımda sizlere Load Balancing kavramını ve HAproxy yazılımını açıklamaya ve tanıtmaya çalışacağım. Öncelikle Load Balancing’e giriş yapalım. Bu kavram uzun yıllardır var olmasına rağmen son yıllarda siber güvenlik sektöründeki hareketlenme dolayısıyla daha çok duyulur oldu. Ben size senaryoyu şöyle açıklamaya çalışacağım.

Yazıdaki bazı kavramların anlaşılması için temel networking bilgisine sahip olmanız gerekmektedir.

Bir postacımız var diyelim , ve bu postacıyı sürekli postahane ile apartmanlar arasında koşturup duruyorsunuz. Ancak postacımız bir yerden sonra işleri kaldıramıyor , çalışmayı durduruyor ve isyan ediyor . Sonuçta kendisi insan ve bazı saatlerdeki artan iş yükü kendisini canından bezdirmiş durumda. İşte burada postahane müdürü işe birkaç postacı daha alıyor ve iş yükünü postacılar arasında belli kriterlere göre dağıtmaya başlıyor. Artık postacılar rahat rahat kendilerine verilen görevlerine yerine getirip mutlu ve sağlıklı bir yaşam sürüyorlar. Evet burada yaşanılan aslında basit bir load balancing çözümü.

Aşağıdaki gif’de bir DDOS atağı simüle edilmektedir. Load Balancing DDOS ataklarının etkilerini olabildiğince azaltmaktadır.

Load Balancing gelen ağ trafiğini arkadaki sunucu grubu veya sunucu havuzu olarakda bilinen bir grup backend (arkauç) sunucusuna verimli şekilde aktarmaktır.  Yüksek trafikli web siteleri, yüz binlerce istemciye eş zamanlı olarak gelen isteklere  doğru metin, resim, video veya uygulama verilerini hızlı ve güvenilir bir şekilde sunmalıdır. Bu istekleri karşılamak için maliyetine uygun şekilde daha fazla sunucu eklemesi gerekir.

Birçok load balancing algoritması mevcuttur. En çok bilinen 3 tanesini şöyle açıklamaya çalışalım.

  • Round Robin – İstekler sunucu grupları arasında sırayla dağıtılır .
  • Least Connections – Gelen yeni istek en az bağlantıya sahip olan sunucu tarafından karşılanır.
  • IP Hash – Aynı ip’ye sahip olan istemciye sürekli aynı sunucu yanıt verir.

Evet Load balancing kavramına yeterince ısındıysak sıra geldi HAproxy’e. Yüksek kullanılabilirlik imkanı sunan HAProxy, Linux, Solaris ve FreeBSD üzerinde çalıştırılabilen popüler bir açık kaynaklı TCP / HTTP Yük Dengeleyici ve proxy yazılımıdır.  En yaygın kullanım amacı iş gücünü birden çok sunucuya (webserver , database) dağıtarak bir sunucu ortamının performansını ve güvenilirliğini artırmaktır. Haproxy yüklemek için işletim sisteminizin konsoluna sudo apt-get install haproxy yazmanız yeterli. Şimdi Access Conrol List (ACL) , backend ve frontend gibi çok önemli kavramlara giriş yapacağız.

Bu yazı temel haproxy kurulumu ve kullanımından daha çok kavramlara giriş amacıyla hazırlanmıştır. Kurulum ve kullanım aşamalarını gelecek yazılarımda görebilirsiniz.

Access Conrol List (ACL) : Yük dengeleme ile ilişkili olarak, ACL’ler, bir koşul test etmek ve test sonucuna dayalı olarak bir eylem gerçekleştirmek (örn. Bir sunucu seçmek veya bir isteği bloke etmek) için kullanılır. Daha basit şekilde açıklamak gerekirse , sunucudaki herhangi bir davranışa göre bir senaryo hazırlamak istiyorsam öncelikle bu davranışı yazılıma tanıtmam gerekirki bu davranış gerçekleştiğinde yazılım senaryoyu gerçekleştirsin. Bir örnek gösterelim :

acl set-cookie-bulundu res.hdr(Set-Cookie) -m found

Burada şunu yapmak istedim. Eğer response (yanıt) headerlarında Set-Cookie bulunduysa set-cookie-bulundu adlı bir acl oluştur. Biliyorum ilk bakışta o kadar da kolay gözükmüyor ama sonraki haproxy yazılarımda dahada detaya ineceğim. Ama ben seni beklemem diyorsanız şu linkten daha detaylı bilgiler öğrenebilirsiniz.

Backend : Bir backend (arkauç’da diyebiliriz), iletilen istekleri alan bir dizi sunucudur.  HAProxy yapılandırmasının backend sekmesinde tanımlanır. Backend sekmesinde şunlar tanımlanmalıdır:

  • Kullanılacak load-balancing algoritması
  • Backend’deki serverların adresleri ve kullanılacak portları (varsayılan 80 portudur)

Her ikisindede Roundrobin algoritması kullanılacak olan ve her ikisindede  2 sunucu bulunan 2 adet backend tanımlamak istersek :

backend web-backend
   balance roundrobin
   server webserver1 web1.yourdomain.com:80 check
   server webserver2 web2.yourdomain.com:80 check

backend blog-backend
   balance roundrobin
   mode http
   server blog1 blog1.yourdomain.com:80 check
   server blog2 blog2.yourdomain.com:80 check

Mantık gayet basit. mode http yi neden kullandığımızı soracak olursanız 7. katman (OSI) türünde bir load balancing yapacak olduğumuzu belirtmiş olduk. Server adreslerinden sonra eklemiş olduğumuz check kelimeleri ise sunucularımızın sağlık kontrollerini gerçekleştirmektedir. Yani sunucumuz düzgün çalışıyorsa yönlendirme yapılmasına izin verir. Eğerki sunucu düzgün çalışmıyorsa pass geçilir ve diğer sunucular kullanılır.

Frontend : Bir frontend (ön uç) , isteklerin arka uçlara nasıl iletileceğini tanımlar. Frontend’ler, HAProxy yapılandırmasının ön uç bölümünde tanımlanır. Tanımları aşağıdaki bileşenlerden oluşur:

  • Ip adresleri ve portları (e.g. 10.1.1.7:80, *:443, etc.)
  • ACLs
  • ACL koşullarına bağlı olarak hangi arka uçların kullanılacağını tanımlayan use_backend kuralları ve / veya her iki durumda da işleyen bir default_backend kuralı

Bir frontend config örneğiyle devam edelim :

frontend http
  bind *:80
  mode http

  acl url_blog path_beg /blog
  use_backend blog-backend if url_blog

  default_backend web-backend

Yaptığım şey şu , kullanıcı /blog path’ine ulaşmak isterse (www.burakcayir.net/blog) url_blog adıyla oluşturduğum acl’ye düşecek ve bu acl’ye göre hazırlamış olduğum senaryo gerçekleşecek (blog-backend’i kullanacak) . use_backend (şu backendi kullan) ve default_backend (harici tüm durumlarda şu backend’i kullan) gibi ifadeler HAproxy’de çok kullanacağımız ifadelerdir.

HAproxy şu anda GitHub, Imgur, Instagram, Twitter ve daha birçok website tarafından kullanılmakta ve geleceğide oldukça parlak gözükmekte. Geçtiğimiz yıl gelen Lua desteği ile çok büyük potansiyele sahip olduğu açık bir gerçek. En ufak bir sorunuz dahi varsa çekinmeden yorum kısmından belirtin. Sonraki Haproxy yazılarımızda görüşmek üzere.

TAG
RELATED POSTS

LEAVE A COMMENT