2008-11-04 7 views
45

우리는 Amazon EC2에서 며칠 동안 HAProxy으로 싸우고 있습니다. 경험은 지금까지 훌륭했지만 소프트웨어로드 밸런서에서 더 많은 성능을 쥐어 짜야합니다. 우리는 정확히 리눅스 네트워킹이 아닙니다 (우리는 보통 .NET 상점입니다). 그러나 우리는 지금까지 우리 자신을 잡고 적절한 규칙을 세우고, 부정 행위에 대한 커널 메시지와 tcpdump를 조사했습니다. 지금까지 우리는 약 1,700 요청/초의 고원에 도달했습니다.이 시점에서 클라이언트 시간 초과가 많이 있습니다 (이 목적으로 httperf을 사용하고 조정했습니다). 한 동료와 나는 Reddit 창시자가 전체 사이트가 하나의 HAProxy 노드에서 실행된다는 것과 가장 최근의 스택 오버플로 podcast를 듣고 있었으며 지금까지는 병목 현상이 발생하지 않았다는 것을 알았습니다. 응! 어쨌든 많은 동시 요청을 보지 못하거나 무언가를 잘못하고 있거나 EC2의 공유 본질이 EC2 인스턴스의 네트워크 스택을 제한하고 있습니다 (우리는 대규모 인스턴스 유형을 사용하고 있습니다). Joel과 Reddit 창립자가 네트워크가 제한 요소가 될 것이라는 데 동의한다는 사실을 고려할 때 이것이 우리가보고있는 한계 일 수 있습니까?Amazon EC2의로드 균형 조정?

모든 의견을 크게 환영합니다!

편집 실제로는로드 밸런서 노드와 관련된 문제가 아닌 것 같습니다 범인은 사실이 경우 httperf를 실행하는 노드였습니다. httperf는 각 요청에 대해 소켓을 빌드하고 찢어 버리기 때문에 커널에 상당한 CPU 시간을 소비합니다. 우리가 요청 비율을 더 높게 잡았을 때, TCP FIN TTL (기본값으로 60)은 소켓을 너무 오랫동안 유지하고 있었고 ip_local_port_range의 기본값은이 사용 시나리오에 비해 너무 낮습니다. 기본적으로 몇 분의 클라이언트 (httperf) 노드가 끊임없이 새로운 소켓을 생성하고 파괴 한 후에 사용되지 않는 포트의 수가 소진되고이 단계에서 후속 '요청'이 오류로 발생하여 낮은 요청/초 수와 많은 양을 산출합니다 오류.

우리도 nginx를 보았지만 우리는 RighScale과 협력 해 왔고 HAProxy를위한 드롭 인 스크립트를 가지고 있습니다. 오, 우리는 절대적으로 필요한 것으로 입증되지 않는 한 구성 요소를 전환하는 마감 시간이 너무 빡빡합니다. 자비로 AWS에 참여하는 것은 nginx를 병렬로 사용하여 다른 설정을 테스트하고 나중에 스위치를 밤새 사용하게합니다.

This page은 각 sysctl 변수를 매우 잘 설명합니다 (이 경우 ip_local_port_range 및 tcp_fin_timeout은 조정되었습니다).

+3

Marc, 당신은이 물건들을 구성하는 것에 대한 경험을 적어두고 어딘가에 게시해야합니다 (회사는 블로그를 가지고 있습니까?). 많은 사람들에게 유용 할 것 같은데. 질문을 Upvoted. – SquareCog

+0

링크가 끊어졌습니다. – Ztyx

+0

@Ztyx 감사합니다! 방금 업데이트했습니다. 더 새롭고 최신의 소스를 찾기 위해 파고 들었습니다. 원본 사이트가 여전히 PageRank가 상당히 높고 콘텐츠가 여전히 괜찮은 것처럼 보입니다. 따라서 새로운 URL을 반영하도록 수정하는 것입니다. –

답변

9

질문에 대한 답변은 아니지만 nginx와 pound는 모두로드 밸런서로서 좋은 평판을 얻고 있습니다. 단지 좋은 결과와 함께 switched to nginx Wordpress.

