AWS - EC2 Load Balancing
Merhaba, bu yazımda Elastic Load Balancing(ELB) den bahsedeceğim.
Elastic Load Balancing(ELB), adından da anlaşılacağı gibi, AWS’de mevcut Instance’larımız için yük dağılımı yapmamızı sağlayan bir hizmettir.
Örneğin, 1 sunucu kurduk ve web sitemizi başlattık.Bu bir e-ticaret sitesi ve 7/24 çalışıyor olmalı diyelim.
Ancak bu sanal makinemiz herhangi bir sebeple arızalanırsa kurulum ve gerekli ayarlamalar vs derken çeşitli nedenlerle tekrar çalışır duruma gelmesi zaman alacaktır. Dolayısıyla müşteri ve para kaybınız olacaktır.
Bu sebeple tek bir makine kurmanın pek çok eksikliği var, bu yüzden altyapıyı birden çok sunucu üzerinde kurmamız gerekiyor. Ve bu sefer trafiği bu sunucular arasında yönlendirmeniz gerekiyor. Bu işi bizim için halleden Load Balancer dediğimiz hizmet tam olarak budur.Yani dışarıdan web sitemize gelen trafiği sağlıklı sunucularımıza yönlendiren bir nevi trafik polisi olarak düşünebiliriz.
ELB (Elastic Load Balancing) temelde gelen trafiği doğrudan sanal makineler yerine Load Balancer’a yönlendirebileceğimiz bir ağ hizmetidir.
Bu sayede trafiği belirlediğimiz kurallara göre düzenleyebilir ve trafiği hedef instance a yönlendirebiliriz.
Load Balancer temel olarak 2 bileşenden oluşur.
- Listener
- Configuration
Listener, adından da anlaşılacağı gibi bileşen ayarlarına göre belirli bir port üzerinden gelen trafiği dinler.
Configuration, Listener’ın analizini dikkate alan ve trafiğin yönlendirilmesini sağlayan bir kurallar dizisidir.
ELB Türleri
AWS’de 4 tür ELB vardır;
- Application Load Balancer
- Network Load Balancer
- Gateway Load Balancer
- Classic Load Balancer
Application Load Balancer
OSI Modelinin 7. Katmanında çalıştırılır.
Gelen trafiği tanımlar ve doğru kaynaklara iletir. Paket içeriğini okuyarak buradaki bilgilere göre talebi yönlendirebilirsiniz. Yani paketin içeriğine göre trafiği yönlendirir. Örneğin, bir URL’nin /API uzantıları varsa, uygun uygulama kaynaklarına yönlendirilir.
HTTP, HTTPS tabanlı etkileşimli web sayfaları, mobil uygulamalar ve kapsayıcılar vb. gibi görevlerimiz varsa Application Load Balancer’ı kullanırız. HTTP ve HTTPS trafiğinin yük dengelemesi için en uygun yöntemdir.
Network Load Balancer gibi, AWS’nin Auto Scaling işleviyle uyumlu Application Load Balancer’ı kullanabilirsiniz.
Network Load Balancer
OSI modelinin 4. Katmanında çalıştırılır.
Taşıma katmanında (TCP/SSL) yönlendirme yapar ve saniyede milyonlarca isteği işleyebilir. Bu nedenle, yüksek performans gerektiğinde TCP trafiğini dengelemek için en uygun yöntemdir.
Load balancer bir bağlantı aldığında, flow hash routing algoritması kullanarak hedef gruptan bir hedef seçer. Yani paketin içeriğine bakmaz, üzerindeki kurallara göre temel yönlendirmeyi yapar.
Temel bir TCP tabanlı bağlantı noktası üzerinden basit ve hızlı bir yük dengeleyiciye ihtiyacımız varsa, bu Network Load Balancer’dır.
Gateway Load Balancer
Gateway Load Balancer’lar, güvenlik duvarları, izinsiz giriş algılama ve önleme sistemleri ve derin paket inceleme sistemleri gibi sanal cihazları dağıtmanıza, ölçeklendirmenize ve yönetmenize olanak tanır.
Gateway Load Balancer, Open Systems Interconnection (OSI) modelinin üçüncü katmanı olan ağ katmanında çalışır. Tüm bağlantı noktalarındaki tüm IP paketlerini dinler ve trafiği dinleyici kuralında belirtilen hedef gruba iletir. 5 demet (TCP/UDP akışları için) veya 3 demet (TCP/UDP olmayan akışlar için) kullanarak belirli bir hedef cihaza akışların yapışkanlığını korur. Gateway Load Balancer ve kayıtlı sanal cihaz örnekleri, 6081 numaralı bağlantı noktasındaki GENEVE protokolünü kullanarak uygulama trafiğini değiştirir.
Classic Load Balancer
2009 yılından bu yana OSI modelinin Layer 4'ünde ve ELB’nin en eski tipinde hizmet vermektedir.
Classic Load Balancer, birden çok Amazon EC2 bulut sunucusunda temel yük dengeleme sağlar ve hem istek düzeyinde hem de bağlantı düzeyinde çalışır.
Classic Load Balancer, EC2-Classic ağı içinde oluşturulmuş uygulamalar için tasarlanmıştır.
Ayrıca, HTTP veya HTTP trafiğini yük dengelemek ve katman 7'ye özgü özellikleri kullanmak için kullanılabilir.
AWS, artık Classic Load Balancer kullanmanızı önermemektedir.
NOT: OSI, Open Systems Interconnection(Açık Sistem Bağlantısı) anlamına gelir. Bir bilgisayardaki bir yazılım uygulamasından gelen bilginin fiziksel bir ortamdan başka bir bilgisayardaki yazılım uygulamasına nasıl geçtiğini açıklayan bir referans modelidir. OSI yedi katmandan oluşur ve her katman belirli bir ağ işlevi gerçekleştirir.
Application Load Balancer Oluşturma (Step by Step)
Diyelim ki web sitemizde herhangi bir kesinti istemiyoruz. Böylece, ilk sunucumuzun tam kopyası olan anlık görüntü ile ikinci bir makine oluşturuyoruz.
Yani 2 web sunucumuz var. Şimdi, örneğimize bir şey olursa, diğerini kullanabiliriz. Ancak, trafiği ikinci sunucuya gecikmeden yönlendirmek için birçok ayarı manuel olarak yapmamız ve herhangi bir arızadan anında haberdar olmamız gerekiyor.
Burada Load Balancer’e ihtiyacımız var.
- EC2 AWS Yönetim konsolunda, soldaki menüden Load Balancer’ı seçin ve ardından ELB oluşturmaya başlamak için Create Load Balancer’a tıklayın.
- Her şeyden önce, hangi yük dengeleyiciyi(load balancer) kullanmayı tercih ettiğinize karar vermelisiniz. Burada 4 seçeneğimiz var. Bunlar yukarıdaki resimde gördüğünüz gibi Application Load Balancer, Network Load Balancer, Gateway Load Balancer ve Classic Load Balancer’dır.
- Senaryomuzda Web Application kullanacağımız için Application Load Balancer en iyi seçenek olacaktır.
- Create dedikten sonra karşımıza konfigürasyon ekranı gelecek
- Name :
- LB adını First-LB olarak yazıyoruz.
- Scheme :
- Bu bölümde Internet-facing veya Internal seçeneklerimiz var.
- Internet-facing’i seçersek, bu Load Balancer internetten yani dış dünyadan gelen trafiği yönetebilir ve iç kaynaklara dağıtabilir.
- Ancak Internal’ı seçerseniz bu sefer sadece VPC’de çalışır ve VPC içindeki Yük Dengeleme işlemlerimiz için kullanılır.
- Senaryomuzda dış dünyadan gelen trafiği içerideki 2 sunucuya dağıtıp internetten sunucularımıza ulaşacağız. Öyleyse Internet-facing’i seçelim.
- IP address Type :
- Ipv4 ve dual-stack seçeneklerimiz var. Ipv4'ü seçeceğiz. Bu işlem için yeterli.
- Availability Zone(AZ) :
- Bu bölümde load balancerımızı etkinleştirmek için Availability Zone’larını belirtebiliriz. AWS, load balancerınızın kullanılabilirliğini iyileştirmek için en az iki Availability Zone’dan alt ağlar belirlememizi önerir. Varsayılan VPC’yi ve tüm AZ seçeneklerini seçiyoruz.
- Ardından Security Group seçiyoruz (inbound http ve ssh açık olan security grubumu seçtim)
- Listener :
- Önceki derslerde Load Balancer’ların iki bileşeni olduğunu söylemiştik. Bunlardan biri listenerdir. Listener dışarıdan bu load balancerın hangi protokolde hangi portta olduğunu kabaca dinleyecektir. HTTP üzerinden dışarıdan trafik alacağımız için şimdilik HTTP 80 portunu seçiyoruz.
- Target group :
- Yeni bir target grup oluşturabilir veya mevcut olanı kullanabilirsiniz. Biz yeni bir tane oluşturmayı tercih ediyoruz.
- Create target group yazısına tıklıyoruz.
- Şimdi aşağıdaki sayfada görüldüğü gibi kuralları belirleyelim.
- Name :
- Target groupun adını First-target olarak belirliyoruz.
- Target Type :
- 3 seçeneğimiz var. Bunlar Instance, IP ve Lambda işlevidir.
- Instance seçeneğini seçersek oluşturduğumuz EC2 instance’ları hedeflenecektir. Ancak IP seçeneğini seçersek, belirli IP’leri girerek yapıyoruz. Son seçenek olarak, bu load balancerı birden fazla Lambda İşlevini yükleyecek şekilde de ayarlayabiliriz.
- Senaryomuzda EC2 instance’larına bağlanacağımız için Instance seçeceğiz,
- Protocol and Port :
- Trafiği bu target gruptaki hedeflere yönlendirirken load balancerın kullandığı protokolü ve bağlantı noktasını seçiyoruz. Bu yüzden HTTP ve 80 numaralı bağlantı noktasını seçiyoruz.
Health Checking
Health Checking, instances’ların load balancerda düzgün çalışıp çalışmadığını belirlemek için kullanılan bir işlevdir.
Load balancer, instances ın düzgün çalışıp çalışmadığını kontrol eder ve sağlıklıysa, load balancer instance a trafik gönderir. Düzgün çalışmıyorsa, kesintileri önlemek için trafiği diğer sağlıklı instances a yönlendirecektir. Buna Health Checking denir.
Böylece dışarıdan bağlanan istemciler, health check destekli yük dengeleyici sayesinde kesintisiz olarak çalışmaya devam edecek.
Load balancer’lar bu eylemi HTTP, HTTP’ler ve TCP protokolü üzerinden gerçekleştirebilir.
- Health Checks :
- Protocol:
- Burada Protokol olarak tekrar HTTP seçiyoruz
- Path:
- Sağlık kontrolleri için hedef yol olacaktır. Varsayılan “/” işareti bizim için kullanılabilir. Bu, LB’nin sunucumuzun ilgili olduğu web sitesinin ana sayfasını kontrol edeceği anlamına gelir.
- Advanced Health Check Settings :
- Bu, yukarıda bahsedilen “/” yolunun nasıl kontrol edileceğine dair kuralları belirlediğimiz kısımdır.
- Port :
- Bu, hedefler üzerinde sağlık kontrolleri gerçekleştirirken load balancerın kullandığı bağlantı noktasıdır. Varsayılan seçenek Trafik Bağlantı Noktası’dır. Olduğu gibi kalsın.
- Healthy Threshold :
- Burada, arka planda makineye gönderilecek istek sayısını siz belirlersiniz. Varsayılan değer 5'tir. Yani bu makine, makineyi 5 kez içeride sorgulayacaktır, beşten olumlu sonuç alırsa bu makine sağlıklı olarak değerlendirecektir.
- Unhealthy Threshold :
- LB’nin bu makinenin sağlıksız olduğuna karar vermesi için kaç tane hata sağladığını bu kısımda belirliyoruz. LB, sağlık kontrollerinden art arda 2 başarısız olursa, bu hedefin sağlıksız olduğuna karar verecektir.
- Timeout :
- Bağlantı hatası durumunda beklenecek maksimum saniye sayısını yazıyoruz. 5 saniye varsayılan değerdir.
- Interval :
- Bu kısım size her deney arasında kaç saniye geçeceğini gösterir. 30 saniye varsayılan değerdir ve bizim için kullanılabilir.
- Success Codes :
- Başarı kodu, cevabın sağlıklı olmasını sağlayan koddur. HTTP protokolünün 200'ünü alırsa sağlıklı olarak değerlendirecek, aksi halde sağlıksız diyecektir
- Tag :
- İsterseniz bir etiket girebilirsiniz.
- Ardından next diyoruz
- Next dedikten sonra Register targets sayfasıyla karşılaşıyoruz
- Target grubumuza ekleyeceğimiz instances ları seçip Include as pending below yazısına tıklıyoruz.
- Instances larımız Targets bölümüne düştü ve Create target group diyebiliriz
- Listeners and routing altından oluşturduğumuz target grubu seçebiliriz
- Şimdi yukarıda görülen sayfada yaptığımız tüm ayarları kontrol edelim,
- Ardından Load balancer’ı oluşturmak için Create sekmesine tıkladığımızda,
Artık iki sunucumuz load balancer kontrolünde çalışıyor. Load balancer bu instances ların sağlığını analiz edecek ve trafiği bu değerlendirmeye göre dağıtacaktır.
Şimdi load balancer ın bize verdiği dns adresini tarayıcımıza kopyalayıp load balancer ın durumunu kontrol edelim
- Adresi tarayıcıda açtığımda ikinci sunucumda olduğunu görüyorum(sunucuları ayırt etmek için first ve second isimlerini atadım)
- Tekrar sayfayı refresh ediyorum
- Ve bu sefer load balancer trafiği eşit olarak sağlıklı sunucularım arasında dağıttığı için first server ı görüntülüyorum
- Bu kısımda instance larımdan birini stop veya terminate ettiğimde load balancer geriye kalan sağlıklı instance ıma gelen istekleri yönlendirecektir.
Teşekkürler! Sağlıklı, Mutlu ve Umut dolu günler geçirmeniz dileğiyle..