Bu yazımızda bir web sunucunun HTTP Load Balancer olarak
nasıl konfigüre edileceğini ele alacağız. Buradaki amacımız yük altında kalan
sunucularımızın hizmet kesintisine uğramasını elimizden geldiğince engellemek
olacak.
Konfigürasyonları son yıllarda oldukça popüler olan Nginx
web sunucular üzerinde gerçekleştireceğiz. Yazıda bahsedeceğimiz LB
ayarları temel düzeyde konfigürasyonları
içerecek. Benzer ayarlar Apache web sunucular üzerinde de
gerçekleştirilebilir.
İşletim sistemi olarak Ubuntu Server kullanılmıştır.
Senaryomuzu özetleyecek olursak;
Toplamda 3 adet Nginx web sunucu. Bunlardan 1 tanesi LB
diğer ikisi bu LB arkasında çalışan web sunucular olarak ayarlanacak.
Nginx LB metodlarından round robin adı verilen metodu
kullanarak işlemlerimizi gerçekleştireceğiz.
Konfigürasyon Adımları
Öncelikle tüm sunucularımıza Nginx yükleyelim.
apt-get install nginx –y
Kurduğumuz sunuculara IP adreslerini atayalım. Ben sırasıyla
192.168.2.222, 192.168.2.223, 192.168.2.224 IP adreslerini atıyorum. Yapılan
işlemin daha iyi anlaşılabilmesi için Web sunucuların isimlerini web01 ve web02
olarak değiştiriyorum. Ayrıca html sayfalarına da bu isimleri ekleyerek
gönderilen isteklerin hangi sunucuya gittiğinin anlaşılmasını kolaylaştırmaya
çalıştım.
Default kurulumda html ayarları için aşağıdaki yol
izlenebilir;
Load Balancer Ayarı
Yazımızın başında bahsettiğim gibi burada round-robin metodu
kullanarak bir yük dengeleme yapmaya çalışacağız. Round-robin metodu kısaca
isteklerin belirtilen IP adreslerine eşit veya sizin belirlediğiniz yüke göre
dağıltılmasını sağlayan metoda verilen isimdir.
Örneğin bizim senaryomuzda ilk istek 223 adresine giderken
ikinci istek 224 adresine gidecek ve HTTP üzerinden gelen isteklerin dağılımı
sağlanacak. Bu konfigürasyon için aşağıdaki adımlar izlenebilir;
Konfigürasyon dosyasına /etc/nginx/sites-available altından
erişebiliriz.
Buradaki default dosyası herhangi bir text editör ile
açıyoruz. Sadece senaryomuza uygun olan bilgileri girmek için ayarlara başlamadan önce bu dosyada
bulunan bilgileri temizledim.
Aşağıdaki resimde görüldüğü gibi öncelikle senaryomuz için isteklerin
dağıtılacağı sunucu adreslerimizi bir blog halinde tanımlıyoruz. Bu işlem için
“upstream” parametresi ve bu parametreden sonra gelecek bir isim belirtmemiz
gerekiyor.
Sunucu bloglarımızı tanımladıktan sonra isteklerin hangi
port üzerinden hangi dizine gideceğini aşağıdaki gibi server blogu altına
tanımlıyoruz. Burada gelen tüm isteklerin daha önce belirlediğimiz sunuculara
dağılması için “proxy_pass” parametresi ve bir önceki ayarda tanımladığımız
ismi başına “http” koyarak buraya ekliyoruz.
İşlemleri tamamladıktan sonra konfigürasyonu dosyasını
kaydedip editörden çıkıyoruz.
Yaptığımız konfigürasyonun aktif hale gelmesi için aşağıdaki komutu
kullanabiliriz. Eğer bir hata olursa nginx servisi bu komut çalıştırılırken
size bilgi verecektir.
İşlem başarı ile gerçekleştiyse şimdi yapılan
konfigürasyonlarımızı test edebiliriz.
Ben LB olarak ayarladığım sunucum üzerinden http istekleri
oluşturarak test ettim. Bu işlem için “curl” komutu kullanılabiliriz.
Aşağıda görüldüğü IP adresine istek gönderdiğimde yazının
başında içeriğini düzenlediğimiz Web01 sunucusu yanıt veriyor.
Erişimi teyit etmek için erişim logları da kontrol
edebiliriz. Aşağıda görüldüğü gibi web01 sunucusuna gelen istek 192.168.2.222
LB olarak konfigüre ettiğimiz sunucudan gelmiş durumda.
Web01 isimli sunucumuza gelen isteği teyit ettikten sonra
aynı IP adresine bir istek daha yapıyoruz.
Bu sefer isteğimize cevap Web02 sunucumuzdan geldi. Şimdi
bir önceki istekte olduğu gibi erişim loglarını kontrol edelim.
Sunucumuza gelen istek web01 sunucusunda olduğu gibi
192.168.2.222 üzerinden gelmektedir.
Sürekli oluşturulan http isteklerinde loglar aşağıdaki gibi
görünecektir. Gönderilen istekler bu şekilde iki sunucu üzerine dağıtılacak ve web
sunucularınıza binen yük dengelenmiş olacaktır.