Load balance ( yük dengeleme ), web sitemizi ve uygulamamızı ölçeklendirmek, performansını arttırmak ve felaket durumlarına karşı önemi arttırmak açısından en uygulanabilir yollardan bir tanesidir. Nginx’i sunucularınızın kaynak kullanılabilirliğini ve verimliliğini artırmak için basit ama güçlü bir yük dengeleyici olarak yapılandırılabiliriz.
Load balance ayarlarımız öncesinde sunucumuza nginx’i kurmamız gerekiyor. Kurulumu daha önce yapmadıysanız CentOS 8’de Nginx Kurulumu dökümanı ile Nginx’in Centos sunuculara kurulumunu inceleyebilirsiniz.
virtualHost ile Upstream
Nginx kurulu olan sunucumuzda /etc/nginx/conf.d/sanalpro.test.conf config dosyasını aşağıdaki gibi temel ayarlarla basit bir load balancer oluşturma işlemi gerçekleştirebiliriz. Tabi, load balancer tipi ve isteklerimize göre konfigürasyonumuzda pek çok değişiklik yapabiliriz.
upstream remote_servers { server web01.sanalpro.test; server web02.sanalpro.test; server web03.sanalpro.test; } server { listen 80; server_name sanalpro.test www.sanalpro.test; location / { proxy_pass http://remote_servers; } }
Tabi işlemler sonrası nginx’i de yeniden başlatıyoruz.
systemctl restart nginx
Load Balancing Seçenekleri
Config dosyamızda farklı upstream seçenekleri ile load balancerımızı farklı tercihlerimize göre sunuculara yönlendirme yapmasını sağlayabiliriz. Örneğin, en az bağlantı yapılan sunucuya yönlendirme yapması için config dosyamızdaki upstream bölümü aşağıdaki gibi olmalıdır.
upstream remote_servers { least_conn; server web01.sanalpro.test; server web02.sanalpro.test; server web03.sanalpro.test; }
Ağırlıklı ( weight ) olarak belli bir sunucuya erişim sağlanmasını istiyorsanızda aşağıdaki gibi düzenleme yapabiliriz.
upstream remote_servers { server web01.sanalpro.test weight=1; server web02.sanalpro.test weight=2; server web03.sanalpro.test weight=5; }
Kullanıcıların daha önceden ulaştıkları sunuculara tekrar ulaşmasını ve oturum kalıcığı sağlanmasını istiyorsakta ip_hash yöntemini kullanabiliriz.
upstream remote_servers { ip_hash; server web01.sanalpro.test; server web02.sanalpro.test; server web03.sanalpro.test; }