DNS Round Robin: Tarayıcılar çevrimiçi olduğu sürece bir IP'ye bağlı mı?


14

Çoğu tarayıcı, DNS sunucusundan birden fazla A kaydı alırsa nasıl davranır? Bir IP'ye erişilebildiği sürece çubuğu yapıştırın (ve yalnızca IP kapalıyken başka bir IP kullanın)? Yoksa sebepsiz yere sürekli mi değişiyorlar?

Mevcut tarayıcıların çoğunluğu bir IP'ye bağlı kalırsa, DNS-RR benim için basit bir yük devretme çözümü olarak yeterli olacaktır.


1
Sorunuzu doğrudan cevaplayamıyorum, ancak size hem tarayıcı hem de işletim sistemi düzeyinde önbellekleme ile uğraşmanız gerektiğini göstereceğim! İyi eğlenceler :)
SpacemanSpiff


1
@Iain - Harika bağlantı
SpacemanSpiff

Bir arka uç için kaç makineniz var? Aktif-pasif olan 2 makine uygunsa, üçüncü bir IP adresi alın ve fiziksel makineler arasında yük devretmek için kalp atışını kullanın. Alternatif olarak, ultramonkey'in kaynak IP'ye dayanan arka uçlara atanmayı neredeyse tek bir istemciyle aynı şekilde desteklediğini düşünüyorum . Muhtemelen her bir arka ucun benzersiz bir çerez ayarlamasını ve çerezlere bağlı olarak arka uçlara bir ön uç web sunucusu proxy'si oluşturarak birlikte bir şeyler hackleyebilirsiniz. (Apache'nin mod_rewrite muhtemelen bunu yapabilir.)
jon

Tüm tarayıcıları kapsayan tek bir kural yoktur, bu yüzden en azından
hangisiyle

Yanıtlar:


7

Her tarayıcının yuvarlak robin DNS'yi ele almak için kendi yöntemi vardır, bugün bu sorunu araştırmak için biraz zaman harcadım ve yanıtlarını davranışlarını gösteren tarayıcılara sınırlandıracak uygulama kanıtı bulduğumdan cevabımı güncellemeye devam edeceğim.

Google Chrome

Google Chrome (kullanılan v58), bir adres (A, AAAA, CNAME) için tüm ana bilgisayar girişlerini isteyecek ve bunları bir diziye ( adres_listesi ) koyacaktır . Daha sonra Chrome, ilk IP'den sonuncuya kadar her IP adresinde bir soket açmaya çalışır, krom en hızlı veya en yakın IP'yi denemez, ilk IP'nin (yukarı akış dns çözümleyicileriniz tarafından verilen) en iyi IP olduğunu varsayar. Testlerimde bind ve windows dns sunucuları arama başına farklı bir IP sırası verir ve her bir IP'ye bant genişliğinde 50/50 bölünmüş gibi bir şey verir. Bu işlevsellik,chrome://net-internals/#events&q=type:SOCKET%20is:active

Kıvrılma (libcurl / 7.54.0)

Curl ayrıca bu başarısızlık işlevine sahiptir, ancak --connect-timeoutkromdaki varsayılandan çok daha uzundur, krom hemen başarısız olur, Curl yoktur. Libcurl kullanırsanız ve bir IP'nin başarısız olduğu bir round-robin dns örneğinde hayatta kalmak istiyorsanız, (kromda çalışır ancak kodda değil) bu değeri daha düşük belirttiğinizden emin olun.

DEFAULT_CONNECT_TIMEOUT: 0 bana bunun curl ile mümkün olmadığını düşündürdü.

* After 149990ms connect time, move on!

Her iki tarayıcıda da IP yapışkan , DNS'de verilen TTL'yi takip ettiler ve ttl'nin süresi dolduğunda (krom bunu dahili olarak tutar, her istekte kıvrılma sorar), ip seçimi yukarıda açıklandığı gibi her seferinde gerçekleştirilir.

Ne anlama geliyor? DNS-RR bazı sistemler için uygundur, ancak yük devretme için tasarlanmamıştır. DNS görünümlü tüm sonuçların (gerçek bir kaynak) geçerli ve trafik sunmak için kullanılabilir olmasını beklemelisiniz. IP'nin kullanılabilirliğini sağlamanın sanal kayan IP'ler, BGP / Yönlendirme hileleri gibi birçok yolu vardır. . Bunları kullanın .

Yalnızca IPv4 ortamında yapılan tüm testler, test etmek için yeterli altyapı bulunduğunda çift yığınlı sonuçlarla geri dönecektir.

Bu değişikliklerin IPv6-Fallback RFC Happy Eyeballs'un bir yan etkisi olduğunu tahmin ediyorum

Güncelleme Yararlı bir değerlendirme olan RR DNS, uygulama hatalarına değil, yalnızca yük dengelemesine yardımcı olabilir, düğümlerinizden birinin 503'ü varsa, trafiğiniz 503'lerde% 40-60 oranında hizmet verirsiniz. Listelenen tüm IP'lerin ulaşılabilir olması durumunda geçerli çalışma uç noktaları olduğu varsayılmıştır.


2

edit: HiPerFreak bana eğitim beri benim cevap düzenleme.

