AWS EC2 호스트 이름이 변경되거나 증가 할 때 nginx 업스트림 서버 목록을 자동으로 업데이트하는 방법은 무엇입니까?


16

AWS에서 자동 확장을 설정하고 싶습니다. Elastic Load Balancer를 사용하고 싶지 않습니다.

Amazon의 자동 호출 기능은 수요 급증시 원활하게 EC2 인스턴스를 생성하여 성능을 유지하고 수요 감소시 자동으로 감소하여 비용을 최소화합니다.

이 EC2 인스턴스는 자동으로 생성되므로 호스트 이름을 NGINX에 알 수 없습니다.

나는 nginx에서 10 EC2 인스턴스까지의 업스트림 설정을 이미 알고 있습니다.

자동 확장으로 EC2 인스턴스를 추가 / 업데이트 / 삭제할 때 업스트림 nginx 구성에 서버 이름을 자동으로 추가 / 업데이트 / 삭제할 수 있기를 원합니다 .


1
질문에서 "자동 확장"을 제거해야합니다. 자동 확장은 AWS 용어입니다. 당신이 의미하는 바는 LB 역할을하는 nginx에 더 많은 업스트림 노드를 추가하여 자동으로 (수평으로) 확장하고 싶다고 생각하며 업스트림 노드가 추가 / 삭제 / 수정 될 때 nginx 구성을 자동으로 수정하는 방법을 묻고 있습니다. 그렇다면 질문을 적절히 편집하십시오.
talonx

사실, 자동 호출이 무엇인지 알고 있습니다. 둘 다 섞고 싶어요. 질문을 업데이트하겠습니다.
Luis Lobo Borobia

1
의문의 여지가 있지만 지금은 문제가 더 명확합니다. 다시 열기 위해 투표하고 싶었지만 옵션이 보이지 않습니다. 아직 담당자가 충분하지 않은 것 같습니다.
talonx

@talonx에게 감사합니다. 다른 사람들이 내 대답을 찾기 위해 투표 할 수 있기를 바랍니다.
Luis Lobo Borobia

1
새로 생성 / 종료 된 인스턴스의 호스트 이름과 nginx 구성을 업데이트하고 다시로드하기 위해 타사 nginx API 중 하나를 반환한다고 가정하고 AWS 자동 확장 알림 (SNS를 통해 제공)을 결합 할 수 있다고 생각합니다. 애매하게되어 죄송합니다. 자동 확장 API에 익숙하지 않습니다.
talonx

답변:


7

이것은 SNS, EC2 및 Autoscaling 서비스를 활용하여 Amazon SDK를 사용하여 달성 할 수 있습니다 (거의 작업이 완료되고 github에 배치 함).

이것을 달성하기 위해 아래 단계를 수행했습니다.

  1. HTTP 알림을 활성화하고 웹 서버를 구독했습니다.
  2. 서버 종료를 위해 자동 확장 그룹에 하트 비트가 1 분 (종료되기 전에 1 분 동안 대기) 인 수명주기 후크를 추가했습니다.
  3. 메시지를 구문 분석하여 메시지가 어떤 종류의 메시지인지 (예 : 시작 또는 종료) 색인 파일을 작성
  4. 이벤트 유형이 결정되면 EC2에 쿼리하여 인스턴스의 프라이빗 IP를 얻습니다.
  5. Launch의 경우 헤더 200이 수신 될 때까지 기다린 다음 ip를 nginx 구성에 추가하고 다시로드하십시오.
  6. 종료의 경우 구성에서 IP를 제거하고 nginx를 다시로드하십시오.

https://github.com/singhupendra/aws-autoscale 에서 스크립트를 찾으십시오.


github에 이것을 올릴 수 있습니까? 나는 똑같은 일을하려고 노력하고 있으며 어떤 도움이라도 감사하겠습니다.
Aaron


2

