우리는 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은 조정되었습니다).
Marc, 당신은이 물건들을 구성하는 것에 대한 경험을 적어두고 어딘가에 게시해야합니다 (회사는 블로그를 가지고 있습니까?). 많은 사람들에게 유용 할 것 같은데. 질문을 Upvoted. – SquareCog
링크가 끊어졌습니다. – Ztyx
@Ztyx 감사합니다! 방금 업데이트했습니다. 더 새롭고 최신의 소스를 찾기 위해 파고 들었습니다. 원본 사이트가 여전히 PageRank가 상당히 높고 콘텐츠가 여전히 괜찮은 것처럼 보입니다. 따라서 새로운 URL을 반영하도록 수정하는 것입니다. –