Neptune 블루/그린 솔루션을 사용하여 블루-그린 업데이트 수행 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Neptune 블루/그린 솔루션을 사용하여 블루-그린 업데이트 수행

Amazon Neptune 엔진 업그레이드에는 업데이트를 설치하고 검증하는 동안 데이터베이스를 사용할 수 없으므로 애플리케이션 다운타임이 필요할 수 있습니다. 수동으로 시작하든 자동으로 시작하든 관계없이 모두 해당합니다.

Neptune은 AWS CloudFormation 스택을 사용하여 실행할 수 있는 블루/그린 배포 솔루션을 제공하므로 이러한 다운타임을 크게 줄일 수 있습니다. 이를 통해 블루 프로덕션 환경과 동기화되는 그린 스테이징 환경을 만들 수 있습니다. 이제 해당 스테이징 환경을 업데이트하여 마이너 또는 메이저 엔진 버전 업그레이드, 그래프 데이터 모델 변경 또는 운영 체제 업데이트를 수행하고 결과를 테스트할 수 있습니다. 마지막으로 다운타임이 거의 없는 운영 환경으로 빠르게 전환할 수 있습니다.

Neptune 블루/그린 솔루션은 다음 다이어그램에 나와 있는 것처럼 두 단계를 거칩니다.

블루-그린 배포 전략의 개괄적인 흐름도

1단계: 프로덕션 클러스터와 동일한 그린 DB 클러스터 생성

이 솔루션은 고유한 블루/그린 배포 식별자를 사용하고 프로덕션 클러스터와 동일한 클러스터 토폴로지를 사용하여 DB 클러스터를 생성합니다. 즉, 지정한 대상 엔진 버전으로 업그레이드되어 현재(블루) 엔진 버전보다 버전이 높아야 한다는 점을 제외하면 프로덕션(블루) DB 클러스터와 동일한 DB 인스턴스 수와 크기, 파라미터 그룹 및 구성이 동일합니다. 대상에 마이너 엔진 버전과 메이저 엔진 버전을 지정할 수 있습니다. 필요하다면 솔루션은 지정된 대상 엔진 버전에 도달하는 데 필요한 모든 중간 업그레이드를 수행합니다. 이 새 클러스터는 그린 스테이징 환경이 됩니다.

2단계: 지속적인 데이터 동기화 설정

그린 환경이 완전히 준비된 후, 솔루션은 Neptune 스트림을 사용하여 소스(블루) 클러스터와 대상(그린) 클러스터 간에 연속 복제를 설정합니다. 둘 사이의 복제 차이가 0에 도달하면 스테이징 환경을 테스트할 준비가 됩니다. 이때 추가 복제 지연을 방지하려면 블루 클러스터에 쓰기를 일시 중지해야 합니다.

대상 엔진 버전에 애플리케이션에 영향을 미치는 새로운 기능이나 종속성이 있을 수 있습니다. 대상 엔진 릴리스 페이지와 엔진 릴리스 아래의 중간 엔진 릴리스 페이지를 확인하여 현재 엔진 버전 이후 변경된 사항을 확인하세요. 프로덕션 환경으로 승격하기 전에 그린 클러스터에서 통합 테스트를 실행하거나 애플리케이션을 수동으로 확인하는 것이 가장 좋습니다.

그린 클러스터의 변경 사항을 테스트하고 검증한 후에는 애플리케이션의 데이터베이스 엔드포인트를 블루 클러스터에서 그린 클러스터로 전환하기만 하면 됩니다.

전환 후 Neptune 블루/그린 솔루션은 이전의 블루 프로덕션 환경을 삭제하지 않습니다. 필요하다면 추가 검증 및 테스트를 위해 계속 액세스할 수 있습니다. 인스턴스를 삭제하기 전까지는 인스턴스에 표준 청구 요금이 적용됩니다. 블루/그린 솔루션은 다른 AWS 서비스도 사용하며, 해당 서비스에 대한 비용은 일반 가격으로 청구됩니다. 솔루션 사용 완료 시 솔루션 삭제에 대한 자세한 내용은 정리 섹션에서 다룹니다.

Neptune 블루/그린 스택 실행을 위한 사전 요구 사항

Neptune 블루/그린 스택 시작 전:

  • 프로덕션(블루) 클러스터에서 Neptune 스트림을 활성화해야 합니다.

  • 블루 클러스터의 모든 인스턴스가 사용 가능한 상태여야 합니다. Neptune 콘솔에서 또는 describe-db-instance API를 사용하여 인스턴스 상태를 확인할 수 있습니다.

  • 또한 모든 인스턴스는 DB 클러스터 파라미터 그룹과 동기화되어야 합니다.

  • Neptune 블루/그린 솔루션을 사용하려면 블루 클러스터가 위치한 VPC에 DynamoDB VPC 엔드포인트가 있어야 합니다. Amazon VPC 엔드포인트를 사용하여 DynamoDB에 액세스를 참조하세요.

  • 블루 프로덕션 DB 클러스터의 쓰기 워크로드가 최대한 적은 시간에 솔루션을 실행하도록 선택하세요. 예를 들어, 대량 로드가 발생하거나 다른 이유로 쓰기 작업 수가 많을 가능성이 있다면 솔루션을 실행하지 마세요.

