HAProxy'yi CentOS 8'de Nginx için Yük Dengeleyici Olarak Kurma


Maksimum web uygulaması kullanılabilirliği, ölçeklenebilirlik ve yüksek performans sağlamak için, sunucu kümeleme ve yük dengeleme gibi yedeklilik sağlayan teknolojilerin uygulanması artık yaygındır. Örneğin, tümü aynı uygulamaları çalıştıran bir sunucu kümesi oluşturmak ve ardından trafiği dağıtmak için yük dengeleyicisini/yük dengeleyicilerini önlerine dağıtmak.

HAProxy, açık kaynaklı, güçlü, yüksek performanslı, güvenilir, güvenli ve yaygın olarak kullanılan, yüksek kullanılabilirliğe sahip bir TCP/HTTP yük dengeleyici, proxy sunucusu ve SSL/TLS sonlandırıcıdır. çok yüksek trafikli web siteleri. Linux, Solaris, FreeBSD, OpenBSD'nin yanı sıra AIX işletim sistemlerinde de güvenilir bir şekilde çalışır.

Bu kılavuz, NGINX web sunucularından oluşan bir kümedeki trafiği kontrol etmek için CentOS 8'de HAProxy ile özel bir yüksek kullanılabilirliğe sahip yük dengeleyicinin nasıl kurulacağını gösterir. Ayrıca HAProxy'de SSL/TLS sonlandırmasının nasıl yapılandırılacağı da gösterilmektedir.

Önkoşullar:

Minimum CentOS 8 kurulumuna sahip toplam 4 sunucu.

Test Ortamı Kurulumu

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

Adım 1: İstemci Makinelerde Nginx HTTP Sunucusunu Kurma

1. Tüm CentOS 8 istemci makinelerinizde oturum açın ve gösterildiği gibi dnf paket yöneticisini kullanarak Nginx web sunucusunu yükleyin.

dnf install Nginx

2. Ardından Nginx hizmetini başlatın, şimdilik sistem açılışında otomatik olarak başlamasını etkinleştirin ve systemctl komutunu kullanarak durumunu kontrol ederek çalışır durumda olduğunu doğrulayın. komutlar (bunu tüm istemci makinelerde yapın).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Ayrıca, güvenlik duvarı hizmeti tüm istemci makinelerde çalışıyorsa (systemctl start güvenlik duvarını çalıştırarak bunu kontrol edebilirsiniz), HTTP ve 'yi eklemeniz gerekir. Yük dengeleyiciden gelen isteklerin güvenlik duvarı üzerinden Nginx web sunucularına geçmesine izin vermek için güvenlik duvarı yapılandırmasındaki HTTPS hizmetleri. Daha sonra yeni değişiklikleri uygulamak için güvenlik duvarı hizmetini yeniden yükleyin (bunu tüm istemci makinelerde yapın).

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. Ardından, yerel makinelerinizde bir web tarayıcısı açın ve Nginx kurulumunun düzgün çalışıp çalışmadığını test edin. Gezinmek için istemci IP'lerini kullanın. Nginx test sayfasını gördüğünüzde bu, istemci makinede kurulu web sunucusunun düzgün çalıştığı anlamına gelir.

5. Daha sonra, istemci makinelerde daha sonra HAProxy kurulumunu test etmek için kullanacağımız test sayfaları oluşturmamız gerekiyor.

----------- Web Server #1 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

Adım 2: HAProxy Sunucusunu CentOS 8'e Kurmak ve Yapılandırmak

6. Şimdi aşağıdaki komutu çalıştırarak HAProxy paketini HAProxy sunucusuna yükleyin.

dnf install haproxy

7. Ardından, HAProxy hizmetini başlatın, sistem önyüklemesinde otomatik olarak başlatılmasını etkinleştirin ve durumunu doğrulayın.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Şimdi aşağıdaki yapılandırma dosyasını kullanarak HAProxy'yi yapılandıracağız.

vi /etc/haproxy/haproxy.cfg

Yapılandırma dosyası dört ana bölüme ayrılmıştır.

  • genel ayarlar – süreç genelindeki parametreleri ayarlar.
  • varsayılanlar – bu bölüm, bildirimini takiben diğer tüm bölümler için varsayılan parametreleri ayarlar.
  • ön uç – bu bölümde istemci bağlantılarını kabul eden bir dizi dinleme yuvası açıklanmaktadır.
  • Arka uç – bu bölüm, proxy'nin gelen bağlantıları iletmek için bağlanacağı bir dizi sunucuyu açıklar.

