2011-04-21 1 views
18

AWS에서 자동 확장 기능이있는로드 밸런서 뒤에 여러 인스턴스가 실행 중입니다.Amazon EC2에서 Auto Scaling을 사용하여 애플리케이션의 코드 변경을 관리하는 가장 좋은 방법

이제 자동 변경 정책으로 인해 이러한 인스턴스와 새 인스턴스가 일부 코드 변경 사항을 밀어 넣어야하는 경우이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

내가 아는 유일한 방법은 최신 코드로 새 AMI를 작성하고이 자동 AMI를 사용하고 기존 인스턴스를 종료하도록 자동 크기 조정 정책을 수정하는 것입니다. 그러나 이것은 더 긴 중단 시간을 포함 할 수 있으며 전체 프로세스가 자동화 될 수 있는지 여부는 확실하지 않습니다.

이 방향의 모든 포인터는 높이 평가 될 것입니다.

+0

어떤 플랫폼은 코드 등 J2EE, PHP를 실행할합니까? J2EE, 예를 들어 어떤 엔진, Jetty, Tomcat 등이 있다면? – David

+0

PHP 응용 프로그램에 LAMP 설치로 우분투 AMI를 사용하고 있습니다. – Aditya

답변

4

내 코드를 변경하는 방법은 코드를 편집하는 마스터 서버를 사용하는 것입니다. 모든 슬레이브 서버는 cron 작업에 의해 ssh를 통해 rsync를 조정하여 모든 파일을 최신 상태로 만듭니다. 모든 서버는 30 분마다 동기화됩니다. - 똑같은 초 단위로 액세스하지 못하도록하는 몇 초. (사용자가 항상로드 밸런서에서 마스터 코드를 보내도록 마스터를 남겨 두는 것과 마찬가지로, 코드 변경을 게시하기로 결정할 때 테스트 서버에서 마스터 서버로 rsync를 수행합니다.)

이 방법을 사용하면 시작시 sync 명령을 입력하기 만하면되므로 부팅 후 코드 상태가 슬레이브 이미지의 최신 상태로 유지 될지 걱정할 필요가 없습니다.

편집 : 우리는 지금이 방법을 사용 중지 및이 정확한 목적을 위해 만든 새로운 서비스 AWS CodeDeploy 사용하기 시작했다 :

http://aws.amazon.com/codedeploy/

희망이 도움이됩니다.

+0

어떻게 슬레이브 인스턴스를 마스터에 동기화합니까? 내가 rsync를 마녀를 사용 –

+1

는 당신이 SSH 슬레이브와 마스터 서버 간의 키 쌍 authenication로 설정 한대로 매우 간단하다. 예 명령 : rsync를 -arvzi --perms --exclude SSH를 [email protected] -e "*."의 경우 :/var/www /에서/var에/www /에서 이 명령은 슬레이브에서 실행되고에게 끌어 것 마스터 서버로부터의 변경. 그런 다음 30 분마다 실행되도록 설정된 명령을 내릴 수 있습니다. chron 직업으로. 희망은 당신을 위해 그것을 명확히합니다. – David

+0

그래서 데이터베이스 스키마가 변경되지 않았다고 가정합니다. 왜냐하면 아직 업데이트되지 않은 노예에 오류를 던질 것이기 때문입니다. 네? – Christian

1

우리는 우리의 시작 구성이 사용하도록 구성 기성품 AMI "깨끗한"- 우리는 이러한 사용 - https://help.ubuntu.com/community/CloudInit

이 기능은 우리를있게 이러한 AMI를의 기능의 http://aws.amazon.com/amazon-linux-ami/

한 CloudInit입니다 새로 생성 된 일반 바닐라 EC2 인스턴스에 일부 데이터를 전달합니다. 특히 우리는 인스턴스에 실행할 스크립트를 제공합니다.

  1. 업그레이드 자체 (적용되는 모든 보안 패치 및 버그 수정 확인) :
    (요컨대) 스크립트는 다음을 수행합니다.
  2. Git과 Puppet을 설치합니다.
  3. Github에서 Git repo를 복제합니다.
  4. 자체 구성을 위해 꼭두각시 스크립트 (repo의 일부)를 적용합니다. Puppet은 필요한 나머지 소프트웨어 모듈을 설치합니다.

사전 구성된 AMI에서 부팅하는 것보다 시간이 오래 걸리지 만 소프트웨어를 업데이트 할 때마다 (실제로는 일주일에 두 번씩) 이러한 AMI를 실제로 작성하는 과정을 건너 뛰고 서버는 항상 "깨끗합니다 "- 수동 패치가 없으며 모든 소프트웨어 모듈이 최신 버전입니다.

이제 소프트웨어를 업그레이드하기 위해 로컬 boto 스크립트를 사용합니다. 스크립트는 이전 코드를 실행중인 서버를 하나씩 kill합니다. Auto Scaling 메커니즘은 새로운 (그리고 업그레이드 된) 서버를 시작합니다.을 사용하면 상태 확인에 실패 할 때까지 ELB가 트래픽을 종료 인스턴스로 계속 보내 게되므로 as-terminate-instance-in-auto-scaling-group을 사용해야합니다.

흥미 롭 관련 블로그 게시물 : http://blog.codento.com/2012/02/hello-ec2-part-1-bootstrapping-instances-with-cloud-init-git-and-puppet/

+0

코드 명 블로그에 다시 게시 : 시작하기위한 AMI 스냅 샷을 만드는 것만으로는 충분하지 않은 것 같습니다. '문제는 새로운 기본 AMI로 업그레이드 할 때마다 프로세스를 반복해야한다는 것입니다. 스케일링 포인트, 이것은 끔찍한 속도입니다. 나는 당신이 인스턴스를 죽이는 것을 보았다. (ec2 팁 대 감사). 그러나 ec2 인스턴스의 var/www/디렉토리 repo를 git 복제본으로 간단히 업데이트하고 서버를 계속 실행하는 방법은? 새로운 자동 크기 조정 된 인스턴스도 거기에서 끌어옵니다. 그런 간단한 접근법에 문제가 있습니까? – Ricalsin

+0

분명히 기존 서버를 패치하는 것이 더 빠릅니다. 최종 사용자를 관리하지 않기 위해 웹 서버를 다시 시작한 상태에서 ELB를 동기화하는 방법을 모르겠습니다. 또한 사용량이 최대치에 도달 한 후 약 5 분 동안 아무런 문제없이 서버에 가입 할 때까지 아무런 문제가 없습니다. 제 유스 케이스에서는 충분히 빠릅니다. 나는 대부분의 경우에 앞서 경보를 울린다. –

-2

당신이 수동으로 이중 자동 스케일링 그룹 크기, 그것은 현재 실행 구성에서 AMI를 사용하여 EC2 인스턴스를 생성합니다 수 있습니다 나타납니다. 이전 크기로 다시 자동 스케일링 그룹을 줄이면 이제 기존 인스턴스가 살해되고 새로운 AMI에서 생성 된 인스턴스 만이 살아남을 것입니다.

관련 문제