AWS CloudFormation 템플릿을 사용하여 Neptune 블루/그린 솔루션 실행

AWS CloudFormation을 사용하여 Neptune 블루/그린 솔루션을 배포할 수 있습니다. CloudFormation 템플릿은 블루 소스 Neptune 데이터베이스와 동일한 VPC에서 Amazon EC2 인스턴스를 생성하고, 여기에 솔루션을 설치하고 실행합니다. 진행 상황 모니터링에 설명된 대로 CloudWatch 로그에서 진행 상황을 모니터링할 수 있습니다.

다음 링크를 사용하여 솔루션 템플릿을 검토하거나 스택 시작 버튼을 선택하여 AWS CloudFormation 콘솔에서 실행할 수 있습니다.

콘솔의 창 오른쪽 상단에 있는 드롭다운에서 솔루션을 실행할 AWS 리전을 선택합니다.

스택 파라미터를 다음과 같이 설정합니다.

  • DeploymentID - 각 Neptune 블루/그린 배포에 고유한 식별자입니다.

    이는 그린 DB 클러스터 식별자로 사용되며, 배포 중에 생성되는 새 리소스의 이름을 지정하는 접두사로 사용됩니다.

  • NeptuneSourceClusterId - 업그레이드하려는 블루 DB 클러스터의 식별자입니다.

  • NeptuneTargetClusterVersion: - 블루 DB 클러스터를 업그레이드하려는 Neptune 엔진 버전입니다.

    현재 블루 DB 클러스터의 엔진 버전보다 높아야 합니다.

  • DeploymentMode - 새 배포인지 아니면 이전 배포를 재개하려는 시도인지를 나타냅니다. 이전 배포와 동일한 DeploymentID를 사용하는 경우 DeploymentModeresume으로 설정하세요.

    유효한 값은 new(기본값) 및 resume입니다.

  • GraphQueryType - 데이터베이스의 그래프 데이터 유형입니다.

    유효한 값은 propertygraph(기본값) 및 rdf입니다.

  • SubnetId - 블루 DB 클러스터가 위치한 동일한 VPC의 서브넷 ID입니다(Connecting to a Neptune DB Cluster from an Amazon EC2 instance in the same VPC 참조).

    EC2 Connect를 통해 인스턴스에 SSH로 연결하려면 퍼블릭 서브넷의 ID를 제공하세요.

  • InstanceSecurityGroup - Amazon EC2 인스턴스를 위한 보안 그룹입니다.

    보안 그룹은 블루 DB 클러스터에 액세스할 수 있어야 하며 사용자는 인스턴스에 SSH로 연결할 수 있어야 합니다. VPC 콘솔을 사용하여 보안 그룹 생성 섹션을 참조하세요.

스택이 완료될 때까지 기다리세요. 완료되자마자 솔루션이 시작됩니다. 그런 다음 다음 섹션에 설명된 대로 CloudWatch 로그를 사용하여 배포 프로세스를 모니터링할 수 있습니다.

Neptune 블루/그린 배포 진행 상황 모니터링

CloudWatch 콘솔로 이동하여 /aws/neptune/(Neptune Blue/Green deployment ID) CloudWatch 로그 그룹의 로그를 살펴보면 Neptune 블루/그린 솔루션의 진행 상황을 모니터링할 수 있습니다. 솔루션 AWS CloudFormation 스택의 출력에서 CloudWatch 로그로 연결되는 링크를 찾을 수 있습니다.

블루/그린 AWS CloudFormation 스택 출력 스크린샷

퍼블릭 서브넷을 스택 파라미터로 제공하면 스택의 일부로 생성된 Amazon EC2 인스턴스에 SSH로 연결하고 /var/log/cloud-init-output.log의 로그를 참조할 수도 있습니다.

이 로그에는 다음 스크린샷과 같이 Neptune 블루/그린 솔루션에서 수행한 작업이 표시됩니다.

Neptune 블루/그린 로그 화면 스크린샷

로그 메시지는 블루 클러스터와 그린 클러스터 간의 동기화 상태를 보여줍니다.

Neptune 블루/그린 솔루션 로그 메시지 스크린샷

동기화 프로세스는 블루 클러스터의 최신 스트림 eventID와 Neptune-to-Neptune 복제 스택으로 생성된 DynamoDB 체크포인트 테이블에 있는 복제 체크포인트 간의 차이를 계산하여 복제 지연을 확인합니다. 이 메시지를 사용하여 현재 복제 차이를 모니터링할 수 있습니다.

프로덕션 블루 클러스터에서 업데이트된 그린 클러스터로 전환

