Giriş
Yüksek Erişilebilirlik Proxy'si (HAProxy), popüler bir açık kaynaklı proxy ve TCP/HTTP yük dengeleyici çözümüdür ve şu sistemlerde çalışabilir: Solaris, FreeBSD, ve Linux. Genellikle, iş yükünün birden fazla sunucu arasında dengeli bir şekilde dağıtılmasını sağlayarak bir sunucu ortamının güvenilirliğini ve performansını artırmak için kullanılır. Bu tür araçlar Instagram, GitHub, Twitter ve Imgur gibi birçok yüksek profilli ortamda kullanılmaktadır.
Bu kılavuz sizi HAProxy ile tanıştıracak, yük dengeleme terminolojisi hakkında bilgi verecek ve sunucu ortamlarının hem performansını hem de güvenilirliğini artırmak için nasıl kullanılabileceğine dair örnekler sunacaktır.
Temel HAProxy Terimleri
Before getting into the details of yük dengeleme ve proxy kullanımı detaylarına girmeden önce, aşina olmanız gereken bazı önemli terimler ve kavramlar vardır. Sonraki bölümlerde bu kavramları inceleyerek başlayacağız.
ACL (Erişim Kontrol Listesi)
Yük dengeleme söz konusu olduğunda ACL'ler belirli bir koşulu test etmek ve sonuca göre bir eylem gerçekleştirmek için kullanılır. Bu, trafiğin arka uç bağlantıları ve kalıp eşleştirme gibi faktörlerin yanı sıra diğer birçok faktöre bağlı olarak en uygun şekilde yönlendirilmesini sağlar. İşte kullanımda olan bir ACL örneği:
|
1 |
acl url_blog path_beg /blog |
Bu durumda, kullanıcının talep ettiği yol /blog ile başlıyorsa ACL eşleşir. Örneğin, bu eşleşme isteği şurayı işaret eder: http://yourdomain.com/blog/blog-entry-1. HAProxy Yapılandırma Kılavuzu ACL kullanımına ilişkin ayrıntılı bir kılavuz içerir.
Arka Uç (Backend)
Yönlendirilen istekler, arka uç (backend) olarak adlandırılan bir dizi sunucu tarafından alınır. İstekler, HAProxy yapılandırmasının backend bölümünde tanımlanır. En temel ifadeyle bir arka uç, hangi yük dengeleme algoritmalarının kullanılacağı ve bağlantı noktaları ile sunucuların bir listesi ile tanımlanabilir. Bir arka uç, tek bir sunucudan veya birden fazla sunucudan oluşabilir. Arka uca daha fazla sunucu eklendikçe, işlem gücü birden fazla sunucuya yayılarak potansiyel yük kapasitesi artar. Arka uç sunucularından bazıları çevrimdışı olursa, diğerleri istek işlemlerini gerçekleştirmek için yedek görevi görür.
İki arka ucun yapılandırma örneğine bakalım. Bu durumda bunlar bir blog-backend ve bir web-backend'dir. Her birinin 80 numaralı bağlantı noktasını dinleyen iki web sunucusu vardır:
|
1 2 3 4 5 6 7 8 9 10 |
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 |
balance roundrobin satırı, yük dengeleme algoritmasını belirtmek için tasarlanmıştır. Detaylar yaklaşan Yük Dengeleme Algoritmaları bölümünde bulunabilir, mode http ise katman 7 proxy kullanımını ayarlar. Bunu Yük Dengeleme Türleri bölümünde açıklayacağız. Ayrıca, sunucu yönergelerinden sonra gelen check seçeneği, bu belirli arka uç sunucularında sağlık kontrollerinin tetikleneceğini belirtir.
Ön Uç (Frontend)
İsteklerin arka uca nasıl yönlendirileceğinin tanımı ön uç (frontend) olarak adlandırılır. İstekler, HAProxy yapılandırmasının frontend bölümünde tanımlanır. Bunlar; ACL'ler, bir bağlantı noktası, bir dizi IP adresi ve hangi ACL koşullarının karşılandığına bağlı olarak hangi arka uçların kullanılacağını tanımlayan use_backend kuralından oluşur. Ek olarak, diğer tüm durumları kapsamak için bir default_backend kuralı da mevcuttur. Bir sonraki bölümde, bir ön ucun çeşitli ağ trafiği türlerine göre nasıl yapılandırılabileceği açıklanacaktır.
Yük Dengeleme Türleri
Yük dengeleme için kullanılan temel bileşenler belirlendiğine göre, artık temel yük dengeleme türlerine geçebiliriz.
Yük Dengeleme Yok
En ilkel biçimiyle, yük dengeleme eksikliği şu şekilde gösterilebilir:
Bu senaryoda, bir kullanıcı doğrudan yourdomain.com adresindeki web sunucusuna bağlanır. Herhangi bir yük dengeleme mevcut değildir. Yalnızca bir veritabanı sunucusu olduğundan, bu sunucu çevrimdışı olursa üzerindeki bilgilere erişim tamamen kesilir. Birçok kullanıcı aynı anda tek bir web sunucusuna bağlanmaya çalışırsa ve sunucu bu yükü kaldıramazsa, tüm bağlantılar yavaşlar veya tamamen başarısız olur.
Yük Dengeleme (Katman 4)
Ağ trafiğini birden fazla sunucuya dengelemenin en basit ve en pratik yollarından biri, taşıma katmanı veya katman 4 dengeleme yöntemlerini kullanmaktır. Bu yük dengeleme yöntemi, bağlanan her kullanıcıyı IP adreslerinin dahil olduğu IP aralığına ve porta göre yönlendirir. Başka bir deyişle, eğer istek http://yourdomain.com/anything adresinden geliyorsa, bu istekleri karşılamak üzere tanımlanan arka uç (backend) nihayetinde bunları işleyecek olan birim olacaktır. Bu istekleri port 80 üzerinden yourdomain.com adresine iletecektir.
Katman 4 yük dengelemenin temel yapısı şu şekildedir:
Kullanıcı yük dengeleyiciye eriştiğinde, istekleri web-backend sunucu grubuna iletilir. Yapılandırılmış arka uç sunucusu, kullanıcının isteğine doğrudan yanıt verir. Kullanıcının tutarsız verilerle karşılaşmasını önlemek için tüm web-backend sunucuları aynı içeriği sunmalıdır. Yukarıdaki şemada görüldüğü gibi, her iki web sunucusu da nihayetinde aynı veritabanı sunucusuna bağlanır.
Yük Dengeleme (Katman 7)
Ağ trafiğini dengelemek için daha karmaşık başka bir yöntem daha vardır. Bu da katman 7 veya uygulama katmanı yük dengelemesi kullanmaktır. Bu yaklaşım, kullanıcı isteklerinin içeriğine bağlı olarak farklı arka uç sunucularına iletilmesini sağlar. Bu yöntem, yük dengelemenin aynı port ve alan adı üzerinden birden fazla web uygulaması sunucusunda gerçekleşmesine olanak tanır. Bu katman hakkında daha fazla ayrıntı için, The Nitty Gritty of Networking: Learn about Terminology, Interfaces, and Protocols kılavuzumuzun HTTP alt bölümüne göz atın.
Aşağıdaki şema katman 7 yük dengelemeyi göstermektedir:
Bu durumda, bir kullanıcı yourdomain.com/blog adresini talep eder ve isteği blog arka ucuna iletilir. Bu, özellikle blog uygulamasını çalıştırmak için ayrılmış bir arka uç sunucu kümesidir. Bu sırada diğer istekler web arka ucuna iletilecektir. Ancak her iki arka uç da aynı veritabanı sunucusuna erişimle sonuçlanır.
Katman 7 yük dengeleme için küçük bir ön uç (frontend) yapılandırması örneği aşağıdaki komutlara benzer olacaktır. Bunlar, http ön ucunu port 80 üzerinden gelen trafiği yönetecek şekilde yapılandırır:
|
1 2 3 4 5 6 7 8 |
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 ifadesi istekle eşleşecektir.
use_backend blog backend if url_blog komutu, ACL kullanarak trafiği blog-backend'e yönlendirir.
defaut_backen web_backend ise diğer tüm trafik yönlendirmelerini web-backend'e iletir.
Yük Dengeleme Algoritmaları
Yük dengeleme gerçekleştirilirken, bu amaçla hangi arka plan sunucusunun seçileceğini belirleyen şey yük dengeleme algoritmasıdır. HAProxy tarafından sunulan birkaç algoritma seçeneği mevcuttur. Ek olarak, bir sunucunun diğerlerine kıyasla ne sıklıkla seçileceğini manipüle etmek için sunuculara bir ağırlık (weight) parametresi atamak da mümkündür. Hepsini açıklamak için çok fazla algoritma mevcuttur. Bu nedenle, bu kılavuz yalnızca en yaygın olanlara odaklanacaktır. Tam listeyi görmek için HAProxy Dokümantasyon Dönüştürücüsü kısmına başvurabilirsiniz. En sık kullanılanlar şunlardır:
- roundrobin: Sunucuları sırayla seçen varsayılan algoritma.
- leastconn: Üzerinde en az bağlantı olan sunucu otomatik olarak seçilir. Ancak, aynı arka plandaki (backend) sunucular round-robin yöntemine göre sırayla döndürülmelidir.
- source: Algoritma, sunucuyu kullanıcı isteğinin kaynağı olan IP adresine göre seçer. Bu, kullanıcının her zaman aynı sunucuya bağlanmasını sağlamanın bir yöntemidir.
Yapışkan Oturumlar (Sticky Sessions)
Bazı uygulamalar için, bağlanan kullanıcıların her zaman aynı sunucuya yönlendirilmesi bir gerekliliktir. ‘Yapışkan oturumlar’ ve bunu gerektiren arka planda (backend) appsession parametresinin kullanılmasıyla bu tür bir kalıcılık sağlanabilir.
Sağlık Kontrollerinin İşlenmesi
HAProxy'nin, bir arka plan sunucusunun istekleri işleme yeteneğini belirleyebileceği bir yönteme ihtiyacı vardır. Bu, bir sunucu çevrimdışı olduğunda onu arka plandan çıkarma işleminin yerini alır. Bir TCP bağlantısı kurmaya çalışan varsayılan bir 'sağlık kontrolü' (health check) çalıştırılır. Bunu, yapılandırılmış IP adresini ve bağlantı noktasını (port) dinleyerek yapar.
Sunucu için sağlık kontrolü geçemezse, sunucu gönderilen istekleri işleyemez. Bu noktada, sunucu arka planda otomatik olarak devre dışı bırakılır ve tekrar çalışır duruma gelene (sağlıklı olana) kadar trafik artık ona yönlendirilmez. Ancak bazı durumlarda, sunucunun sağlığını varsayılan sağlık kontrolü aracılığıyla belirlemek yetersiz kalabilir.
Alternatif Çözümler
HAProxy, özel ihtiyaçlarınız için fazla karmaşık gelebilir. Bu durumda, daha verimli olabilecek birkaç iyi alternatif mevcuttur:
- Nginx: 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 özelliklerinden yararlanan HAProxy ile birlikte yaygın olarak kullanılır.
- Linux Virtual Servers (LVS): Birçok Linux sisteminde bulunan basit, katman 4 (layer 4) bir yük dengeleyicidir.
Yüksek Erişilebilirlik
Şimdiye kadar katman 4 ve katman 7 yük dengelemeden bahsettik. Her ikisi de, çok sayıdaki arka plan 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 hata noktası (single point of failure) olmasıdır. Bu, çökerse veya kullanıcı istekleriyle aşırı yüklenirse, sırasıyla kesintiye veya istek işlemede gecikmeye neden olacağı anlamına gelir. Bununla birlikte, bir HA (yüksek erişilebilirlik) kurulumu, tek bir hata noktası olmayan bir altyapı sunar. Bu, sistem mimarisinin her seviyesinde yedeklilik (redundancy) sağlayarak sunucu arızası nedeniyle kesinti yaşanmasını önler. Yük dengeleyici arka planın yedekliliğini kolaylaştırmaya yardımcı olurken, yük dengeleyicilerin kendilerinin de yedekli çalışması gerekir.
Aşağıdaki diyagram, yüksek erişilebilirlik kurulumunun temel bir biçimini göstermektedir:

Bu altyapı, statik bir IP adresine bağlı birkaç yük dengeleyiciye (biri aktif, diğerleri pasif) sahiptir. Durum gerektirdiğinde bu IP adresi farklı bir sunucuya yeniden atanabilir. Kullanıcı isteği, harici IP adresi üzerinden o sırada aktif olan yük dengeleyiciye ulaşır. Eğer yük dengeleyici o sırada çevrimdışıysa, hata tolerans (failsafe) mekanizması durumunu algılayacak ve IP adresini pasif sunucu(lar)ya yeniden atayacaktır.
Sonuç
Yük dengelemenin temel mantığını kavramak ve HAProxy'nin sisteminizin yük dengeleme ihtiyaçlarını karşılayabileceği bazı yollar hakkında bilgi sahibi olmak, 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. Ayrıca şu eğitimimize de göz atabilirsiniz: Nginx HTTP Proxying, Yük Dengeleme, Arabelleğe Alma ve Önbelleğe Alma: Genel Bir Bakış Nginx'in yük dengeleme özellikleri hakkında daha fazla bilgi edinmek için.
Keyifli Çalışmalar!



Yorumlar
Henüz yorum yapılmamış. İlk siz olun.