Bu makalede Azure Load Balancer konusunu inceliyor olacağım.

Load Balancing aynı hizmeti veren sunucular arasında yük paylaştırma işlemidir. Yük dengeleme, kaynak kullanımını iyileştirmeyi, aktarım hızını en üst düzeye çıkarmayı, yanıt süresini en aza indirmeyi ve tek bir kaynağın aşırı yüklenmesini önlemeyi amaçlar.

Günlük trafiği çok fazla olan bir web sitesi düşünürsek tek bir sunucu gelen isteklere zamanında yanıt veremeyebilir. Hizmet veren sunucunun kaynaklarını(disk,ram) sürekli olarak artırmak yerine iki veya daha fazla sunucu arasında yük dengeleme yaparak gelen trafiği rahatlatıp yanıt süresinini minunum seviyeye düşürürerek yüksek kullanılabilirlik sağlanabilir.

Bu makalede örnek olarak 2 tane web sunucusu arasında yük dengeleme işlemi yaparak gelen trafiği web sunucuları arasında paylaştıracağım.

Azure üzerinde Public veya Internal olmak üzere iki çeşit yük dengeleme işlemi gerçekleştirilebilir.

Public Load Balancer: Hizmet veren sanal makinelere yönelik internet trafiğinin yükünü dengelemek amacıyla kullanılır. Public load balancer, public ip adresini ve gelen trafiğin port numarasını load balancer arkasında bulunan sanal makinelerin private ip adresi ve port numarasıyla eşler.

Internal Load Balancer: Internal load balancer sanal ağ içindeki trafiği dengelemek amacıyla kullanılır. Internal load balancer frontend ip adresi ve sanal ağlar doğrudan internete gösterilmez. Genellikle şirket içinde bulunan yük trafiğini dengelemek amacıyla kulanılır.

Not: Public ve Internal Load Balancer hem gelen hem de giden trafik için kullanılabilir.

reference: https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-load-balancer/2-what-is-azure-load-balancer

İlk olarak Internal Load Balancer yapılandırması gerçekleştireceğim. Sonrasında ise Public Load Balancer yapılandırma ve test işlemlerini gerçekleştiriyor olacağım.

Load Balancer yapılandırması oluşturulmadan önce kaynakların bulunacağı resource group ve kullanılacak virtual network oluşturma işlemi gerçekleştirilir.

https://portal.azure.com/ üzerinden Azure Portala erişim sağlandıktan sonra arama kısmına resource group yazılır.

Açılan resource groups penceresinde create denilerek yeni bir resource group oluşturma penceresi açılır.

Oluşturulacak olan resource group‘a tanımlayıcı bir isim verildikten sonra bulunacağı bölge seçilerek Review + create denilerek resource group oluşturma işlemi başlatılır.

Resource group oluşturma işlemi tamamlandıktan sonra virtual network oluşturulur. Azure Portal üzerinde bulunan arama kısmına virtual networks yazılarak virtual networks penceresine erişim sağlanır.

Açılan pencerede Create denilerek yeni bir tane virtual network oluşturma sekmesi açılır.

Açılan sekmede virtual networkün bulunacağı resource group seçilir ve tanımlayıcı isim verilerek IP Addresses kısmına geçiş sağlanır.

IP Addresses kısmında bulunan IPv4 address space ve Subnet kısımları yapılandırılarak bir sonraki aşamaya geçiş sağlanır.

Oluşturacak olduğum sanal makinelere Bastion ile bağlantı gerçekleştireceğim için Security kısmında bulunan BastionHost değeri Enable hale getirilerek Bastion name, AzureBastionSubnet address space ve Public IP address yapılandırmaları gerçekleştirildikten sonra Review + create ile virtual network oluşturma işlemi başlatılır.

Not: Bastion oluşturma hizmeti yaklaşık 10 dk sürmektedir.

Resource group ve virtual network oluşturma işlemi tamamlandıktan sonra arama kısmına Load balancers yazılır ve çıkan sonuçlarda Load balancers seçilir.

Açılan pencerede Create denilerek yeni bir load balancer yapılandırma penceresi açılır.

Açılan Create load balancer penceresinin Basics sekmesinde;

Subscription: Kullanılacak abonelik seçiminin yapıldığı kısımdır.
Resource group: Load balancer‘ın bulunacağı resource group seçiminin gerçekleştirileceği alandır.
Name: Tanımlayıcı isimlendirmenin yapıldığı alandır.
Region: Kaynağın bulunacağı bölgedir.
SKU( Stock Keeping Unit): Azure load balancer 3 çeşit SKU‘ya sahiptir: Standart, Gateway ve Basic. Her SKU belirli bir senaryo içindir. Herbiri için ölçek, özellik ve fiyatlandırma farklılıkları bulunmaktadır.
Gateway: Ağ sanal cihazlarının (Network Virtual Appliances) yüksek performansını ve yüksek ölçeklenebilirliğini gerektiren senaryolar için kullanılır.

