여러 웹 서버간에 자산을 공유하는 방법은 무엇입니까?


16

로드 밸런서에 여러 Linux 웹 서버가 연결되어 있으며이 서버간에 자산 (예 : 사진, 비디오 및 기타 자료)을 공유하고 싶습니다. 가장 좋은 방법은 무엇입니까?

현재 파일 서버에 모든 웹 서버에 마운트되어 있지만 트래픽이 많은 상황에서 파일 서버가 다운되는 것이 걱정됩니다. 이 문제가 발생하지 않도록하려면 어떻게해야합니까?

미리 감사드립니다.


Cassandra (NoSQL 데이터베이스)와 같은 것이 유용합니다.
Alexis Wilke 0

교통 체증시 성능 향상을 위해 니스를 사용하는 것을 고려 했습니까? en.wikipedia.org/wiki/Varnish_%28software%29
Thorbjørn Ravn Andersen

답변:


12

필요에 따라 여러 가지 방법이 있습니다.

  • 웹 서버에서 fx NFS로 마운트 된 중앙 파일 서버 사용
  • 위와 동일하지만 중복되므로 하나가 넘어지면 다른 하나가 대신합니다.
  • 동기화 도구 (예 : rsync)를 사용하고 웹 서버에서 로컬로 파일을 호스팅하십시오. 그런 다음 특정 간격으로 서버간에 파일을 동기화하도록 cronjob을 설정하십시오.
  • Amazon S3, Akamai 등과 같은 CDN을 사용하십시오.

처음 두 파일은 새로운 파일이 많이 오는 경우에 가장 좋습니다. 세 번째는 사용자가 아직 동기화되지 않은 정적 컨텐츠에 대해 404를 얻게되므로 파일을 추가하거나 변경하지 않는 경우 이상적인 솔루션입니다.

마지막 옵션은 여러 가지면에서 이상적 일 수 있지만 4 중 가장 비쌀 수도 있습니다. 또한이를 지원하려면 웹 사이트를 다시 작성해야합니다.


rsync의 큰 문제는 새 데이터를 업로드하면 r404가 발생하고 rsync가 매우 빠르게 발생하지 않는다는 것입니다. 물론 Cassandra (포인트 4)와 같은 시스템은 무료입니다. 물론 10 대의 서버가있는 것은 아닙니다. (그것은 모든 일을하기 위해 몇 가지 프로그램이 필요하지만.) 무료 ... 그래서, 어쩌면 내가 추가 비용없이 말을해서는 안
알렉시스 WILKE

@AlexisWilke-당신은 rsync에 대해 옳았습니다. 그리고 나는 또한 대답에서 언급했습니다. 나는 지금 대답에서 그것을 명확히했다.
Frederik Nielsen

Re : # 3 : 파일 시스템 감시자 (예 : Facebook의 파수꾼 )와 빠른 동기화 도구 (예 : csync2 ) 를 사용하면 배포 된 새 자산과 동기화 된 새 자산 간의 '데드 타임'을 최소화 할 수 있습니다 . 아니요, 지연 시간은 0으로 줄어들지 않지만 다른 방법보다 매우 최소화되어 배포하기가 더 쉽습니다.
pepoluan

2

웹 서버의로드를 줄이고로드 밸런싱을 수행하는 또 다른 좋은 방법은 오징어 (즉, squid3)를 사용하는 것입니다. 캐싱을 사용하여 리버스 프록시로 설정하십시오. 그런 식으로 설정하면 그림과 같은 정적 컨텐츠를 HDD (기본값) 또는 RAM (빠르고 최상)으로 캐시합니다. 특정 노드가 오버로드되면 다른 오징어 서버로 로빈을 라운드 할 수 있습니다.


1
매우 역동적 인 웹 사이트를 원한다면 그런 종류의 캐싱이 실패한다고 생각합니다. 역 동성이 강하기 때문에 여전히 많은 데이터에 대해 하나의 기본 백엔드 서버를 사용해야합니다. 사용자가 대신 백엔드 작업을 분할하려고 생각합니다.
Alexis Wilke

1
귀하의 답변은 잠재적으로 부하를 줄이는 것에 대해서는 맞지만 여러 서버간에 자산 파일을 공유하는 것에 대한 질문에는 대답하지 않습니다.

@AlexisWilke 오징어를 올바르게 설치하지 않으면 실패합니다. 설정에서 캐시를 캐시하는 방법을 조정하지만 페이지가 완전히 동적이지 않을 수도 있습니다. 항상 캐시 할 수있는 것이 있습니다. 또한 Andre는 제목에서 설명한대로 자산을 공유하는 데 큰 도움이되지만 파일을 많이 공유하지는 않습니다. 문제는 사이트가 과부하 상태에 빠지지 않도록하는 방법이었습니다. 오징어는 이것을 잘합니다.
Aihngel Tech 2009