그러나 좀 더 구체적으로 말하면 문제를 디버그하는 것입니다. 100 % cpu 사용량 (I/O 대기 포함)이 표시되지 않으면 네트워크 연결 상태가됩니다. EC2는 기가비트 네트워크를 내부적으로 사용하며 XL 인스턴스를 사용하므로 기본 하드웨어가 있으므로 기가비트 네트워크 포트를 공유 할 필요가 없습니다.

1

나는 구름이 아닌 오프 사이트로드 밸런서로 전환하고 그 위에 IPVS와 같은 것을 돌리는 것을 살펴볼 것이다. [아마존의 클라우드에서 벗어난 이유는 커널 때문입니다.] 아마존이 패킷의 출처 IP를 제한하지 않으면 단방향로드 균형 조정 메커니즘을 사용할 수 있습니다. 우리는 이와 같은 작업을 수행하며, 약 800,000 건의 동시 요청을 처리합니다. [지연 시간은 다루지 않지만] 나는 또한 "ab2"(아파치 벤치)를 사용한다고 말하고 싶다. 좀 더 사용자 친화적이며, 내 겸손한 견해로 사용하기 쉽다.

+0

전체 메시지를 굵게 적었습니까? 읽을 시간이 꽤 있습니다. –

20

직접 질문에 대답하지 않지만 EC2는 EC2 인스턴스에서 자체로드 밸런서를 실행하는 대신 Elastic Load Balancing을 통해로드 균형 조정을 지원합니다.

편집 : 아마존의 Route 53 DNS 서비스는 이제 "별칭"레코드를 사용하여 ELB의 최상위 도메인을 가리키는 방법을 제공합니다. 아마존은 ELB의 현재 IP 주소를 알고 있기 때문에 CNAME 레코드를 사용하지 않고 현재 IP에 대해 A 레코드를 반환 할 수 있으며 때때로 IP를 자유롭게 변경할 수 있습니다.

+0

머리를 주셔서 감사합니다, 나는 실제로 이것을 지금 평가하고 있습니다. 차가운 물건은 풍부합니다 (명령 행 도구는 조금만 남겨 둡니다)! –

+3

AWS로드 밸런싱 (ELB) 솔루션에는 중대한 결함이 있습니다. 사용자가로드 밸런서에서 최상위 도메인을 직접 가리킬 수 없도록하는 CNAMES를 사용하도록 설계되었습니다. 즉, www.mydomain.com을 ELB로 지정할 수 있지만 mydomain.com을 지정할 수는 없습니다. 많은 사람들에게 그것은 막 다른 길잡이입니다. – kpw

+0

웹 사이트로 모든 통화를 리디렉션 할 수 없으므로 www. 입력 된 것입니까? –

3

네, 오프 사이트로드 밸런서를 사용할 수 있습니다. 베어 메탈 LVS는 훌륭한 선택이지만 대기 시간은 끔찍합니다! Amazon이 CNAME 문제를 해결할 것이라는 소문이 있습니다. 그러나 그들은 https, indepth 또는 맞춤 건강 검사, 피드백 에이전트, URL 매칭, 쿠키 삽입을 추가하지 않을 것입니다. (그리고 훌륭한 아키텍처를 가진 사람들도 꽤 말할 것입니다.) 그러나 Scalr, RightScale 및 다른 사람들이 일반적으로 HAProxy를 사용하는 이유는 라운드 로빈 DNS 항목 뒤에 있습니다. 여기에 Loadbalancer.org에서 우리는 EC2 부하 분산 appaliance를 시작하려고합니다. http://blog.loadbalancer.org/ec2-load-balancer-appliance-rocks-and-its-free-for-now-anyway/ 우리는 rightscale과 동일한 방식으로 자동 확장 기능과 통합하기 위해 SSH 스크립트를 사용할 계획입니다. 감사합니다.

0

문제가 해결되었지만. KEMP Technologies는 이제 AWS를위한 완벽한로드 밸런서를 갖추고 있습니다. 번거 로움을 덜어 줄 수 있습니다.