Doküman

Linux HAProxy ve Yük Dengeleme Kavramları: Temel Bilgiler

Giriş

High Availability Proxy (HAProxy), Solaris, FreeBSD ve Linux üzerinde çalışabilen popüler bir açık kaynaklı proxy ve TCP/HTTP yük dengeleyici çözümüdür. En yaygın olarak, birden çok sunucu arasında dengeli bir iş yükü dağılımı sağlayarak bir sunucu ortamının güvenilirliğini ve performansını artırmak için kullanılır. Bu araç türü Instagram, GitHub, Twitter ve Imgur gibi birçok yüksek profilli ortamda kullanılmaktadır.

Bu kılavuz size HAProxy’yi tanıtacak, yük dengeleme terminolojisi hakkında bilgi verecek ve sunucu ortamlarının hem performansını hem de güvenilirliğini desteklemek için nasıl yararlanılabileceğine ilişkin örnekler sağlayacaktır.

ACL (Erişim Kontrol Listesi)

Yük dengeleme söz konusu olduğunda, belirli bir koşulu test etmek ve sonuca göre bir eylem gerçekleştirmek için ACL’ler kullanılır. Bu, arka uç bağlantıları ve kalıp eşleştirme gibi faktörlerin yanı sıra çok sayıda başka faktöre dayalı olarak trafiği en iyi şekilde iletme yeteneği sağlar. Kullanımda olan bir ACL örneği:

acl url_blog path_beg /blog

Bu durumda, kullanıcının istediği yol /blog ile başlıyorsa ACL bir eşleşmedir. Örneğin, bu eşleşme isteği http://alanadiniz.com/blog/blog-entry-1’e işaret eder. HAProxy Yapılandırma Kılavuzu, ACL kullanımına ilişkin ayrıntılı bir kılavuz içerir.

Backend

İletilen istekler, arka uç olarak adlandırılan bir dizi sunucu tarafından alınır. İstekler, HAProxy yapılandırmasının arka uç bölümünde tanımlanır. En temel terimlerle, bir arka uç, hangi yük dengesi algoritmalarının kullanılacağı ve bağlantı noktaları ve sunucuların bir listesi ile tanımlanabilir. Bir arka uç, tek bir sunucudan veya birden çok sunucudan oluşabilir. Arka uca daha fazla sunucu eklendikçe, işleme birden çok sunucuya yayılarak potansiyel yük kapasitesi artar. Arka uç sunucularından bazıları çevrimdışı olursa, diğerleri istek işlemeyle ilgilenmek için yedek görevi görür.

İki arka uç konfigürasyonuna bir örnek bakalım. Bu durumda, bunlar bir blog arka ucu ve bir web arka ucudur. Her birinin 80 numaralı bağlantı noktasını dinleyen iki web sunucusu vardır:

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

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

Line Balance Roundrobin, yük dengeleme algoritmasını belirtmek için tasarlanmıştır. Ayrıntılar, gelecek olan Yük Dengeleme Algoritmaları bölümünde bulunabilir, mod http ise katman 7 proxy kullanımını ayarlar. Bunu Yük Dengeleme Tipleri bölümünde açıklayacağız. Ayrıca, sunucuların yönergesinden sonraki kontrol seçeneği, belirli arka uç sunucularında sağlık kontrollerinin tetikleneceğini gösterir.

Frontend

İsteklerin arka uca nasıl iletildiğinin tanımına ön uç denir. İstekler, HAProxy yapılandırmasının ön uç bölümünde tanımlanır. ACL’lerden, bir bağlantı noktasından, bir dizi IP adresinden ve use_backend kuralı olarak adlandırılan hangi ACL koşullarının karşılandığına bağlı olarak hangi arka uçların kullanılacağını tanımlayan bir kuraldan oluşurlar. Ayrıca, diğer durumları hesaba katan bir default_backend kuralı da mevcuttur. Sonraki bölüm, bir ön ucun çeşitli ağ trafiği türlerine göre nasıl yapılandırılabileceğini açıklayacaktır.

Yük Dengeleme Tipleri

Yük dengeleme için kullanılan temel bileşenler oluşturulduktan sonra, artık temel yük dengeleme türlerine geçebiliriz.


Yük Dengeleme Yok

En basit haliyle, yük dengeleme eksikliği aşağıdaki gibi gösterilebilir:

