NFS üzerinden nginx ile statik dosyalar mı sunuyorsunuz?


9

Bir nginx sunucusunda saniyede yaklaşık 7 bin istek alan bir web sitem var. Bu sunucu, Apache sunucusuna yeniden yazma işlemlerinin yanı sıra statik dosyaları, görüntüleri vb. Doğrudan sunar. Statik dosyalar yaklaşık 5 bin istek ile orada en büyük parçasıdır.

Bir mimari yükseltmeyle, bu statik dosyaları içeren bir dizini NFS aracılığıyla dışa aktaran merkezi bir dosya sunucusu kullanmayı düşünüyorum. Bu dosyalara yazma erişimi olmayacaktır, bu nedenle dizin nginx makinesine salt okunur olarak bağlanabilir. Temel kaygım:

NFS bunun için yeterince hızlı mı? NFS'nin kaç isteği işleyebileceğine dair bir sınır var mı? Bu şekilde giderken "olması gereken" seçenekler var mı?

Bonus: Bu kurulum için NFS dışında başka alternatifler var mı?

Teşekkürler!


Okuma erişimi veya "yalnızca" okuma erişimi yok mu?
pauska

Teşekkürler! Sadece okuma erişimi, yazma erişimi yok.
j0nes

2
7k istek saniyede ~ 6,048,00,000 istektir, eğer tek bir NGINX sunucusunda çalıştırıyorsanız, biz (Ve bu yüklerin yarısı için sunucu kümeleri kullanan şirketler) kurulumunuzu bilmek isteriz.
Leke

Yanıtlar:


2

Merkezi bir NFS sunucusu kurarak tasarımınıza tek bir hata noktası eklersiniz. Bu tek başına bir anlaşma kırıcı olmalı. Değilse, NFS böyle bir yük için yeterince hızlı olabilir. Kritik faktörler, dosyaları önbelleğe almak için yeterli RAM'e, düşük gecikmeli ara bağlantılara (Gig-E veya daha iyisi) ve ayarlama (öncekinden daha az) olacaktır.

Ayrıca, her bir web sunucusunda statik dosya güncellemelerinin yerel kopyalarını tutmak için rsync veya benzer bir araç kullanmayı da düşünmelisiniz. Başka bir seçenek, SAN veya yedekli NFS sunucu çözümü olabilir (her ikisi de rsync fikrinden çok daha karmaşık ve maliyetli olacaktır).


2
NFS'nin SPoF olması gerekmez
gWaldo

@gWaldo "Merkezi bir NFS sunucusunu" tam olarak nasıl kurabilir ve SPoF olmasın?
Chris S

Söylediğiniz gibi, merkezi bir NFS sunucusunun bir SPoF olduğunu ve bunun yerine bir NFS kümesi uygulamayı seçerek gerçekleştirirsiniz. Aslında seninle aynı fikirde değilim ....
gWaldo

Teşekkürler - bu çözümü kabul ediyorum, çünkü rsync yoluna gideceğim, başarısızlık şeyin tek noktadan kaçınacağımı düşünüyorum (bu benim asıl endişem olmalı).
j0nes

GlusterFS ve CTDB kullanarak yüksek kullanılabilirlikli çift çoğaltılmış NFS sunucusu uygulamak oldukça basittir. Performans açısından, kümem saniyede yaklaşık 10 bin istek alıyordu ve iyi bir şekilde ilerliyor. Tek sorun, NFS sunucularının çok fazla RAM'e ihtiyaç duymasıdır.
Alpha01

2

NFS dosyalarını yerel bir HD'ye önbelleğe almak için cachefilesd (ve cachefs içeren yeni bir linux çekirdeği) kullanıyorum. Bu şekilde, nfs'deki her okuma dosyayı / var / cache / fs dizinine kopyalar ve sonraki okumalar oradan iletilir ve içerik hala geçerli olup olmadığını nfs'de kontrol eder.

Bu şekilde merkezi bir NFS'ye sahip olabilirsiniz, ancak yerel dosyaların performansını kaybetmeden

Cachefilesd, ücretsiz boyut / inodelar yapılandırılmış bir seviyeye ulaştığında eski dosyaların temizlenmesiyle ilgilenir, böylece NFS'den nadir veriler ve HD'den gelen genel istekler sunabilirsiniz

Tabii ki, daha yaygın istekleri önbelleğe almak için bir vernik kullanın ve o zaman nginx / NFS'yi sunumdan kaydedin.

İşte küçük bir cachefilesd howto


1

Hız birçok faktöre bağlıdır:

  • Sunucularınız NFS hedefine nasıl bağlanacak? Tek bir çift bağlantı noktalı SAS disk, 6 gbit / sn aktarım hızından yararlanabilir. 1gig Ethernet kullanmayı planlıyorsanız (% 20 TCP ek yükünü çıkarabilirsiniz) bunu unutmayın.
  • NFS sunucusu ne tür bir önbellek alacak? Çok fazla önbellek içeren kurumsal düzeyde bir dizi denetleyicisi mi kullanıyorsunuz? Bu kurulumda önbellek okuma çok önemli
  • Aynı dosyaya aynı anda kaç sunucu erişecek? NFS kilitleme zarar verebilir - kötü

NFS yoluyla açık dosyaların sınırı, ana bilgisayar işletim sisteminin bir sınırlamasıdır. FreeBSD örneğin bir desteklemek için birçok farklı ayar seçenekleri vardır büyük açık dosya sayısı, ancak sunucunuzda RAM miktarına bağlıdır.

Merkezi bir dosya sunucusuna alternatif olarak, web sunucularınız arasında senkronizasyon / çoğaltma kullanmaktır (Chris S'nin önerdiği gibi). rsync veya DRBD harika ve uygun maliyetli bir seçim olabilir.


1

Orada bazı önbellekleme koymak sürece NFS karşı tavsiye ediyorum. Nginx önbellek hiçbir şeyden daha iyidir, ancak Vernik daha iyidir.

Bununla birlikte, yükünüz statikten daha dinamik içerik olarak değişecekse, uygulama dosyalarını yerel diskten sunmak daha önemli hale gelecektir.

NFS'yi yerleştirirseniz, yedekli olduğunuzdan emin olun.


Bu biraz mimari değişiklik gerektirebilir. Varnish gibi bir önbellek katmanı kullanmanın yanı sıra, NFS paylaşımında olacak tüm statik dosyalar için bir başlangıç ​​çekme CDN kurulumu kullanmak da iyi bir fikirdir. Bu, NFS arka ucuna çarpan yükü hafifletir.
Alpha01
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.