reference: https://docs.microsoft.com/en-us/azure/load-balancer/tutorial-gateway-portal

Standart ve Basic SKU için karşılaştırma tablosu aşağıdaki gibidir;

Microsoft, standart load balancer kullanımını önermektedir.

reference: https://docs.microsoft.com/en-us/azure/load-balancer/skus

Type: Internal olarak seçilir.
Tier: Regional(Bölgesel) ve Global(Küresel) olmak üzere iki çeşit bulunmaktadır.
Regional: Sanal ağlar içindeki trafiği sanal makineler veya bölge içindeki yedekli hizmetler arasında dağıtır. Bunları sanal makineler, kapsayıcılar veya kümeler arasında yük dengelemesi sağlayan sistemler olabilir.
Global: Trafiği bölgesel backend, cloud veya hibrit şirket içi hizmetler arasında dağıtır. Bu hizmetler son kullanıcı trafiğini mevcut en yakın backend’e yönlendirir.

reference: https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/load-balancing-overview

Basics kısmında bulunan yapılandırma işlemlerini tamamladıktan sonra Frontend IP configuration sekmesine geçiş yapılır.

Frontend IP configuration sekmesinde Add a frontend IP configuration seçilerek yeni bir yapılandırma penceresi açılır.

Frontend IP adresi, web uygulamalarına bağlanan istemciler tarafından kullanılan adrestir. Add frontend IP configuration sekmesinde bulunan;
Name: Oluşturulacak olan yapılandırmaya tanımlayıcı bir isim verilir.
Subnet: Yapılandırmada kullanılacak olan subnet seçimi gerçekleştirilir.
Availability zone: Kullanılabilirlik bölgesi seçiminin yapılacağı kısımdır.

Yapılandırma işlemleri tamamlandıktan sonra Add butonu ile ekleme işlemi gerçekleştirilir.

reference: https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-load-balancer/3-how-azure-load-balancer-works

Frontend IP configuration kısmındaki yapılandırma işlemleri tamamlandıktan sonra Backend pool yapılandırma işlemleri gerçekleştirilir. Backend pools sekmesinde bulunan Add a backend pool seçilerek yeni bir yapılandırma penceresi açılır.

Backend pool sanal makine ölçek kümesindeki gelen isteğe yanıt veren bir sanal makine grubudur. Load balancer, sanal makinelerin ölçeğini artırdığınızda veya azalttığınızda yükü değişen makine sayısı boyunca yükü yeniden dağıtmak için otomatik yeniden yapılandırma uygular. Örnek olarak, backend pool kısmına iki sanal makine daha eklenmesi durumunda, Load balancer önceden yapılandırılmış yük dengeleme kurallarına göre bu sanal makinelere yönelik trafiği dengelemeye başlamak için kendisini yeniden yapılandırır. Backend pool, NIC veya IP adres yapılandırmasını desteklemektedir.

Add backend pool yapılandırma sayfasında;
Name: Tanımlayıcı bir isim verilir.
Backend Pool Configuration: Yapılandırma tercihinin NIC veya IP adresi olarak seçilebildiği kısımdır.
IP Version: IPv4 veya IPv6 seçiminin gerçekleştirildiği kısımdır.
Virtual machines: Backend pool’a eklenecek sanal makinelerin seçildiği kısımdır. Ben sanal makineleri backen pool‘a load balancer yapılandırması sonrasında ekleyeceğim.

Backend pool yapılandırma işlemlerini tamamladıktan sonra Add butonu ile ekleme işlemi gerçekleştirilir.

reference: https://docs.microsoft.com/en-us/azure/load-balancer/components

Backend pool yapılandırması sonrasında gelen trafiğin nasıl yönlendirileceğini belirlemek için Inbound rules kısmında Add a load balancing rule seçilerek yeni bir kural oluşturulmalıdır.

Gelen trafiğin backend pool da bulunan  sanal makinelere nasıl dağıtılacağını tanımlamak için yük dengeleyici kuralı kullanılır. Yük dengeleme kuralı, belirli bir frontend IP yapılandırmasını ve bağlantı noktasını birden çok arka uç IP adresi ve bağlantı noktasıyla eşler.

Aşağıdaki görsel load balancing kuralının nasıl çalıştığını göstermektedir.