DNS sunucuları, belirli bir ana bilgisayar adı için sahip olduğu tüm A kayıtlarının listesini döndürür. Round robin'in geldiği yer listenin nasıl sıralandığını döndürmektir. Yayınlanan bağlantı, web tarayıcılarının bu listeyi nasıl kullanacağına harika bir örnektir.

Round Robinning, çok ilkel bir yük dengeleme formu için kullanılabilir, ancak gerçek yük dengeleme için çok zayıf bir alternatiftir, çünkü yuvarlak robin rotasyonundaki ana bilgisayarlardan biri düşerse, DNS sunucusu hiçbiri daha akıllı olmayacak ve hala olmayacaktır. indirilen düğümün IP adresini listeye yerleştirin.


DNS sunucusu her zaman TÜM adresleri dağıtır. Tarayıcı, hangisinin kullanılacağına karar veren tarayıcıdır (burada ve başka yerlerde birçok kez olduğu gibi). Ayrıca, işletim sistemi tüm IP'leri tarayıcıya geçirir.
HiPerFreak

2
@HiPerFreak Sık görülen yapılandırma (özellikle çok sayıda A Kaydı için) DNS'nin bazı adresleri dağıtmasıdır (hepsi olmasa da, genellikle 512 baytlık bir UDP paketine sığdıklarından ve gereksiz ek yüke maruz kalmadıklarından emin olmak için) , genellikle değişen bir sırada.
wabbit

2 veya 3 IP düşünüyordum.
HiPerFreak

@HiPerFreak: Sadece bir DNS sunucusunun, bir ad için sorgulandığında bu ad için birden fazla A kaydı varsa tüm A kayıtlarını dağıttığı konusunda haklı olduğunuzu söylemek istedim. Bir DNS sunucum var ve onaylamak için ana bilgisayar adına ping işlemi yaparken Wireshark ile bir paket yakalama yaptım. Teşekkür ederim - Bugün bir şeyler öğrendim! :)
Ryan Ries

2

Benim sorum (ve cevabım): Tarayıcıların birden fazla IP'yi nasıl ele aldığını görün .

Kısa süre sonra robin dns, kullanılabilirliği hiç artırmaz. Tarayıcı bir IP seçer ve yanıt vermese bile ona yapışır. (FF ve krom ile kontrol edilir).

Tarayıcı dns önbelleğinin süresi dolduğunda, ana bilgisayar adı yeniden çözüldü ve IP yanıtlanıp yanıtlanmadığına bakılmaksızın işlem tekrarlandı.

Temel HA için dinamik DNS veya çeşitli IP tabanlı yaklaşımlar kullanabilirsiniz.

EDIT: Bu davranış erişilemez ana bilgisayar bir "kara delik" gibi davranır gerçekleşir. Bunun yerine ana bilgisayar gelen bağlantıları aktif olarak reddederse, tarayıcı bir ip deneyecek, reddedecek ve hemen başka bir ip kullanacak ve böylece oldukça iyi başarısız olacaktır.


2
Belki bu son yıllarda değişti, ancak Firefox'ta birden fazla yenileme yapıldığında, IP'nin çok sık olmasa da aslında değiştiğini doğrulayabilirim. Muhtemelen bu cevap eski mi?
Yeti

Araştırmam (2015'ten itibaren), Chrome, Firefox ve MSIE'nin Sandman4'ün tanımladığı gibi davranmadığı. MSIE, ilk başarısız olursa listelenen bir sonraki adresle bağlantı kurmaya çalışmadan önce tam bir TCP zaman aşımı gerektirmesi bakımından oldukça farklıdır.
symcbean

0

IP'leri değiştirirler, bu bir yük devretme çözümü değildir.

Tarayıcılar işletim sisteminin ad çözümlemesi yapmasına izin verir ve Linux için IP adreslerini her zaman rasgele seçer, google.com'u birkaç kez deneyin . IP'ler rastgele sırada gelir.


Bunu neden rastgele ve sebepsiz yapıyorlar? Çalıştığı bir IP'yi çalışır durumda olduğu sürece yeniden kullanmak mantıklı olmaz mı?
HiPerFreak

1
Yük dengeleme içindir.
Taş

@HiPerFreak Ayrıca bakınız: en.wikipedia.org/wiki/Round-robin_DNS
voretaq7

@HiPerFreak: Bu, çalıştığı bilinen bir IP'ye bağlı kalmamasının nedeni, ad çözümlemesinin, IP'nin şu anda çalışıp çalışmadığı veya geçmişte olup olmadığı hakkında hiçbir şey bilmemesidir. Tarayıcı tek bir IP'ye yapışmaz, çünkü ad çözünürlüğü farklı IP'ler kullanmasını söyler. :-)
Sean Reifschneider

@Sean: Darbe yanıtında tartışıldığı gibi, ad çözünürlüğü tarayıcıya TÜM IP'leri verir ve tarayıcı hangisinin kullanılacağına karar verir. Ve tarayıcı hangi IP'lerin işe yaradığını ve hangilerinin işe yaramadığını bilir. Yani bu sebep olamaz.
12:40

0

DNS, bir listedeki tüm IP'leri döndürür, ancak listenin sırasını değiştirir ve 1 başarısız olduğunda bu sıra rastgele değildir veya değişmez, ancak yük dengeleme nedenleriyle IP'leri her zaman aynı sırada döndürürler. Tarayıcı listeyi aldığında, çalışmayan olarak bilinmediyse listede ilkini seçtiğini varsayalım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.