Linux'ta Nginx'i HTTP Yük Dengeleyici Olarak Kullanma


Yedekleme için birden fazla uygulama sunucusunun ayarlanması söz konusu olduğunda yük dengeleme, gelen hizmet isteklerini veya ağ trafiğini bir grup arka uç sunucuya verimli bir şekilde dağıtmak için yaygın olarak kullanılan bir mekanizmadır.

Yük dengelemenin, yedeklilik yoluyla artan uygulama kullanılabilirliği, artan güvenilirlik ve ölçeklenebilirlik (trafik arttığında karışıma daha fazla sunucu eklenebilir) gibi çeşitli avantajları vardır. Aynı zamanda gelişmiş uygulama performansı ve diğer birçok faydayı da beraberinde getirir.

Önerilen Okuma: Nginx Web Sunucusunun Güvenliğini Sağlama, Sağlamlaştırma ve Performansını Artırma İçin Temel Kılavuz

Nginx, gelen ağ trafiğini ve iş yükünü bir grup uygulama sunucusu arasında dağıtmak için etkili bir HTTP yük dengeleyici olarak dağıtılabilir; her durumda yanıt seçilen sunucudan uygun müşteri.

Nginx tarafından desteklenen yük dengeleme yöntemleri şunlardır:

  • round-robin – istekleri uygulama sunucularına dönüşümlü olarak dağıtır. Herhangi bir yöntem belirtilmediğinde varsayılan olarak kullanılır,
  • en az bağlantılı – sonraki isteği daha az meşgul bir sunucuya (en az sayıda etkin bağlantıya sahip sunucu) atar,
  • ip-hash – istemcinin IP adresine göre bir sonraki istek için hangi sunucunun seçilmesi gerektiğini belirlemek için karma işlevinin kullanıldığı yer. Bu yöntem oturumun devamlılığına olanak tanır (bir istemciyi belirli bir uygulama sunucusuna bağlar).

Ayrıca, Nginx yük dengeleme algoritmalarını daha ileri düzeyde etkilemek için sunucu ağırlıklarını kullanabilirsiniz. Nginx ayrıca bir sunucunun yanıtı bir hatayla başarısız olursa sunucuyu başarısız olarak işaretlemek için durum kontrollerini de destekler (yapılandırılabilir bir süre için varsayılan 10 saniyedir) ve böylece sunucunun seçilmesini önler sonraki gelen istekler için bir süreliğine sunucu.

Bu pratik kılavuz, her biri aynı uygulamanın örneğine sahip iki sunucu arasında gelen istemci isteklerini dağıtmak için Nginx'in bir HTTP yük dengeleyici olarak nasıl kullanılacağını gösterir.

Test amacıyla, her uygulama örneği, üzerinde çalıştığı sunucuyu belirtmek üzere (kullanıcı arayüzünde) etiketlenir.

Test Ortamı Kurulumu

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

Her uygulama sunucusunda, her uygulama örneğine tecmintapp.lan etki alanı kullanılarak erişilecek şekilde yapılandırılmıştır. Bunun tam kayıtlı bir alan adı olduğunu varsayarsak, DNS ayarlarına aşağıdakileri ekleyeceğiz.

A Record   		@   		192.168.58.7

Bu kayıt, istemci isteklerine alanın nereye yönlendirilmesi gerektiğini (bu durumda yük dengeleyiciye) (192.168.58.7) bildirir. DNS A kayıtları yalnızca IPv4 değerlerini kabul eder. Alternatif olarak, istemci makinelerdeki /etc/hosts dosyası da aşağıdaki girişle test amacıyla kullanılabilir.

192.168.58.7  	tecmintapp.lan

Linux'ta Nginx Yük Dengelemeyi Ayarlama

Nginx yük dengelemeyi kurmadan önce, dağıtımınızın varsayılan paket yöneticisini gösterildiği gibi kullanarak sunucunuza Nginx'i yüklemelisiniz.

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

Daha sonra /etc/nginx/conf.d/loadbalancer.conf adında bir sunucu blok dosyası oluşturun (istediğiniz bir adı verin).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

Daha sonra aşağıdaki konfigürasyonu kopyalayıp yapıştırın. Bu yapılandırma, herhangi bir yük dengeleme yöntemi tanımlanmadığından varsayılan olarak hepsini bir kez deneme şeklindedir.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

Yukarıdaki yapılandırmada, proxy_pass yönergesi (bu durumda / gibi bir konum içinde belirtilmesi gereken) kullanılarak başvurulan HTTP proxy sunucularına bir istek iletmek için kullanılır. yukarı akış yönergesindeki kelime arka ucu (bir grup sunucuyu tanımlamak için kullanılır). Ayrıca istekler, ağırlıklı bir döngüsel dengeleme mekanizması kullanılarak sunucular arasında dağıtılacaktır.

En az bağlantı mekanizmasını kullanmak için aşağıdaki yapılandırmayı kullanın

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

ip_hash oturum kalıcılık mekanizmasını etkinleştirmek için şunu kullanın:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Sunucu ağırlıklarını kullanarak da yük dengeleme kararını etkileyebilirsiniz. Aşağıdaki yapılandırmayı kullanarak, istemcilerden altı istek varsa, 192.168.58.5 uygulama sunucusuna 4 istek atanacak ve 2 istek 192.168.58.8'e gidecek.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Dosyayı kaydedin ve çıkın. Ardından, son değişiklikleri ekledikten sonra aşağıdaki komutu çalıştırarak Nginx yapılandırma yapısının doğru olduğundan emin olun.

sudo nginx -t

Yapılandırma uygunsa değişiklikleri uygulamak için Nginx hizmetini yeniden başlatın ve etkinleştirin.

sudo systemctl restart nginx
sudo systemctl enable nginx

Linux'ta Nginx Yük Dengelemeyi Test Etme

Nginx yük dengelemesini test etmek için bir web tarayıcısı açın ve gezinmek için aşağıdaki adresi kullanın.

http://tecmintapp.lan

Web sitesi arayüzü yüklendikten sonra yüklenen uygulama örneğini not edin. Daha sonra sayfayı sürekli yenileyin. Bir noktada, uygulamanın yük dengelemeyi belirten ikinci sunucudan yüklenmesi gerekir.

Linux'ta Nginx'i HTTP yük dengeleyici olarak nasıl kuracağınızı az önce öğrendiniz. Aşağıdaki geri bildirim formunu kullanarak bu kılavuz ve özellikle Nginx'i yük dengeleyici olarak kullanma hakkındaki düşüncelerinizi öğrenmek istiyoruz. Daha fazla bilgi için Nginx'i HTTP yük dengeleyici olarak kullanma hakkında Nginx belgelerine bakın.