reference: https://docs.microsoft.com/en-us/azure/load-balancer/components

Add load balancing rule kısmında bulunan;
Name: Kuralın tanımlayıcı ismi
IP version: Kullanılacak olan IP versiyonunun seçiminin yapıldığı kısım
Frontend IP address: Frontend ip adresinin seçileceği kısım. Daha önceden oluşurulan Frontend ip yapılandırması seçilir.
Backend pool: Backend pool’un seçileceği kısımdır. Daha önceden oluşturulan backend pool seçilir.
HA Ports: High availability ports yük dengeleme kuralı , sanal ağlardaki ağ sanal cihazları (Network Virtual Appliance) için yüksek kullanılabilirlik ve ölçeklendirme gibi kritik senaryolarda kullanılır.
Örneğin HA Ports yapılandırması etkin olarak işaretlenirse load balancer tüm bağlantı noktalarına gelen TCP ve UDP akışlarının yükünü dengelemek için tek bir kuralı etkinleştirir.

reference: https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-load-balancer/3-how-azure-load-balancer-works

Protocol: TCP veya UDP tercihinin yapılandırıldığı kısımdır.
Port: Frontend port numarası belirtilir.
Backend port: Backend port numarası belirtilir.
Health probe: Health probe, bir sanal makinein sağlıklı olup olmadığını ve trafik alıp alamayacağını belirler.
Not: HTTPS araştırması yalnızca standard load balancer için kullanılabilir .
Session persistence: Oturum kalıcılığı (Session persistence), bir istemciden gelen trafiğin nasıl ele alınması gerektiğini belirtir. Varsayılan davranış none, bir istemciden gelen ardışık isteklerin herhangi bir sanal makine tarafından ele alınabilmesidir.
Oturum kalıcılığını kullandığınızda, aynı istemciden gelen bağlantılar, backend poolda bulunan aynı arka uç örneğine gider.

  • None (varsayılan) : Herhangi bir sağlıklı sanal makinenin isteği işleyebileceğini belirtir.
  • Client IP (2-tuple) : Aynı istemci IP adresinden gelen ardışık isteklerin aynı arka uç örneği tarafından ele alınacağını belirtir.
  • Client IP and protocol (3-tuple) : Aynı istemci IP adresinden ve protokol kombinasyonundan gelen ardışık isteklerin aynı arka uç örneği tarafından ele alınacağını belirtir.

reference: https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-load-balancer/3-how-azure-load-balancer-works

Idle timeout: Varsayılan olarak 4 dakikaya ayarlanmıştır. Hareketsizlik süresi zaman aşımı değerinden uzunsa, istemci ile cloud hizmetiniz arasında TCP veya HTTP oturumunun sürdürüleceğinin garantisi yoktur.
TCP reset: Kural etkinleştirildiğinde, load balancer tüm eşleşen akışlar için boşta kalma zaman aşımı sırasında hem istemci hem de sunucu uç noktalarına çift yönlü TCP RST paketi gönderir. TCP RST paketlerini alan uç noktalar ilgili soketi hemen kapatır. Bu bağlantının serbest bırakılmasının gerçekleştiğine ve aynı TCP bağlantısı üzerinde gelecekteki herhangi bir iletişimin başarısız olacağına dair uç noktalara anında bir bildirim sağlar. Uygulamalar, yuva kapandığında bağlantıları temizleyebilir ve TCP bağlantısının zaman aşımına uğramasını beklemeden gerektiğinde bağlantıları yeniden kurabilir.

reference: https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-tcp-reset

Floating IP: Backend portunu birden çok kuralda yeniden kullanmak istiyorsanız, kural tanımında Flooting IP’yi etkinleştirmeniz gerekir.

reference: https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-floating-ip
reference: https://docs.us.sios.com/spslinux/9.5.2/en/topic/azure-using-an-internal-load-balancer

Load balancing rule yapılandırmasını tamamladıktan sonra Add butonu ile kural eklenir.

Basics, Frontend IP configuration, Backend pools, Inbound rules yapılandırma işlemleri tamamlandıktan sonra Review + create ile load balancer oluşturma işlemi tamamlanır.

Load balancer oluşturma işlemi tamamlandıktan sonra sırada test işlemlerinde kullanılacak olan sanal makinelerin oluşturulması işlemi yer almaktadır.

Azure portal üzerinde bulunan arama kısmına virtual machines yazılarak sanal makineler kısmına erişim sağlanır.
Virtual machines kısmında create ->virtual machine denilerek yeni bir sanal makine oluşturma penceresi açılır.