Bu senaryoda, bir kullanıcı doğrudan etkialaniniz.com adresindeki web sunucusuna bağlanır. Yük dengeleme mevcut değildir. Sadece bir veritabanı sunucusu olduğu için, çevrimdışı olursa, üzerindeki bilgilere erişim artık tamamen kesilmiştir. Birçok kullanıcı aynı anda tek bir web sunucusuna bağlanmaya çalışıyorsa ve uygulanan yükü kaldıramıyorsa, tüm bağlantılar yavaşlar veya tamamen bağlanamaz.

Load Balancing (layer 4)

Birden çok sunucuya giden ağ trafiğini dengelemenin en basit, en pragmatik yollarından biri, taşıma katmanı veya 4. katman dengeleme yöntemlerini kullanmaktır. Bu tür yük dengeleme, bağlanan herhangi bir kullanıcıyı, IP adreslerinin düştüğü IP aralığına ve bağlantı noktasına göre yönlendirir. Başka bir deyişle, http://yourdomain.com/anything, isteğin geldiği yerse, bu istekleri işlemek için tanımlanan arka uç, sonuçta onları ele alacak olan olacaktır. Bu istekleri alaniniz.com için 80 numaralı bağlantı noktasında iletecektir.

  1. katman yük dengelemenin temel oluşumu şöyle görünür:
HaProxy

Kullanıcı yük dengeleyiciye eriştiğinde, istekleri web arka uç sunucu grubuna iletilir. Yapılandırılan arka uç sunucusu, kullanıcının isteğine doğrudan yanıt verecektir. Kullanıcının tutarsız verilerle karşılaşmasını önlemek için tüm web arka uç sunucuları aynı içeriği sunmalıdır. Yukarıdaki şemaya göre, her iki web sunucusu da nihayetinde aynı veritabanı sunucusuna bağlanır.

Load Balancing (layer 7)

Ağ trafiğini dengelemek için daha karmaşık başka bir yöntem daha var. Bu, seviye 7 veya uygulama katmanı yük dengeleme kullanılarak yapılır. Bu yaklaşım, kullanıcı isteklerinin içeriğine bağlı olarak kullanıcı isteklerinin farklı arka uç sunucularına iletilmesine olanak tanır. Bu yöntem, aynı bağlantı noktası ve etki alanı aracılığıyla birden çok web uygulama sunucusunda yük dengelemenin gerçekleşmesine izin verir. Bu katman hakkında daha fazla ayrıntı için The Nitty Gritty of Networking: Terminoloji, Arayüzler ve Protokoller hakkında bilgi edinin eğitimimizin HTTP alt bölümüne bakın.

Aşağıdaki şema, katman 7 yük dengelemesini göstermektedir:

HaProxy

Bu durumda, bir kullanıcı etkialaniniz.com/blog’unuzu ister ve bu istek blog arka ucuna iletilir. Bu, blog uygulamasını çalıştırmak için özel olarak ayrılmış bir arka uç sunucusudur. Bu arada, diğer istekler web arka ucuna iletilecektir. Ancak, her iki arka uç da aynı veritabanı sunucusuna erişim sağlar.

Katman 7 yük dengeleme için küçük bir ön uç konfigürasyonu örneği, aşağıdaki komutlara benzer. Http ön ucunu, 80 numaralı bağlantı noktası üzerinden gelen trafiği işlemek için yapılandırırlar:

frontend http
bind *:80
node http
acl url_blog path_beg /blog
use_backend blog.backend if url_blog

default_backend web.backend

Kullanıcının isteğinin yolu /blog ile başlıyorsa, acl url_blog path_beg /blog istekle eşleşir.

use_backend blog backend if url_blog ACL’yi kullanarak trafiği blog arka ucuna yönlendirir.

defaut_backen web_backend, diğer tüm trafik yönlendirmelerini web arka ucuna yönlendirir.

Yük Dengeleme Algoritmaları

Yük dengeleme yapılırken bu amaçla hangi arka uç sunucusunun seçileceğini belirleyen yük dengeleme algoritmasıdır. HAProxy tarafından sunulan birkaç algoritma seçeneği vardır. Ek olarak, bir sunucunun diğerlerine kıyasla ne sıklıkla seçildiğini değiştirmek için sunuculara bir ağırlık parametresi atamak da mümkündür. Hepsini tanımlamak için çok fazla algoritma var. Bu nedenle, bu kılavuz yalnızca en yaygın olanlara odaklanacaktır. Tam listeyi görmek için HAProxy Documentation Converter’a başvurabilirsiniz. En sık kullanılanlar şunları içerir:

  • roundrobin: Sırayla sunucuları seçen varsayılan algoritma.
  • leastconn: Üzerinde en az bağlantı bulunan sunucu otomatik olarak seçilir. Ancak, aynı arka uçtaki bu sunucular, her seferinde bir deneme şeklinde döndürülmelidir.
  • source: Algoritma, kullanıcı isteğini sağlayan IP adresine göre sunucuyu seçer. Kullanıcının her zaman aynı sunucuya bağlanmasını sağlama yöntemidir.