그린 클러스터를 프로덕션으로 승격하기 전에 블루 클러스터와 그린 클러스터 간의 커밋 차이가 0인지 확인한 다음 블루 클러스터에 대한 모든 쓰기 트래픽을 비활성화하세요. 데이터베이스 엔드포인트를 그린 클러스터로 전환하는 동안 블루 클러스터에 계속 쓰면 양쪽 클러스터에 일부 데이터가 쓰여져 데이터가 손상될 수 있습니다. 아직 읽기 트래픽을 비활성화하지 않아도 될 수 있습니다.

소스(블루) 클러스터에서 IAM 인증을 활성화한 경우 애플리케이션에 사용되는 모든 IAM 정책이 그린 클러스터를 가리키도록 업데이트해야 합니다(이러한 정책의 예는 이 무제한 액세스 정책 참조).

쓰기 트래픽을 비활성화한 후에는 복제가 완료될 때까지 기다린 다음 그린 클러스터(블루 클러스터 제외)에서 쓰기 트래픽을 활성화합니다. 읽기 트래픽도 블루에서 그린 클러스터로 전환합니다.

Neptune 블루/그린 솔루션 완료 후 정리

스테이징(그린) 클러스터를 프로덕션으로 승격시킨 후 Neptune 블루/그린 솔루션으로 생성된 리소스를 정리하세요.

  • 솔루션을 실행하기 위해 만든 Amazon EC2 인스턴스를 삭제합니다.

  • 그린 클러스터를 블루 클러스터와 동기화한 상태로 유지한 Neptune 스트림 기반 복제의 AWS CloudFormation 템플릿을 삭제합니다. 기본 스택은 이전에 제공한 스택 이름을 사용하며, 하나는 배포 ID 뒤에 “-replication”, 즉, (DeploymentID)-replication이 붙는 것으로 구성됩니다.

AWS CloudFormation 템플릿을 삭제해도 클러스터 자체는 삭제되지 않습니다. 그린 클러스터가 예상대로 작동하는지 확인한 후에는 블루 클러스터를 수동으로 삭제하기 전에 스냅샷을 찍을 수도 있습니다.

Neptune 블루/그린 솔루션 모범 사례

  • 그린 클러스터를 프로덕션으로 전환하기 전에 제대로 작동하는지 철저하게 확인하는 것이 좋습니다. 데이터의 일관성과 데이터베이스 구성을 확인하세요. 일부 새 엔진 버전에는 클라이언트 업그레이드가 필요할 수도 있습니다. 업그레이드하기 전에 엔진 릴리스 노트를 확인하세요. 프로덕션 환경에서 블루/그린 업그레이드를 시작하기 전에 개발, 테스트 및 사전 프로덕션 환경에서 이 모든 것을 테스트해 보는 것이 좋습니다.

  • 유지 관리 기간 중에 블루 서버에서 그린 서버로 전환하는 것이 가장 좋습니다.

  • 업그레이드 및 동기화 후 모든 것이 제대로 작동하도록 하려면 소스 클러스터를 삭제하기 전에 일정 기간 동안 유지하는 것이 좋습니다. 예상치 못한 문제가 발생할 경우 유용할 수 있습니다.

  • Neptune 블루/그린 솔루션을 실행할 때 상당한 다운타임을 초래하는 복제 지연을 초래할 수 있으므로 대량 로드와 같은 과도한 쓰기 작업을 피합니다. 이상적으로는 블루 클러스터에 대한 쓰기를 해제한 후 그린 클러스터에 대한 쓰기를 활성화하는 데 걸리는 시간이 몇 분 밖에 걸리지 않는 것이 좋습니다.

Neptune 블루/그린 솔루션 문제 해결

Neptune 블루/그린 솔루션에서 발생한 오류
  • Cluster with id = (blue_green_deployment_id) already exists - 식별자(blue_green_deployment_id)를 가진 기존 클러스터가 있습니다.

    새 배포 ID를 제공하거나 이전 Neptune 블루/그린 실행에서 클러스터를 생성한 경우 resume에 배포 모드를 설정합니다.

  • Streams should be enabled on the source Cluster for Blue Green Deployment - 블루(소스) 클러스터에서 Neptune 스트림을 활성화합니다.

  • No Bulkload should be in progress on source cluster: (cluster_id) - Neptune 블루/그린 솔루션은 진행 중인 대량 로드를 식별하면 종료됩니다.

    이는 동기화 프로세스가 쓰기 작업을 따라잡을 수 있도록 하기 위한 것입니다. Neptune 블루/그린 솔루션을 시작하기 전에 진행 중인 대량 로드 작업을 피하거나 취소하세요.

  • Blue Green deployment requires instances to be in sync with db cluster parameter group - 클러스터 파라미터 그룹의 모든 변경 사항은 DB 클러스터 전체에서 동기화되어야 합니다. Amazon Neptune 파라미터 그룹 섹션을 참조하세요.

  • Invalid target engine version for Blue Green Deployment - 대상 엔진 버전은 Amazon Neptune의 엔진 릴리스에서 활성 상태로 나열되어야 하며 소스(블루) 클러스터의 현재 엔진 릴리스보다 높아야 합니다.