Açılan pencerede;
Subscription: Abonelik seçiminin yapıldığı kısım
Resource group: Sanal makinenin bulunacağı resource group
Virtual machine name: Oluşturulacak olan sanal makinenin ismi
Region: Sanal makinenin bulunacağı bölge
Security type: Güvenlik tipinin belirlendiği kısım
Image: Oluşturulacak sanal makinede kullanılacak olan imaj
Size: Sanal makinenin cpu,ram gibi özellik seçiminin belirlendiği alan
Username: Sanal makinenin admin kullanıcısının belirlendiği kısım
Inbound rule: HTTP (80) portuna erişim izni verilir.

Disk yapılandırmasında herhangi bir değişiklik gerçekleştirmeden Networking tabına geçiş yapılır.
Networking tabında;
Virtual netwok: Kulanılacak olan netwok seçimi yapılır. Daha önceden oluşturulmuş olan LBVNet seçilir.
Subnet: Kullanılacak olan subnet seçimi gerçekleştirilir. Daha önceden oluşturulan BackendSubnet seçilerek devam edilir.
Puplic IP: Public ip kısmı None olarak bırakılır.
Load balancing kısmında;
Select a load balancer: Load balancer seçiminin gerçekleştirildiği kısımdır. Daha önceden oluşturulmuş olan load balancer seçilir.
Select a backend pool: Backend pool tercihinin yapıldığı alandır. Load balancer yapılandırması sırasında oluşturulan backend pool seçilerek devam edilir.
Networking sekmesinde bulunan yapılandırma işlemleri tamamlandıktan sonra Review + create denilerek sanal makine oluşturma işlemi tamamlanır.

WEBSRV1 isimli sanal makinenin oluşturma işlemleri tekrarlanarak WEBSRV2 isimli sanal makine oluşturulur.
Sanal makinelerin oluşturulma işlemleri tamamlandıktan sonra makinelere Bastion üzerinden erişim sağlanır.
IIS rolünü eklemek için Server Manager açılarak Add roles and features seçilerek devam edilir.

Before you begin adımında herhangi bir işlem yapmadan devam edilir.

Select installation type kısmında Role-based or feature-based installation seçilerek devam edilir.

Server selection kısmında rolün yükleneceği makine seçilerek devam edilir.

Select server roles kısmında Web Server (IIS) rolü seçilir. Diğer sekmelerde bir değişiklik yapmadan devam edilir.

Install butonu tıklanarak Web Server(IIS) rolünün kurulum işlemini başlatılır.

WEBSRV2 sunucusunda aynı adımlar tekrarlanarak Web Server(IIS) rolü kurulur.

Sunucuların ikisinde de IIS rolü kurulduktan sonra C:\inetpub\wwwroot dizinine erişim sağlanır. Bu dizinde bulunan iisstart.htm dosyası bir düzenleyici yardımı ile açılır ve içindeki tüm veriler silindikten sonra düzenleme yapılan sunucunun hostname bilgisi yazılarak kaydedilir.

Bu düzenlemenin ardından sırada load balancer test işlemi var. Client makinede tarayıcı açılarak adres çubuğuna load balancer frontend ip adresi yazılır.

Web sitesi açıldığında load balancer‘ın gelen isteği WEBSRV2 sunucusuna yönlendirdiği görüntülenmektedir.

Test işlemini tekrar ettiğimde bu sefer load balancer gelen isteği WEBSRV1 sunusuna yönlendirdi. Load balancer başarılı bir şekilde yük dengeleme işlemini gerçekleştirmektedir.

Internal load balancer yapılandırma ve test işleminin ardından Public load balancer yapılandırma işlemi gerçekleştireceğim.
Azure portal üzerinde bulunan arama kısmına load balancers yazılır ve çıkan sonuçlarda load balancers seçilir.
Açılan pencerede Create denilerek yeni bir load balancer yapılandırma penceresi açılır.
Create load balancer penceresinde Internal yapılandarmadan farklı olarak Type kısmı Public seçilerek Frontend IP configuration sekmesine geçiş sağlanır.

Frontend IP configuration sekmesinde bulunan Add a frontend IP configuration seçilerek yeni bir yapılandırma penceresi açılır.

Açılan Add frontend IP configuration penceresinde;
Name: Tanımlayıcı bir isim verilir.
IP version: IPv4 ve IPv6 seçiminin gerçekleştirildiği kısımdır.
IP type: IP address veya IP prefix tercihinin yapıldığı alandır.
Public IP address: Daha önceden oluşturulmuş olan bir public ip yoksa Create new denilerek yeni bir public ip adresi oluşturulur.
Gateway Load balancer: None olarak bırakılır.
Frontend IP configuration işlemi tamamlandıktan sonra Add butonu ile ekleme işlemi gerçekleştirilir.