Sabit Oturumlar

Bazı uygulamalar için, bağlanan kullanıcıların bunu her zaman aynı sunucuya bağlanarak yapması bir gerekliliktir. ‘Yapışkan oturumlar’ ve bunu gerektiren arka uçtaki appsession parametresini kullanarak, bu tür bir kalıcılık elde edilebilir.


Durum Kontrollerinin İşlenmesi

HAProxy, bir arka uç sunucusunun istekleri işleme yeteneğini belirleyebileceği bir yönteme ihtiyaç duyar. Bu, bir sunucunun çevrimdışı olması durumunda arka uçtan kaldırılmasının yerini alır. TCP bağlantısı kurmaya çalışan varsayılan bir ‘sağlık denetimi’ çalıştırması vardır. Bunu, yapılandırılmış IP adresini ve bağlantı noktasını dinleyerek yapar.

Sunucunun sistem durumu denetimi geçemezse, sunucu gönderilen istekleri işleyemez. Bu noktada, sunucu arka uçta otomatik olarak devre dışı bırakılır ve trafik yedeklenip (sağlıklı) olana kadar artık kendisine iletilmez. Ancak bazı durumlarda, sunucunun sağlığının varsayılan durum denetimi aracılığıyla belirlenmesi yetersiz kalır.

Alternatif Çözümler

HAProxy, özel ihtiyaçlarınız için çok karmaşık olabilir. Bu durumda, daha verimli olabilecek birkaç iyi alternatif vardır:

  • Nginx: Bu, yük dengeleme ve proxy amaçları için kullanılabilecek güvenilir ve hızlı bir web sunucusudur. Aslında, Nginx, sıkıştırma ve önbelleğe alma yeteneklerini kullanan HAProxy ile birlikte yaygın olarak kullanılır.
  • Linux Sanal Sunucuları (LVS): Bu, birçok Linux sisteminde bulunan basit, katman 4 yük dengeleyicidir.

Yüksek kullanılabilirlik

Şimdiye kadar katman 4 ve katman 7 yük dengeleme hakkında konuştuk. Her ikisi de, birçok arka uç sunucusundan hangisinin kullanıcının isteğine yanıt vermekle görevlendirileceğini belirlemek için bir yük dengeleyici kullanır. Ancak bir yük dengeleyicinin sınırlamalarını akılda tutmak önemlidir. Yani, bunun tek bir başarısızlık noktası olduğunu. Bu, eğer aşağı inerse veya kullanıcı istekleriyle aşırı yüklenirse, bunun sırasıyla kapalı kalma süresine veya istek işleme gecikmesine neden olacağı anlamına gelir. Ancak, bir HA (yüksek kullanılabilirlik) kurulumu, herhangi bir tek hata noktasından yoksun bir altyapı sunar. Bu, sistem mimarisinin her seviyesinde artıklık sağlayarak sunucu arızası nedeniyle kesinti olaylarının yaşanmasını önler. Yük dengeleyici, arka ucun yedekliliğini kolaylaştırmaya yardımcı olurken, yük dengeleyicilerin de yedeklilik uygulaması gerekir.

Aşağıdaki diyagram, yüksek kullanılabilirlik kurulumunun temel bir biçimini gösterir:

Bu altyapı, statik bir IP adresine bağlı birkaç yük dengeleyiciye (bir aktif, geri kalan pasif) sahiptir. Durum gerektiriyorsa, bu IP adresi farklı bir sunucuya yeniden eşlenebilir. Kullanıcı isteği, harici IP adresi üzerinden o anda etkin olan yük dengeleyiciye gider. Yük dengeleyici o sırada çevrimdışıysa, failsafe mekanizması durumunu algılayarak IP adresini pasif sunucuya/sunuculara yeniden atayacaktır.

Sonuç olarak

Yük dengelemeye ilişkin temel anlayış ve HAProxy’nin sisteminiz için yük dengeleme ihtiyaçlarını karşılama yollarından bazılarına ilişkin bilgi, mevcut sunucu ortamlarınızın güvenilirliğini ve performansını optimize etmeye başlamanız için size sağlam bir temel sağlayacaktır.

Yazının orijinalini buradan okuyabilirsiniz.