Bugün HAProxy VM'lerimizden birinde küçük bir yük devretme sorunumuz vardı. İçine girdiğimizde şunu bulduk:
26 Ocak 07:41:45 haproxy2 çekirdeği: [226818.070059] __ratelimit: 10 geri çağırma bastırıldı 26 Ocak 07:41:45 haproxy2 çekirdeği: [226818.070064] Yuva dışı bellek 26 Ocak 07:41:47 haproxy2 çekirdeği: [226819.560048] Yuva dışında bellek Jan 26 07:41:49 haproxy2 çekirdeği: [226822.030044] Yuva dışında bellek
Hangi başına bu bağlantı , görünüşe göre düşük varsayılan ayarlarla ilgisi var net.ipv4.tcp_mem
. Bu yüzden onları varsayılan değerlerinden 4 kat arttırdık (bu, Ubuntu Sunucusudur, Linux'un lezzetinin önemli olup olmadığından emin değiliz):
güncel değerler: 45984 61312 91968 yeni değerler: 183936 245248 367872
Ondan sonra tuhaf bir hata mesajı görmeye başladık:
26 Ocak 08:18:49 haproxy1 çekirdeği: [2291.579726] Güzergâh karma zinciri çok uzun! 26 Ocak 08:18:49 haproxy1 çekirdek: [2291.579732] Secret_interval değerinizi ayarlayın!
Şşş .. bu bir sır!
Bunun görünüşe göre /proc/sys/net/ipv4/route/secret_interval
varsayılan olarak 600 olan ve rota önbelleğinin düzenli aralıklarla temizlenmesini kontrol etmesi gerekenler
secret_interval
Bakılmaksızın ne kadar yeni / eski TÜM rota karma girdileri uçurmak için hangi sıklıkta çekirdeği talimatını verir. Çevremizde bu genellikle kötüdür. CPU, önbellek her temizlendiğinde saniyede binlerce girişi yeniden oluşturmakla meşgul olacak. Ancak bunu bellek sızıntılarını uzak tutmak için günde bir kez çalıştırmaya ayarladık (hiç olmadığımız halde).
Bunu azaltmaktan mutluluk duysak da , eski değerleri rota önbelleğinden daha hızlı bir şekilde itmek yerine tüm rota önbelleğini düzenli aralıklarla bırakmanızı tavsiye etmek garip görünüyor .
Bazı araştırmalardan sonra /proc/sys/net/ipv4/route/gc_elasticity
, rota tablosu boyutunu kontrol altında tutmak için hangisinin daha iyi bir seçenek olduğunu gördük :
gc_elasticity
en iyi şekilde, çekirdeğin rota giriş kayıtlarının süresi dolmadan başlamadan önce kabul edeceği ortalama kova derinliği olarak tanımlanabilir. Bu, aktif rotaların üst sınırının korunmasına yardımcı olacaktır.
Rota önbelleğinin kendisini daha agresif bir şekilde budattığını umarak esnekliği 8'den 4'e ayarladık. Bu secret_interval
bize doğru gelmiyor. Ama bir sürü ayar var ve bu gerçekten de buraya gitmek için doğru olan yol değil.
- / proc / sys / net / ipv4 / rota / gc_elastisite (8)
- / proc / sys / net / ipv4 / rota / gc_interval (60)
- / proc / sys / net / ipv4 / rota / gc_min_interval (0)
- / proc / sys / net / ipv4 / rota / gc_timeout (300)
- / proc / sys / net / ipv4 / rota / secret_interval (600)
- / proc / sys / net / ipv4 / yol / gc_thresh (?)
- rhash_entries (çekirdek parametresi, varsayılan bilinmeyen?)
Linux yönlendirmesini daha da kötüleştirmek istemiyoruz , bu yüzden bu ayarlardan bazılarını karıştırmaktan korkuyoruz.
Yüksek trafikli bir HAProxy örneği için hangi yönlendirme parametrelerinin ayarlanması en iyi olduğunu bilen var mı?