Frontend IP configuraton işlemi tamamlandıktan sonra Backend pools yapılandırma işlemleri gerçekleştirilir. Add a backend pool seçilerek yeni bir yapılandırma penceresi açılır.

Add backend pool yapılandırma sayfasında;
Name: Tanımlayıcı bir isim verilir.
Backend Pool Configuration: Yapılandırma tercihinin NIC veya IP adresi olarak seçilebildiği kısımdır.
IP Version: IPv4 veya IPv6 seçiminin gerçekleştirildiği kısımdır.
Virtual machines: Backend pool’a eklenecek sanal makinelerin seçildiği kısımdır. WEBSRV1 ve WEBSRV2 sanal makinelerini ekliyorum.
Backend pool yapılandırma işlemlerini tamamladıktan sonra Add butonu ile ekleme işlemi gerçekleştirilir.

Add load balancing rule kısmında bulunan;
Name: Kuralın tanımlayıcı ismi
IP version: Kullanılacak olan IP versiyonunun seçiminin yapıldığı kısımdır.
Frontend IP address: Frontend ip adresinin seçileceği kısım. Daha önceden oluşurulan Frontend ip yapılandırması seçilir.
Backend pool: Backend pool’un seçileceği kısımdır. Daha önceden oluşturulan backend pool seçilir.
Protocol: TCP veya UDP tercihinin yapılandırıldığı kısımdır.
Port: Frontend port numarası belirtilir.
Backend port: Backend port numarası belirtilir.
Health probe: Health probe, bir sanal makinein sağlıklı olup olmadığını ve trafik alıp alamayacağını belirler.
Not: HTTPS araştırması yalnızca standard load balancer için kullanılabilir .
Session persistence: Oturum kalıcılığı (Session persistence), bir istemciden gelen trafiğin nasıl ele alınması gerektiğini belirtir. Varsayılan davranış none, bir istemciden gelen ardışık isteklerin herhangi bir sanal makine tarafından ele alınabilmesidir.
Idle timeout: Varsayılan olarak 4 dakikaya ayarlanmıştır. Hareketsizlik süresi zaman aşımı değerinden uzunsa, istemci ile cloud hizmetiniz arasında TCP veya HTTP oturumunun sürdürüleceğinin garantisi yoktur.
TCP reset: Kural etkinleştirildiğinde, load balancer tüm eşleşen akışlar için boşta kalma zaman aşımı sırasında hem istemci hem de sunucu uç noktalarına çift yönlü TCP RST paketi gönderir. TCP RST paketlerini alan uç noktalar ilgili soketi hemen kapatır. Bu bağlantının serbest bırakılmasının gerçekleştiğine ve aynı TCP bağlantısı üzerinde gelecekteki herhangi bir iletişimin başarısız olacağına dair uç noktalara anında bir bildirim sağlar. Uygulamalar yuva kapandığında bağlantıları temizleyebilir ve TCP bağlantısının zaman aşımına uğramasını beklemeden gerektiğinde bağlantıları yeniden kurabilir.
Floating IP: Backend portunu birden çok kuralda yeniden kullanmak istiyorsanız kural tanımında Flooting IP’yi etkinleştirmeniz gerekir.
Outbound source network address translation (SNAT): Backend pool üyelerinin internete erişimini sağlamak için (Recommended) Use outbound rules to provide backend pool members access to the internet seçilerek devam edilir.
Load balancing rule yapılandırmasını tamamladıktan sonra Add butonu ile kural eklenir.

Basics, Frontend IP configuration, Backend pools, Inbound rules yapılandırma işlemleri tamamlandıktan sonra Review + create ile load balancer oluşturma işlemi tamamlanır.

Client makinede tarayıcı açılarak adres çubuğuna load balancer’ın frontend ip adresi yazılır. Load balancer’ın client tarafından gelen isteği WEBSRV2 isimli makineye yönlendirdiği görülmektedir.

Tarayıcı üzerinde load balancer frontend ip adresine tekrar gittiğimde bu sefer load balancer gelen isteği WEBSRV1 sanal makinesine yönlendirmiştir. Load balancer başarılı bir şekilde yük dengeleme işlemini gerçekleştirmektedir.

Uzun soluklu bir makalenin daha sonuna gelmiş bulunmaktayız. Bu makalede Azure load balancer konusunu incelemiş olduk.

Bir sonraki makalede görüşmek üzere. Sağlıkla Kalın…

Yazar: Mutlu BALIK