Goleling을 통해 Amazon Elastic Load Balancer (ELB)를 진단하는 방법에 대해이 질문을 발견했으며 많은 도움없이이 문제를 겪고있는 다른 사람을 위해 답변하고 싶습니다.
ELB 속성
ELB에는 몇 가지 흥미로운 특성이 있습니다. 예를 들어 :
- ELB는 하나 이상의 노드로 구성됩니다
- 이 노드는 ELB 이름에 대한 A 레코드로 게시됩니다.
- 이러한 노드는 실패하거나 종료 될 수 있으며 연결이 정상적으로 닫히지 않습니다 .
- 누군가가 ELB 문제를 파헤 치려면 종종 Amazon 지원 ($$$)과 좋은 관계가 필요합니다.
참고 : ELB가 갑자기 급증하는 트래픽을 처리하도록 설계되지 않았다는 또 다른 흥미로운 속성이지만 약간 덜 관련성이 있습니다. 규모가 커지기 전에 15 분 동안 많은 트래픽이 필요하거나 요청시 지원 티켓을 통해 예열 할 수 있습니다.
ELB 문제 해결 (수동)
업데이트 : AWS는 DNS에 Route 53을 사용하도록 모든 ELB를 마이그레이션했습니다. 또한 모든 ELB에는 이제 ELB에 all.$elb_name
대한 전체 노드 목록을 리턴 하는 레코드가 있습니다. 예를 들어 ELB 이름이 인 elb-123456789.us-east-1.elb.amazonaws.com
경우 다음과 같은 작업을 수행하여 전체 노드 목록을 가져옵니다 dig all.elb-123456789.us-east-1.elb.amazonaws.com
. IPv6 노드의 경우 all.ipv6.$elb_name
에도 작동합니다. 또한 Route 53은 여전히 UDP를 사용하여 최대 4KB의 데이터를 반환 할 수 있으므로 +tcp
플래그를 사용 하지 않아도됩니다.
이것을 알면 약간의 문제 해결을 스스로 할 수 있습니다. 먼저 ELB 이름을 노드 목록 (A 레코드)으로 확인하십시오.
$ dig @ns-942.amazon.com +tcp elb-123456789.us-east-1.elb.amazonaws.com ANY
tcp
당신의 ELB는 하나의 UDP 패킷의 맞춤 내부에 너무 많은 레코드를 가질 수로 플래그가 좋습니다. 또한 쿼리 를 수행 하지 않는 한 Amazon이 최대 6 개의 노드 만 표시한다는 것을 개인적으로 확인하지는 않았습니다 ANY
. 이 명령을 실행하면 다음과 같은 출력이 표시됩니다 (간결하게 트리밍).
;; ANSWER SECTION:
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN SOA ns-942.amazon.com. root.amazon.com. 1376719867 3600 900 7776000 60
elb-123456789.us-east-1.elb.amazonaws.com. 600 IN NS ns-942.amazon.com.
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN A 54.243.63.96
elb-123456789.us-east-1.elb.amazonaws.com. 60 IN A 23.21.73.53
이제 각 A
레코드 에 대해 예 curl
를 들어 ELB에 대한 연결을 테스트하는 데 사용합니다. 물론 백엔드에 연결하지 않고 ELB로만 테스트를 분리하려고합니다. ELB에 대한 하나의 최종 속성 및 알려진 사실 :
- ELB를 통해 보낼 수있는 요청 메소드 (동사)의 최대 크기는 127 자 입니다. 더 큰 ELB는 HTTP 405-Method not allowed로 응답 합니다.
이는 ELB가 응답하는지 테스트하기 위해이 동작을 활용할 수 있음을 의미합니다.
$ curl -X $(python -c 'print "A" * 128') -i http://ip.of.individual.node
HTTP/1.1 405 METHOD_NOT_ALLOWED
Content-Length: 0
Connection: Close
표시되면 HTTP/1.1 405 METHOD_NOT_ALLOWED
ELB가 응답하는 것입니다. curl의 시간 초과를 허용 가능한 값으로 조정할 수도 있습니다.
Elbping을 사용하여 ELB 문제 해결
물론 이렇게하면 꽤 지루할 수 있으므로 elbping 이라는 자동화 도구를 만들었습니다 . 루비 젬으로 제공되므로 루비 젬이 있으면 간단히 다음을 수행하여 설치할 수 있습니다.
$ gem install elbping
이제 다음을 실행할 수 있습니다.
$ elbping -c 4 http://elb-123456789.us-east-1.elb.amazonaws.com
Response from 54.243.63.96: code=405 time=210 ms
Response from 23.21.73.53: code=405 time=189 ms
Response from 54.243.63.96: code=405 time=191 ms
Response from 23.21.73.53: code=405 time=188 ms
Response from 54.243.63.96: code=405 time=190 ms
Response from 23.21.73.53: code=405 time=192 ms
Response from 54.243.63.96: code=405 time=187 ms
Response from 23.21.73.53: code=405 time=189 ms
--- 54.243.63.96 statistics ---
4 requests, 4 responses, 0% loss
min/avg/max = 187/163/210 ms
--- 23.21.73.53 statistics ---
4 requests, 4 responses, 0% loss
min/avg/max = 188/189/192 ms
--- total statistics ---
8 requests, 8 responses, 0% loss
min/avg/max = 188/189/192 ms
당신이 볼 경우, 기억 code=405
ELB가 응답하는지 그 방법을.
다음 단계
어떤 방법을 선택하든 최소한 ELB 노드가 응답하는지 알 수 있습니다. 이 지식으로 무장 한 경우 스택의 다른 부분에 대한 문제 해결에 중점을 두거나 무언가 잘못되었다는 것을 AWS에 상당히 합리적으로 제시 할 수 있습니다.
도움이 되었기를 바랍니다!
host
유틸리티를 실행하면 연결할 수있는 시스템 및 우리는 할 수 없습니다.