HAProxy Yeni Başlayanlar İçin Eğitim

Haproxy Yeni Baslayanlar Icin Egitim



Uygulamanız ölçeklendikçe daha fazla trafiği yönetmek için daha fazla sunucu ekleme ihtiyacı ortaya çıkar. Uygulamanız ne kadar çok trafik alırsa, sunucu aşırı yüklendiğinde kesinti yaşama ihtimali de o kadar yüksek olur. Ancak sunucunuzdaki yükü dengelemek için trafiğin nasıl yönetileceğini tanımlamanıza olanak tanıyan HAProxy gibi araçlar vardır. Buradaki fikir hiçbir sunucunun aşırı yüklenmemesini sağlamaktır. High Availability Proxy, TCP/HTTP uygulamaları için ters proxy görevi görürken güvenilir bir yük dengeleme sunmak üzere tasarlanmış açık kaynaklı bir yazılımdır.

HAProxy herhangi bir sunucunun aşırı yüklenmesini azaltmak için çalışır ve bunu, hiçbir sunucunun aşırı yüklenmemesini, ancak diğer sunucuların kullanılabilir olmasını sağlamak için trafiği dağıtarak başarır. Instagram gibi bir platform, saniyede gönderilen istekler nedeniyle çok büyük bir trafiğe sahiptir, dolayısıyla aşırı yüklenmeyi önlemek için sunucuların ön ucunu, arka ucunu ve dinleyicilerini tanımlamak için HAProxy'yi kullanma ihtiyacı vardır.

Neden HAProxy'yi Kullanmalı?

HAProxy'nin kurulumunu ve konfigürasyonunu öğrenmeden önce sunduğu özelliklerden dolayı ona neden ihtiyaç duyduğumuzu anlamalısınız. HAProxy'nin temel özellikleri şunlardır:







  1. Yük dengeleme - HAProxy ile tek bir sunucunun aşırı yüklenmesini önlemek için trafiği farklı sunuculara rahatça dağıtabilirsiniz. Bu şekilde uygulamanız herhangi bir kesinti sorunuyla karşılaşmaz ve daha hızlı yanıt verme, güvenilirlik ve kullanılabilirlik elde etmiş olursunuz.
  2. Günlüğe Kaydetme ve İzleme – Sorunları gidermenize yardımcı olmak için sunucularınız için ayrıntılı izleme günlükleri alacaksınız. Ayrıca HAProxy'de yük dengeleyiciniz için gerçek zamanlı performans analizlerini alabileceğiniz bir istatistik sayfası vardır.
  3. Sağlık kontrolleri - Sunucularınızın bile durumlarını belirlemek için bir sağlık kontrolüne ihtiyacı vardır. HAProxy, güvenilirliğini artırmak amacıyla sunucunuzun durumunu öğrenmek için sık sık sağlık kontrolleri gerçekleştirir. Sağlıksız bir sunucu tespit edilirse trafiği başka bir sunucuya yönlendirir.
  4. Ters Proxy – Güvenliği arttırmanın bir yolu iç yapıyı gizlemektir. Neyse ki HAProxy, istemcilerden gelen trafiği almanızı ve bunları uygun sunuculara yönlendirmenizi sağlar. Bu şekilde iç yapınız bilgisayar korsanının gözünden gizlenir.
  5. ACL'ler (Erişim Kontrol Listeleri) – HAProxy ile yollar, başlıklar ve IP adresleri gibi çeşitli kriterleri kullanarak trafik yönlendirmesinin nasıl gerçekleşmesi gerektiğini tanımlayabilirsiniz. Böylece trafiğinize özel bir yönlendirme mantığı tanımlamak kolaylaşır.
  6. SSL Sonlandırma – Varsayılan olarak, SSL/TLS'nin yükü arka uç sunucuları tarafından boşaltılır ve bu da performansın düşmesine neden olur. Ancak HAProxy ile SSL/TLS sonlandırması yük dengeleyicide gerçekleşir ve görev arka uç sunuculara aktarılır.

HAProxy'yi yükleme

