Yük dağıtıcıların yedekliliği nasıl sağlanır?

Gökhan Şengün
3 min readOct 15, 2018

--

Bu flood’da Load Balancer - Yük Dağıtıcıların yedekliliğini sağlama yöntemlerinden biri olan VRRP - Virtual Router Redundancy Protocol'u kısaca anlatacağım.

Sürekli olarak yük dağıtıcıların web ve uygulama sunucularının yüksek erişilebilirliğini sağlamakta kullanıldığını söyleriz fakat aslında yük dağıtıcılar SPoF - Single Point of Failure riski taşırlar çünkü yük dağıtıcı işlev görmediğinde verilen servis bütünüyle erişilmez olur.

Her yönüyle yüksek erişilebilir bir sistem tasarlanmak isteniyorsa yük dağıtıcılardan başlanarak sisteme dahil olan bütün ağ elemanlarının da hataya karşı dayanıklı yani yedekli çalışması gerekmektedir. Neyse ki bunu sağlamaya yönelik mekanizmalar mevcuttur.

Yük dağıtıcılarda yüksek erişilebilirlik sağlayan mekanizmalardan biri olan VRRP mimarisini daha iyi anlamak için önceki flood'da anlatılan Virtual IP ve ARP kavramlarına aşina olmak gerekmektedir. Virtual IP için https://medium.com/@gokhansengun/f5750feaa530

ARP - Address Resolution Protocol için ise yine aşağıdaki önceki flood'a göz atabilirsiniz. https://medium.com/@gokhansengun/45824b166908

İki yük dağıtıcı ile yüksek erişilebilir bir sistem kurmak için cluster IP’si olarak bu iki yük dağıtıcının IP’sinden farklı bir Virtual IP (Floating IP) kullanılır. İstemciler sisteme Floating IP'den erişirler. Floating IP, Master - Aktif yük dağıtıcıya atanır. Master yük dağıtıcı istemcilerden Floating IP için gelen ARP isteklerine kendi MAC Adresi ile cevap verir böylece trafik Master yük dağıtıcıya gönderilir. Sistemdeki diğer yük dağıtıcı ise Backup - Pasif olarak adlandırılır üzerinden trafik akmaz ancak hazır bekler.

Yukarıda anlatılan durum aşağıdaki şekilde görselleştirilmiştir.

VRRP ile yüksek erişilebilirliği sağlanan ağ elemanları birer Priority numarası ile yapılandırılır. Yüksek erişilebilirliği sağlanan bütün ağ elemanları ulaşılabilir (normal) durumdayken trafik, Priority'si en yüksek olan ağ elemanına yönlendirilecek şekilde aksiyon alınır. Bu sayede ağda aynı işlevi görebilen elemanlardan donanım olarak en güçlü olanının sürekli olarak Master ya da Aktif durumda olması garanti altına alınır. Diğer ağ elemanları ancak Priority'si yüksek ağ elemanları ulaşılabilir değilse kontrolü alabilirler.

Yüksek erişilebilirlik sağlamak adına aynı işlevi görmek üzere bir araya gelen ağ elemanları birbirlerinin sağlık durumlarını VRRP için ayrılmış 224.0.0.18 multicast IP üzerinden test ederler. Master olarak belirlenmiş ağ elemanı multicast paketlere belirli bir süre cevap vermezse Backup ya da Pasif olarak belirlenmiş ağ elemanları birbirlerine multicast paketler göndererek yeni Master'ı seçerler. Sadece iki ağ elemanının olduğu durumda kontrol Backup olarak belirlenen ağ elemanına geçmiş olur.

Master değişimi olduğunda ağda bulunan diğer elemanların Floating IP ya da VIP'in MAC adresinin değişiminden haberdar edilmesi gerekir. Bu noktada Unsolicited ARP veya Gratuitous ARP adı verilen paketler ARP tablolarının güncellenmesi için ağa broadcast edilir.

Son olarak Linux’taki bir VRRP uygulaması olan keepalived programı ile üzerinde nginx kurulu iki sunucuyu yüksek erişilebilir yaparak sistemin nasıl çalıştığını pratik olarak gözlemleyelim. Aşağıda Master ve Backup sunucuların keepalived konfigürasyonu verilmiştir.

Yukarıdaki konfigürasyondan görüleceği üzere Floating IP adresi 172.29.44.200 olarak belirlenmiştir. Master ve Backup olarak belirlenen web sunucuların adresleri de sırasıyla 172.29.44.101 ve 172.29.44.102'dir.

Aşağıdaki ekran görüntüsü ilgili iki web sunucuya ulaşabilen başka bir bilgisayarın ARP tablosunu göstermektedir. Görüleceği üzere 172.29.44.200 Floating IP'nin MAC adresi Priority'si yüksek olan sunucunun MAC adresi ile aynıdır, yani trafik bu sunucuya gelmektedir.

Master'daki nginx durdurulduğunda dışarıdaki bilgisayarın ARP tablosunda meydana gelen değişim gösterilmiştir. Bu kez Floating IP'nin MAC adresi ikinci sunucunun MAC adresi ile eşit hale gelmiştir, böylece Floating IP'ye gelen trafik ikinci sunucuya yönlenecektir.

--

--

Gökhan Şengün

Full stack dad of two and just curious about things. Stories are from my twitter floods @gokhansengun. Main blog is www.gokhansengun.com