@talonx에게 감사드립니다. 연구를 마친 Amazon Autoscale에는 현재 자동 확장 그룹 상태를 쿼리하고 해당 구성원을 열거하는 API가 있습니다. 인스턴스 ID ( http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/api_requests.html#query-example )를 반환 한 다음 설명 도구를 사용하여 서버 이름 ( http : // docs .aws.amazon.com / AWSEC2 / latest / CommandLineReference / ApiReference-cmd-DescribeInstances.html ) 마지막으로 업스트림 포함 파일을 다시 만듭니다. 이러한 작업을 수행하는 프로세스를 시작하는 Autoscaling 알림을 감지 할 수 있습니다.

나는 여전히 그것을 구현하지 않았지만 갈 길입니다.

SNS와 함께 Autocaling을 사용할 수도 있습니다. http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/ASGettingNotifications.html


이것이 기본적으로 내가 한 일입니다. N 분마다 실행되는 루비 스크립트를 작성했습니다. AWS SDK를 사용하여 ASG 구성원을 쿼리하고 ERB 템플릿을 사용하여 새 구성을 생성합니다. 새 구성이 현재 구성과 다른 경우 구성을 제자리에 복사하고 데몬 (내 경우에는 haproxy)에 구성을 다시로드하라고 지시합니다. 인스턴스는 종료 된 후 ASG에 약간 남아 있으므로 instance.status == : running인지 확인하십시오. 또한 인스턴스가 시작된 후 요청을 처리하는 데 N 분이 걸리면 지금 인스턴스를 사용하지 마십시오.> instance.launch_time + N.
Mark Wagner

@MarkWagner에게 감사합니다. 해당 스크립트를 어딘가에 공유 할 가능성이 있습니까? 요지, 깃 허브? 감사!
Luis Lobo Borobia

이 스크립트로 운이 있었습니까? github 또는 다른 곳에서 예가 있습니까?
Aaron

그러나 지금은 nginx-plus (유료 버전)로 더 많은 것을 허용합니다.
Luis Lobo Borobia

1

아직 자신이 구현하지 않은,하지만 난 사용으로 찾고 있어요 재구성 온 - 더 - 플라이Nginx에 플러스 . Auto Scaling Group 인스턴스를 설정하는 AMI 또는 구성 관리 (Puppet, Salt 등)가 NGiNX 재구성 API에 도달 할 수 있다고 생각합니다 (아마도 내부 Route53 도메인 이름을 통해 고정 IP가 없음). 역방향 프록시를 위해 업스트림 클러스터에 추가하십시오. 그런 다음 NGiNX의 내장 상태 확인은 해당 [추가 된] 인스턴스를 대신하여 사용할 수 없게되면 삭제합니다. 이것은 가장 깨끗한 솔루션으로 보이며 인스턴스를 추가하는 데 지연이 없으며 NGiNX Plus에 대역 외 상태 확인 기능이 있으므로 인스턴스를 삭제하는 데 지연이 거의 없습니다.

이 방법을 사용하면 자동 검색 시스템 (Consul, Serf 등)을 설정할 필요가 없습니다. 소규모 설치의 경우 설정 / 관리 및 필수 EC2 인스턴스 측면에서 많은 오버 헤드로 보이는 경우가 많습니다. 예를 들어, Consul은 최소 3 개의 인스턴스가 안정적이어야합니다. Serf는 아마도 ASG 인스턴스 자체에서 실행될 수 있지만 여전히 유지 관리에 대한 오버 헤드가 있으며 ASG가 하나 또는 두 개의 인스턴스로 축소되면 쿼럼이 손실됩니다.

마지막으로, 이는로드 밸런싱에 사용되는 NGiNX 서버에서 Auto Scaling Group 변경에 대한 자동 알림과 결합 될 수 있습니다. 이러한 알림에 의해 트리거 된 리스너 (Upendra가 참조한 것일 수도 있음)는 즉시 수정 API를 통해 NGiNX에 새 인스턴스를 즉시 추가 할 수 있습니다. NGiNX Plus의 비용 외에도, 누구나 왜 수많은 문제가있는 Elastic Load Balancer를 사용해야하는지 궁금해합니다.

2015-12-07 편집 : ngx_openresty밸런서- 바이아 ( 이 GitHub 스레드 참조 )는 NGiNX 업스트림 그룹에서 서버를 핫 애드 / 제거하는 또 다른 가능한 오픈 소스 솔루션을 제공합니다. 나는 아직 이것을 직접 실험하지는 않았지만이 게시물을 우연히 만난 사람을 위해 여기에 언급을 추가하고 싶었습니다.

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