Şu ana kadar HAProxy'nin ne olduğunu tanımladık ve uygulamanız için ona neden ihtiyaç duyduğunuzu anlamanıza yardımcı olacak sunduğu özellikleri tartıştık. Bir sonraki adım, sisteminize kurarak nasıl başlayacağınızı anlamaktır.



Ubuntu veya Debian sistemlerini çalıştırıyorsanız HAProxy, APT paket yöneticisinden kurulabilir. Aşağıdaki komutu çalıştırın:



$ sudo uygun güncelleme
$ sudo apt haproxy'yi yükle

Benzer şekilde, RHEL tabanlı sistemler veya CentOS kullanıyorsanız HAProxy'ye 'yum' paket yöneticisinden ulaşabilirsiniz. Aşağıdaki komutları çalıştırın:





$ sudo yum güncellemesi
$ sudo yum haproxy'yi yükle

Bizim durumumuzda Ubuntu kullanıyoruz. Böylece komutumuz şu şekilde olur:



Daha sonra HAProxy'yi başarıyla kurmayı başardığımızdan emin olmak için sürümünü kontrol edebiliriz.

$ haproxy --version

HAProxy Nasıl Yapılandırılır

HAProxy yüklendiğinde artık yapılandırma dosyasını açabilirsiniz ( / vb/haproxy/haproxy.cfg) ve yük dengeleyiciniz için kullanmak istediğiniz ayarları tanımlayın.

Yapılandırma dosyasını nano veya vim gibi bir düzenleyici kullanarak açın.

$ sudo nano /etc/haproxy/haproxy.cfg

Aşağıdakine benzer bir yapılandırma dosyası alırsınız:

Yapılandırma dosyasından iki ana bölümle geldiğini fark edeceksiniz:

  1. küresel – Dosyanın ilk bölümüdür ve değerleri değiştirilmemelidir. HAProxy'nin nasıl çalıştığını tanımlayan işlem ayarlarını içerir. Örneğin, günlüğe kaydetme ayrıntılarını ve HAProxy işlevlerini yürütebilecek grupları veya kullanıcıları tanımlar. Bu yapılandırma dosyasında yalnızca bir genel bölüme sahip olabileceğinizi ve değerlerinin değişmeden kalması gerektiğini unutmayın.
  1. varsayılanlar – Bu bölüm düğümler için varsayılan değerleri içerir. Örneğin, bu bölümde HAProxy'niz için zaman aşımlarını veya çalışma modunu ekleyebilirsiniz. Ayrıca HAProxy yapılandırma dosyanızda çok sayıda varsayılan bölümün bulunması mümkündür.

İşte bir 'Varsayılanlar' bölümünün örneği:

Verilen görüntüde mod, HAProxy'nizin gelen istekleri nasıl ele alacağını tanımlar. Modu HTTP veya TCP olarak ayarlayabilirsiniz. Zaman aşımı süresi ise HAProxy'nin ne kadar beklemesi gerektiğini belirtir. Örneğin, zaman aşımı bağlantısı, bir arka uç bağlantısı yapılmadan önce beklenecek süredir. Zaman aşımı istemcisi, HAProxy'nin bir istemcinin verileri göndermesi için ne kadar beklemesi gerektiğidir. Zaman aşımı sunucusu, uygun sunucunun istemciye iletilecek verileri göndermesini bekleyen süredir. Varsayılan değerleri nasıl tanımladığınız, uygulamanızın yanıt süresini artırmada çok önemlidir.

Yük dengeleyicinizin beklendiği gibi çalışması için tanımlamanız gereken üç bölüm daha var.

  1. başlangıç ​​aşaması - Bu bölüm, istemcilerinizin bağlantı kurmak için kullanmasını istediğiniz IP adreslerini içerir.
  2. arka uç – Ön uç bölümünde tanımlandığı şekilde istekleri işleyen sunucu havuzlarını gösterir.
  3. Dinlemek - Belirli bir sunucu grubunu yönlendirmek istediğinizde art arda kullanılır. Bu bölüm ön uç ve arka ucun görevlerini birleştirir.