1

일반적으로 동적 웹 사이트 / ap을 실행하는 데 필요한 리소스에서 더 많은 서버가 필요하기 때문에 다른 하위 도메인 / 도메인에서 정적 자산 호스팅을 고려하십시오. (static.yourdomain.com과 같은)

그런 다음 다른 서버를 사용하여 호스트 할 수 있습니다. 정적 파일 호스팅은 많은 리소스를 사용하지 않으므로 정적 콘텐츠를위한 서버가 상당히 줄어 듭니다. 또한 동적 컨텐츠를 위해 서버의 일부 자원을 비 웁니다.

로드 밸런서에 따라 요청에 사용할 서버를 결정하는로드 밸런서와 동일한 도메인에서이 작업을 수행 할 수도 있지만 별도의 도메인을 사용하는 경우 정적 자산을 CDN에 매우 쉽게 넣을 수 있습니다. 필요가 생겼다!


1

내가 채택한이 과제에 대한 한 가지 해결책은 공유 NFS 드라이브에 파일의 기본 읽기 / 쓰기 사본을 두는 것뿐만 아니라 NFS 호스트의 장애로 인해 파일 액세스가 가능하도록 각 웹 서버에서 읽기 전용 사본을 유지하는 것입니다 완전히 잃어버린 것이 아니라 읽기 전용 모드입니다.

  • 파일은 중앙 호스트에 존재하며 NFS 마운트를 통해 웹 호스트와 공유
  • rsync 각 웹 호스트의 읽기 전용 사본을 최신 상태로 유지하기 위해 15 분마다 실행됩니다.
  • check_linkbash는 스크립트는 반드시 NFS 마운트가 여전히 존재하기 위해 매 분마다 실행하지가에 심볼릭 링크 스왑 경우 읽기 전용 복사합니다.

자세한 내용은 이 시스템을 처음 설정할 때부터이 기사 에서 찾을 수 있습니다.

거꾸로 :

  • 파일 읽기 가용성
  • 파일 쓰기에 대한 경쟁 조건이 없음
  • 모든 웹 호스트에서 새로운 파일을 즉시 사용할 수 있습니다.

단점 :

  • 약간 복잡합니다.
  • 읽기 전용 복사본 수는 웹 호스트 수에 따라 조정되며, 둘 이상인 경우 과도 할 수 있습니다.
  • 파일 쓰기가 고 가용성이 아닙니다.
  • 읽기 전용 복사본으로 전환하기 전에 최대 1 분의 가동 중지 시간이 발생할 수 있습니다.

0

NoSQL 데이터베이스를 고려할 수 있습니다. 클러스터에서 작동하고 최종 일관성을 제공하도록 설계되었습니다. 그러나 ACID가 아니라는 점에주의하십시오.

다음 은 원하는 종류의 NoSQL 데이터베이스를 결정하는 데 도움이 되는 소개 입니다.

다음은 사용 가능한 NoSQL과 관련된 리소스 목록입니다 .


4
이 답변이 파일 동기화 문제에서 어떻게 도움이됩니까?
titus

@titus NoSQL에서 노드 중 하나에 쓰기가 있으면 클러스터의 다른 노드에 복제됩니다. Cassandra 쓰기 일관성 수준 은 명확하게하는 데 도움이 될 수 있습니다.
Azzy

그래서 갈 길은 모든 파일을 NoSQL db에 저장하는 것입니까?
titus

@titus는 할 수 있지만 NoSQL 데이터베이스는 훨씬 더 많은 파일을 저장할 수 있습니다.
Azzy

2
OP는 특정 문제에 대한 해결책을 요청했습니다. " 로드 밸런서에 연결된 여러 Linux 웹 서버 ...이 서버간에 자산 (예 : 사진, 비디오 및 기타 자료)을 공유합니다. "귀하의 답변은 매우 일반적입니다. 문제를 해결하기 위해 특정 도구 (및 그 구성)를 설명하십시오.
kdbanman

0

DFS 솔루션을 사용해 보시지 않겠습니까? DFS 솔루션은 높은 수준의 중복성을 제공하며 원하는만큼 볼륨을 공유 할 수 있습니다. Gluster는 내가 가장 좋아하는 것으로 유명한 Linux 배포판에서 설치 및 구성이 매우 쉽습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.