각 EC2 인스턴스에서 실행되는 여러 응용 프로그램으로 ELB 상태 확인을 설정하는 방법은 무엇입니까?


11

AWS에서는 ELB를 사용하여 여러 애플리케이션을 호스팅하는 EC2 인스턴스의로드 밸런싱을 원합니다. 이상적으로 우리는 응용 프로그램에 대한 건강 검진을 원합니다.

그러나 현재 AWS Elastic Load Balancer에서는 상태 확인을 위해 한 위치 만 핑할 수 있습니다.

각 EC2 인스턴스에 배포 된 여러 애플리케이션의 상태를 고려한 ELB로 상태 확인을 구현하는 가장 좋은 방법은 무엇입니까?


4
한 가지 방법은 스크립트가 두 응용 프로그램의 확인을 기반으로 상태를 반환하도록하여 자체 상태 확인을 구현하는 것입니다.
Nathan C

1
ELB는 관리 서비스입니다. 자체 상태 점검을 사용하여 두 번째 애플리케이션에 대한 다른 ELB를 작성하십시오. 대부분의 비용은 요청 당이므로 2 개의 ELB를 운영하는 데 거의 동일한 비용이 듭니다.
Guy

@NathanC의 답변이 최고의 솔루션이라고 생각합니다. 두 가지 조건 중 하나라도 실패하면 상태 확인이 실패하는 비슷한 경우가 있습니다. 다른 ELB를 추가하면 다른 건강 체크를 할 수 있지만, AFAIK 하나의 ELB는 트래픽을 라우팅하는 데 사용 (여부) 할 수있다
톰 해리슨 주니어

@Guy는 실제로 ELB 시간이 요청에 관계없이 청구되는 경우 지역에 따라 한 달에 ~ 20 USD이므로 월 평균 2.5TB 이상의 데이터를 제공하는 경우에만 대부분의 비용이 요청 당입니다 ( $에서 0.008 / GB)
요시프 로댕

답변:


10

이 문제를 해결하는 두 가지 방법이 있습니다.

첫 번째 옵션은 호스트의 온라인 상태를 유지하려는 논리에 따라 상태를 확인하고 HTTP 200을 ELB에 반환하는 다른 상태 확인을 호스트에 추가하는 것입니다. 물론 논리는 당신에게 달려 있습니다. 여기에서 단점은 일부 호스트에 App 2가 성공적으로 배포 된 경우 모든 호스트가 여전히 '정상'상태이고 트래픽을 수신한다는 것입니다.

다른 옵션은 각 응용 프로그램에 추가 ELB를 사용하는 것입니다. 여러 개의 ELB를 동일한 백엔드 EC2 인스턴스로 지정할 수 있으며 비용이 매우 적습니다. 이렇게하면 애플리케이션 별 상태를 점검하고 전혀 또는 전혀 접근하지 않고 애플리케이션 별 수준으로 문제가있는 호스트를 삭제할 수 있습니다.

편집 : 이것은 오래된 답변이며 ALB가 아닌 ELB에만 해당됩니다. ALB는 기본적으로 하나의 호스트에서 별도의 대상을 지원합니다.


7

앱당 하나의 ELB를 사용하는 것이 여기에 있습니다.

먼저, 각 애플리케이션이 자체 도메인에 있고 SSL을 지원해야하는 경우 어쨌든 필요할 수 있습니다. Amazon ELB는 현재 각 도메인에 대해 하나의 SSL 인증서 만 허용하며 각 SSL 사용 가능 도메인에 대해 별도의 ELB가 필요합니다. (와일드 카드 SSL 인증은 예외입니다).

여기서 문제는 현재 ELB 상태 확인을 EC2 인스턴스에서 호스팅되는 특정 가상 도메인으로 보낼 수 없다는 것입니다. "호스트 :"헤더가 전송되지 않습니다. 마치 브라우저에 EC2 인스턴스의 IP 주소를로드 한 것처럼 ELB 상태 핑은 항상 기본 도메인으로 이동합니다. 따라서 기본 도메인에서 상태 확인을 수신 한 다음 특정 응용 프로그램의 상태로 응답하려면 일부 접착제가 필요합니다.

다음은 Nginx server지시문에 추가 할 수있는 작동 예제 구성입니다 . 로드 밸런싱되는 각 EC2 인스턴스에 설치됩니다.

    # This goes in the `server` block noted by 'default_server', often /etc/nginx/sites-enabled/default

    # All AWS Health Checks from the ELBs arrive at the default server.
    # Forward these requests on the appropriate configuration on this host.
    location /health-check/ {
      rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
      # Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
      #  which would not be considered successful.
      proxy_set_header X-Forwarded-Proto 'https';
      proxy_set_header "Host" $domain;
      proxy_pass http://127.0.0.1;
    }

"first-application.com"에 대한 ELB의 "상태 점검"설정에서 "HTTP"및 포트 80을 선택하고 다음과 같은 경로를 입력하십시오.

/health-check/first-application.com

호스트에서 위의 Nginx 구성을 실행하면 기본 도메인에서 요청이 수신되고 https://first-application.com/api/v1/status 에 대해 동일한 호스트의 Nginx 구성으로부터 응답이 프록시됩니다.

이 방법을 사용하면 Nginx에 앱별 구성이 없습니다. 각 앱에 고유 한 도메인 이름이있는 한 각 앱마다 ELB를 설정해야합니다.


3
감사합니다. 이것은 속임수를 쓰는 것처럼 보였다. 이것으로 여러 개의로드 밸런싱이 필요하지 않기를 바랐습니다.
tourdownunder

6

2016 년 8 월 11 일, Amazon은 Application Load Balancer를 도입했습니다 . 이를 통해 각각 고유 한 상태 확인 유형을 가진 여러 대상 그룹을 지정할 수 있습니다. 이제 단일로드 밸런서를 사용하여 가능합니다!

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