좋아, 이것은 잠시 후에 물었다. 그리고 나는 파티에 늦었다. 여전히 여기에 추가해야 할 것이 있습니다.
재키, 당신은 거의 그것을 못 박았습니다. 그림은 대부분의 중소 규모 설치에서로드 밸런싱을 처리하는 방법을 보여줍니다.
Nakedible이 연결된 Willy Tarreau 의 로드 밸런싱 소개 를 읽어야합니다. 여전히 유효하며 좋은 소개입니다.
이러한 요구 사항을 충족시키는 방법을 고려해야합니다.
- TCP / IP 레벨로드 밸런서 (Linux Virtual Server 등). 연결 당 최저 비용, 최고 속도는 HTTP를 "볼"수 없습니다.
- HTTP 레벨로드 밸런서 (HAProxy, nginx, Apache 2.2, Pound, Microsoft ARR 등) 더 높은 오버 헤드, HTTP를 볼 수 있고, HTTP를 압축하고, SSL을 수행하고, 고정 세션로드 밸런싱을 수행 할 수 있습니다.
- HTTP 리버스 프록시 (Apache Traffic Server, Varnish, Squid). 캐시 가능한 객체 (일부 웹 페이지, css, js, 이미지)를 RAM에 저장하고 백엔드 웹 서버를 사용하지 않고 후속 클라이언트로 전달할 수 있습니다. L7 HTTP로드 밸런서와 동일한 작업을 수행 할 수있는 경우가 종종 있습니다.
어느 시점에서 밸런서도 도움이 필요하다고 확신 할 때 두 번째 밸런서가 있습니다.
물론 이죠 그러나로드 밸런싱은 간단하고, 종종 하나의 부하 분산 갈 수있는 빠른 . 현대의 단일 서버 가 제공 할 수 있는 성능에 대한 예일뿐,이 기사에 링크하여 웹에 신경을 썼습니다 . 여러 LB를 사용하기 전에 사용하지 마십시오. 일반적인 접근 방식이 필요한 경우 맨 앞에 IP 레벨로드 밸런서 (또는 DNS 라운드 로빈)가 있고 HTTP 레벨로드 밸런서로 이동하고 프록시 및 웹 애플리케이션 서버로 이동합니다.
"밸런서"가 무엇인지, 설정 방법에 대한 모범 사례에 도움이됩니다.
문제 지점은 세션 상태 처리이며 어느 정도는 실패 상태 동작입니다. 로드 밸런서 자체를 설정하는 것은 비교적 간단합니다.
백엔드 웹앱 서버를 2-4 개만 사용하는 경우 원본 IP 주소를 기반으로하는 정적 해싱을 실행할 수 있습니다. 이를 통해 웹 애플리케이션 서버간에 공유 세션 상태가 필요하지 않습니다. 각 webapp 노드는 전체 트래픽의 1 / N을 보며 고객-서버 매핑은 정상 작동시 정적입니다. 큰 설치에는 적합하지 않습니다.
이 가장 부하 분산 알고리즘은, 그들이, 높은 부하에도 하중 분포에 따라 양성 동작을한다는 의미에서 라운드 로빈 진정한 무작위로드 밸런싱입니다. 이 두 가지 모두 웹 애플리케이션에 웹 애플리케이션 노드에서 사용 가능한 글로벌 세션 상태가 있어야합니다. 이 작업을 수행하는 방법은 webapp 기술 스택에 따라 다릅니다. 그러나 일반적으로 사용할 수있는 표준 솔루션이 있습니다.
정적 해싱이나 공유 세션 상태가 적합하지 않은 경우 일반적으로 ' 고정 세션 '로드 밸런싱 및 서버 별 세션 상태를 선택합니다. 대부분의 경우 이것은 잘 작동하며 완전히 실행 가능한 선택입니다.
밸런서는 각 아파치 인스턴스에 몇 개의 연결이 있는지 (내부 IP 또는 영구 IP의 일부 구성 목록을 통해)보고 연결을 동일하게 분배합니다.
예, 일부 사이트에서이 기능을 사용합니다. 존재하는 다양한로드 밸런싱 알고리즘 에는 많은 이름 이 있습니다. 라운드 로빈 또는 무작위 (또는 가중 라운드 로빈, 가중 무작위)를 선택할 수 있다면 위에서 언급 한 이유로 그렇게하는 것이 좋습니다.
마지막으로 : 많은 공급 업체 (F5, Cisco 및 고급, FX Coyote Point 및 Kemp Technologies의 다른 합리적인 가격)가 성숙한로드 밸런싱 어플라이언스를 제공한다는 사실을 잊지 마십시오 .