NFS를 통해 nginx를 사용하여 정적 파일을 제공합니까?


9

nginx 서버에서 초당 약 7k 요청을받는 웹 사이트가 있습니다. 이 서버는 정적 파일, 이미지 등을 직접 제공 할뿐만 아니라 Apache 서버에 대한 재 작성을 처리합니다. 정적 파일은 약 5k 요청에서 가장 큰 부분입니다.

아키텍처 업그레이드에서는 이러한 정적 파일을 포함하는 디렉토리를 NFS를 통해 내보내는 중앙 파일 서버를 사용하려고합니다. 이 파일에 대한 쓰기 액세스 권한이 없으므로 디렉토리는 nginx 머신에서 읽기 전용으로 마운트 될 수 있습니다. 나의 주요 관심사는 :

NFS는 이것으로 충분합니까? NFS가 처리 할 수있는 요청 수에 제한이 있습니까? 이 방법으로 갈 때 "필수"옵션이 있습니까?

보너스 : NFS 외에이 설정에 대한 다른 대안이 있습니까?

감사!


읽기 액세스 권한이 없거나 "전용"읽기 액세스 권한이 있습니까?
pauska

감사! 읽기 권한 만 있고 쓰기 권한은 없습니다.
j0nes

2
초당 7k 요청은 하루 ~ 6,048,00,000 건의 요청입니다. 단일 NGINX 서버에서 실행하는 경우 당사 (및 절반의 부하로 서버 클러스터를 사용하는 회사)는 설정을 알고 싶어합니다.
Smudge

답변:


2

중앙 NFS 서버를 설정하면 설계에 단일 지점 장애가 발생합니다. 그것만으로도 거래 차단기가되어야합니다. 그렇지 않은 경우 NFS는 이와 같은로드에 대해 충분히 빠를 수 있습니다. 중요한 요소는 파일을 캐시하기에 충분한 RAM, 대기 시간이 짧은 상호 연결 (Gig-E 이상) 및 튜닝 (이전보다 적음)이 될 것입니다.

또한 rsync 또는 유사한 도구를 사용하여 각 개별 웹 서버에서 정적 파일 업데이트의 로컬 사본을 유지하는 것이 좋습니다. 다른 옵션으로는 SAN 또는 중복 NFS 서버 솔루션이 있습니다 (둘 다 rsync 아이디어보다 훨씬 복잡하고 비용이 많이 듭니다).


2
NFS는
SPoF

@gWaldo "중앙 NFS 서버"를 정확히 어떻게 설정하고 SPoF가 아닌가?
Chris S

당신은 당신이, 말했듯이, 그 실현에 의해 그것을 할 중앙 NFS 서버가 SPOF이며, 대신 NFS 클러스터를 구현하기 위해 선택합니다. 나는 실제로 당신과 동의하지 않습니다 ....
gWaldo

감사합니다. 단일 실패 지점을 피하면서 rsync 경로를 사용한다고 생각하기 때문에이 솔루션을 수락합니다.
j0nes

GlusterFS 및 CTDB를 사용하여 고 가용성 이중 복제 NFS 서버를 구현하는 것은 매우 간단합니다. 성능면에서 클러스터는 초당 약 10k 요청을 받았으며 제대로 작동합니다. 문제는 NFS 서버에 많은 RAM이 필요하다는 것입니다.
Alpha01

2

나는 cachefilesd (및 cachefs와 함께 최근 리눅스 커널)를 사용하여 NFS 파일을 로컬 HD에 캐시합니다. 이런 식으로, nfs의 모든 읽기는 파일을 / var / cache / fs 디렉토리로 복사하고 다음 읽기는 거기에서 전달되며 커널은 내용이 여전히 유효한지 nfs에서 확인합니다.

이런 방식으로 로컬 파일의 성능을 잃지 않고 중앙 NFS를 가질 수 있습니다.

캐시 파일은 사용 가능한 크기 / 아이 노드가 구성된 수준에 도달하면 오래된 파일을 정리하여 NFS에서 일반적이지 않은 데이터와 HD의 공통 요청을 처리 할 수 ​​있습니다.

물론, 니스를 사용하여 더 일반적인 요청을 캐시하고 nginx / NFS를 제공하지 않도록 저장하십시오.

다음 은 작은 캐시 파일 하우투입니다


1

속도는 여러 가지 요인에 따라 다릅니다.

  • 서버가 NFS 대상에 어떻게 연결됩니까? 단일 듀얼 포트 SAS 디스크는 6gbit / s의 전송 속도를 사용할 수 있습니다. 1gig 이더넷 (20 %의 TCP 오버 헤드를 뺄 수 있음)을 사용하려는 경우이 점을 명심하십시오.
  • NFS 서버는 어떤 종류의 캐시를 가져 옵니까? 캐시가 많은 엔터프라이즈 급 어레이 컨트롤러를 사용하고 있습니까? 읽기 캐시는이 설정의 핵심입니다
  • 동일한 파일에 동시에 액세스하는 서버는 몇 대입니까? NFS 잠금이 심하게 손상 될 수 있음

NFS를 통한 파일 열기 제한은 호스트 운영 체제의 제한입니다. 예를 들어 FreeBSD에는 많은 수의 열린 파일 을 지원하기위한 다양한 튜닝 옵션이 있지만 서버의 RAM 용량에 따라 다릅니다.

중앙 파일 서버의 대안은 웹 서버간에 동기화 / 복제를 사용하는 것입니다 (Chris S가 제안한 것처럼). rsync 또는 DRBD는 훌륭하고 비용 효율적인 선택 일 수 있습니다.


1

캐싱을 넣지 않으면 NFS에 대해 조언합니다. nginx 캐시는 다른 것보다 낫지 만 Varnish가 더 좋습니다.

즉, 부하가 정적보다 동적 콘텐츠로 변경되면 로컬 디스크에서 앱 파일을 제공하는 것이 더 중요해질 것입니다.

NFS를 넣을 경우 중복성이 있는지 확인하십시오.


약간의 아키텍처 변경이 필요할 수 있습니다. 니스와 같은 캐싱 계층을 사용하는 것 외에도 NFS 공유에있는 모든 정적 파일에 대해 원본 풀 CDN 설정을 사용하는 것이 좋습니다. 이렇게하면 NFS 백엔드에 가해지는로드가 완화됩니다.
Alpha01
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.