Bir Örnek Verelim

Bu örnekte, localhost'u belirli bir bağlantı noktasıyla kullanacak ön ucu tanımlıyoruz. Daha sonra, bunu localhost'u çalıştıran arka uca bağlarız ve ardından yük dengeleme için her şeyin beklendiği gibi çalışıp çalışmadığını test etmek için bir Python sunucusu çalıştırırız. Verilen adımları izleyin.

Adım 1: Varsayılanlar Bölümünü Yapılandırma

“Varsayılanlar” kısmında düğümler arasında paylaşılacak değerleri ayarlıyoruz. Bizim durumumuz için modu HTTP olarak ayarladık ve istemci ve sunucu için zaman aşımlarını ayarladık. İhtiyaçlarınıza göre süreyi ayarlayabilirsiniz.

Tüm bu düzenlemelerin “/etc/haproxy/haproxy.cfg” adresinde bulunan HAProxy yapılandırmasında olduğunu unutmayın. Varsayılanlar bölümü yapılandırıldıktan sonra ön ucu tanımlayalım.

Adım 2: Ön Uç Bölümünü Yapılandırma

Ön uç bölümünde, uygulamanın veya web sitesinin müşteriler tarafından çevrimiçi olarak nasıl erişilmesini istediğimizi tanımlıyoruz. Uygulamanın IP adreslerini veriyoruz. Ancak bu durumda localhost ile çalışıyoruz. Dolayısıyla IP adresimiz 127.0.0.1 yedek adresidir ve bağlantıları 80 portu üzerinden kabul etmek istiyoruz.

Belirtilen porttaki IP adresi için dinleyici görevi gören “bind” anahtar kelimesini eklemelisiniz. Tanımladığınız IP adresi ve bağlantı noktası, yük dengeleyicinin gelen istekleri kabul etmek için kullandığı adrestir.

Config dosyanıza önceki satırları ekledikten sonra “haproxy.service”i aşağıdaki komutla yeniden başlatmalıyız:

$ sudo systemctl haproxy'yi yeniden başlat

Bu noktada “curl” komutunu kullanarak istekleri web sitemize göndermeyi deneyebiliriz. Komutu çalıştırın ve hedef IP adresini ekleyin.

$ curl

HAProxy'mizin backend'inin nasıl olacağını henüz tanımlamadığımız için aşağıda gösterildiği gibi 503 hatası alıyoruz. Yük dengeleyici istekleri almayı başarmış olsa da şu anda bu istekleri işleyecek bir sunucu mevcut olmadığından hata oluştu.

3. Adım: Arka Ucu Yapılandırma

Arka uç bölümü, gelen istekleri işleyecek sunucuları tanımladığımız yerdir. Yük dengeleyici, hiçbir sunucunun aşırı yüklenmemesini sağlamak için gelen istekleri nasıl dağıtması gerektiğini bilmek için bu bölüme başvurur.

Daha önce aldığımız 503 hatası, istekleri işleyecek bir arka ucumuzun olmamasıydı. İstekleri işlemek için “default_backend”i tanımlayarak başlayalım. Bunu ön uç bölümünde tanımlarsınız. Bu durum için buna “linux_backend” adını verdik.

Daha sonra, ön uç bölümünde tanımlananla aynı ada sahip bir arka uç bölümü oluşturun. Daha sonra “sunucu” anahtar kelimesini ve ardından sunucunuzun adını ve IP adresini kullanmalısınız. Aşağıdaki resimde “linuxhint1” sunucusunu IP 127.0.0.1 ve port 8001'i kullanarak tanımladığımızı göstermektedir:

Bir arka uç sunucu havuzunuz olabilir, ancak bu durum için yalnızca bir tane tanımladık. Dosyayı kaydettiğinizden emin olun. HAProxy hizmetini yeniden başlatmalıyız.

Oluşturulan HAProxy yük dengeleyiciyi test etmek için, belirttiğimiz IP adresini kullanarak arka uç bağlantı noktalarını bağlamak üzere Python3 kullanarak bir web sunucusu oluşturuyoruz. Komutu şu şekilde çalıştırıyoruz:

$ python3 -m http.sunucu 8001 --bind 127.0.0.1

Değerleri IP adresiniz ve bağlamak istediğiniz bağlantı noktasıyla eşleşecek şekilde değiştirdiğinizden emin olun. Web sunucusunun nasıl oluşturulduğuna ve gelen istekleri nasıl dinlediğine dikkat edin.

Başka bir terminalde “curl” komutunu kullanarak sunucuya istek gönderelim.

$ curl

Daha önce isteği yerine getirecek hiçbir sunucunun bulunmadığını gösteren 503 hatasını aldığımızdan farklı olarak, bu sefer HAProxy yük dengeleyicimizin çalıştığını doğrulayan bir çıktı alıyoruz.

Web sunucusunu oluşturduğumuz önceki terminale geri dönerseniz, HAProxy'nin isteği aldığını ve onu arka uç bölümümüzde tanımlı sunucuya göndererek işlediğini doğrulayan 200 başarı çıktısını aldığımızı göreceksiniz.

Web siteniz veya uygulamanız için basit bir HAProxy'yi bu şekilde ayarlayabilirsiniz.

Kurallarla Çalışmak

Başlangıç ​​seviyesindeki bu HAProxy eğitimine geçmeden önce, isteklerin yük dengeleyici tarafından nasıl ele alınacağına rehberlik edecek kuralları nasıl tanımlayabileceğiniz hakkında hızlı bir şekilde konuşalım.

Önceki adımların aynısını takip ederek varsayılan bölümümüzü olduğu gibi bırakalım ve ön uç bölümünde farklı IP adresleri tanımlayalım. Aynı IP adresini bağlarız ancak farklı bağlantı noktalarından gelen bağlantıları kabul ederiz.

Ayrıca isteklerin geldiği porta göre kullanacağımız farklı bir sunucu havuzu olan “default_backend” ve bir başka “use_backend”imiz daha var. Aşağıdaki yapılandırmada, 81 numaralı bağlantı noktası üzerinden yapılan tüm istekler “Linux2_backend”deki sunucular tarafından işlenir. Diğer tüm istekler 'default_backend' tarafından işlenir.

Daha sonra ön uçta tanımlandığı gibi arka uç bölümlerini oluşturuyoruz. Her arka uç için, istekleri işlemek üzere kullanmayı belirlediğimiz farklı bir sunucumuz olduğunu unutmayın.

HAProxy hizmetini hızla yeniden başlatın.

Python3 kullanarak web sunucusunu oluşturalım ve istekleri alternatif arka uç sunucusu olan 8002 numaralı bağlantı noktasına bağlayalım.

İstekleri gönderirken, yük dengeleyicinin istekleri varsayılan sunucu olmayan alternatif sunucuya göndermesini tetiklemek için bağlantı noktasını 81 olarak belirtiriz.

Web sunucumuzu tekrar kontrol ettiğimizde istekleri alıp işlemeyi başardığını ve 200 (başarılı) yanıtı verdiğini görüyoruz.

Yük dengeleyicinizin istekleri nasıl alacağına ve işleyeceğine rehberlik edecek kuralları bu şekilde tanımlayabilirsiniz.

Çözüm

HAProxy, TCP/HTTP uygulamaları için yük dengeleme için ideal bir çözümdür. Kurulduktan sonra, yük dengeleyicinizin nasıl çalışacağına rehberlik etmek üzere varsayılanları, ön uç ve arka uç bölümlerini tanımlamak için yapılandırma dosyasını rahatça düzenleyebilirsiniz. Bu yazı yeni başlayanlar için HAProxy rehberidir. HAProxy'yi ve özelliklerini tanımlayarak başladı. Daha sonra, HAProxy'nin nasıl yapılandırılacağı anlaşıldı ve HAProxy'nin yük dengeleyici olarak nasıl kullanılacağına dair bir örnek verilerek sonuçlandırıldı.