Genel ayarlar ve varsayılanlar altındaki seçenekleri anlamak için HAProxy belgelerini okuyun (bağlantı makalenin sonunda verilmiştir). Bu kılavuz için varsayılanları kullanacağız.

HAProxy Günlüğünü Ayarlama

9. HAProxy bir kez dağıtıldığında BT altyapınızda önemli bir rol oynayacaktır; dolayısıyla bunun için günlük kaydını yapılandırmak temel bir gereksinimdir; bu, arka uç web sunucularınıza yapılan her bağlantı hakkında bilgi edinmenize olanak tanır.

log parametresi (aşağıdaki ekran görüntüsünde vurgulanmıştır), günlük iletilerini alacak genel bir Syslog sunucusunu (CentOS'ta varsayılan rsyslog gibi) bildirir. Burada birden fazla sunucu bildirilebilir.

Varsayılan yapılandırma localhost'u (127.0.0.1) işaret eder ve local2, altındaki HAProxy günlük mesajlarını tanımlamak için kullanılan varsayılan tesis kodudur. rsyslog.

10. Daha sonra, rsyslog sunucusuna HAProxy günlük mesajlarını nasıl alıp işleyeceğini söylemeniz gerekir. Rsyslog yapılandırma dosyasını /etc/rsyslog.conf'a açın veya /etc/rsyslog.d dizini içinde yeni bir dosya oluşturun, örneğin /etc/rsyslog .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Varsayılan 514 bağlantı noktasında UDP ile günlük toplamak için aşağıdaki yapılandırmayı kopyalayıp yapıştırın.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Ayrıca rsyslog'a önem derecesine göre iki ayrı günlük dosyasına yazması talimatını vermek için bu satırları ekleyin; burada local2, yukarıdaki HAProxy yapılandırmasında tanımlanan tesis kodudur.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. Dosyayı kaydedin ve kapatın. Daha sonra son değişiklikleri uygulamak için rsyslog hizmetini yeniden başlatın.

systemctl restart rsyslog

HAProxy Ön Uç ve Arka Uçlarını Yapılandırma

12. Bu bölümde ön uç ve arka uç proxy'lerin nasıl yapılandırılacağını göstereceğiz. HAProxy yapılandırma dosyasına geri dönün ve varsayılan ön uç ve arka uç bölümlerini aşağıdaki gibi değiştirin. Her parametrenin ayrıntılı bir açıklamasına girmeyeceğiz; her zaman resmi belgelere başvurabilirsiniz.

Aşağıdaki yapılandırma, HAProxy İstatistikleri sayfasını sunmak için kullanılan bir dinleme bölümünü tanımlar. bind parametresi, bir dinleyiciyi belirli bir IP adresine (bu durumda tümü için *) ve bağlantı noktasına (9000 ) atar. ).

İstatistikler etkin ayarı, URI /stats (ör. http://server_ip:9000/stats) kullanılarak erişilecek olan istatistik sayfasını etkinleştirir. .

İstatistik auth ayarı, sayfaya erişirken temel bir kimlik doğrulama eklemek için kullanılır (haproxy ve Lostp@1ss yerine kullanıcı adınızı ve şifrenizi girin) seçenek).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. Bir sonraki yapılandırmada TL adında bir ön uç bölümü tanımlanır (beğendiğiniz bir adı verebilirsiniz). mode parametresi HAProxy'nin çalıştığı modu tanımlar.

acl (Erişim Kontrol Listesi) parametresi, istekten çıkarılan içeriğe göre karar vermek için kullanılır. Bu örnekte, istek SSL üzerinden yapılmadıysa, düz HTTP olarak kabul edilir.

Daha sonra isteğe bir HTTP üstbilgisi eklemek için http-request set-header ayarı kullanılır. Bu, Nginx'e, ilk isteğin HTTP (veya 80 bağlantı noktası) üzerinden yapıldığı bilgisini vermeye yardımcı olur.

default_backend veya use_backend yönergesi, bu durumda TL_web_servers tarafından başvurulan arka uç sunucularını tanımlar.

Bir istek use_backend veya default_backendtarafından yönlendirilmezse HAProxy'nin "503 Hizmet Kullanılamıyor hatası" döndüreceğini unutmayın. > direktif.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. Ardından, denge ayarının HAProxy'nin bir isteği işlemek için arka uç sunucularını nasıl seçeceğini tanımladığı bir arka uç bölümü tanımlamamız gerekir; kalıcılık yöntemi bu seçimi geçersiz kılar.

Çerez yönergesi çerez tabanlı kalıcılığa olanak sağlar, HAProxy'ye istemciye SERVERID adlı bir çerez göndermesi talimatını verir ve bunu ilk yanıtı veren sunucunun kimliği ile ilişkilendirmek için.

server yönergesi, yukarı akış sunucularını sever_name (örneğin websrv1), server_IP:port biçiminde tanımlamak için kullanılır. ve seçenekler.

Anahtar seçeneklerden biri, HAProxy'ye sunucunun kullanılabilirliğini kontrol etmeye devam etmesini ve istatistik sayfasında rapor vermesini söyleyen kontrol et'tir.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

Aşağıdaki ekran görüntüsünde gösterildiği gibi diğer ön uç ve arka uç bölümlerini yorumlayın. Dosyayı kaydedin ve kapatın.

15. Şimdi yeni değişiklikleri uygulamak için HAProxy hizmetini yeniden başlatın.

systemctl restart haproxy

16. Ardından, HTTP (bağlantı noktası 80) ve HTTPS'nin (bağlantı noktası 433) olduğundan emin olun. Strong>) servisleri güvenlik duvarında istemci isteklerini kabul etmek için aşağıdaki gibi açılır. Ayrıca istatistikler sayfasına erişmek için güvenlik duvarındaki 9000 bağlantı noktasını açın ve güvenlik duvarı ayarlarını yeniden yükleyin.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload

Adım 3: HAProxy Kurulumunu Test Etme ve İstatistikleri Görüntüleme

17. Şimdi HAPrxoy kurulumunu test etme zamanı. Tüm sunuculara eriştiğiniz yerel masaüstü makinede, sahte site alan adını kullanabilmemizi sağlamak için /etc/hosts dosyasına aşağıdaki satırı ekleyin.

10.42.0.247  www.tecmint.lan

18. Ardından bir tarayıcı açın ve sunucu adresini veya site alanını kullanarak gezinin.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. HAProxy istatistik sayfasına erişmek için aşağıdaki adresi kullanın.

http://10.42.0.247:9000/stats

Daha sonra HAProxy konfigürasyon dosyasında tanımladığınız kullanıcı adını ve şifreyi kullanın (stats auth parametresine bakın).

Başarılı bir giriş yaptıktan sonra, sunucularınızın durumunu, mevcut istek oranlarını, yanıt sürelerini ve çok daha fazlasını kapsayan ölçümleri gösteren HAProxy istatistik sayfasına yönlendirileceksiniz.

Renk kodlarının çalışmasına ilişkin durum raporunun nasıl çalıştığını göstermek için arka uç sunuculardan birini yerleştirdik.

Adım 4: Kendinden İmzalı SSL Sertifikası Kullanarak HAProxy'de HTTPS'yi Yapılandırma

20. Bu son bölümde, HAProxy sunucusu ile istemci arasındaki tüm iletişimin güvenliğini sağlamak için SSL/TLS'nin nasıl yapılandırılacağını göstereceğiz. HAProxy dört ana HTTPS yapılandırma modunu destekler, ancak bu kılavuzda SSL/TLS boşaltmayı kullanacağız.

SSL/TLS boşaltma modunda, HAProxy istemci tarafındaki trafiğin şifresini çözer ve arka uç sunucularına net bir trafikle bağlanır.

Gösterildiği gibi sertifika ve anahtarı oluşturarak başlayacağız (ekran görüntüsünde vurgulandığı gibi, sertifika oluşturma sırasında soruları şirket ayrıntılarınıza göre yanıtlayın).

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l

21. Ardından, HAProxy yapılandırma dosyasını (/etc/haproxy/haproxy.cfg) açın ve ön uç bölümünü düzenleyin.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

Dosyayı kaydedin ve kapatın.

22. Daha sonra yeni değişiklikleri uygulamak için HAProxy hizmetini yeniden başlatın.

systemctl restart haproxy.service

23. Ardından, bir web tarayıcısı açın ve siteye bir kez daha erişmeyi deneyin. Tarayıcı, kendinden imzalı sertifika nedeniyle bir hata gösterecektir; devam etmek için Gelişmiş'i tıklayın.

Şimdilik bu kadar! Her web uygulamasının kendine ait gereksinimleri vardır; yük dengelemeyi BT altyapınıza ve uygulamanızın gereksinimlerine uyacak şekilde tasarlamanız ve yapılandırmanız gerekir.

Bu kılavuzda kullanılan yapılandırma seçeneklerinden bazıları ve genel olarak HAProxy'nin nasıl kullanılacağı hakkında daha fazla bilgi edinmek için resmi HAProxy topluluk sürümü belgelerine veya HAProxy kurumsal sürüm belgelerine bakın. Her türlü soru veya düşüncenizi aşağıdaki geri bildirim formunu kullanarak iletebilirsiniz.