블루/그린 배포 전환 - Amazon Aurora

블루/그린 배포 전환

전환은 그린 환경에 있는 DB 클러스터를 자체 DB 인스턴스와 함께 프로덕션 DB 클러스터로 승격합니다. 전환하기 전에는 프로덕션 트래픽이 블루 환경의 클러스터로 라우팅됩니다. 전환한 후에는 프로덕션 트래픽이 그린 환경의 DB 클러스터로 라우팅됩니다.

전환 제한 시간

30초에서 3,600초(1시간) 사이의 전환 제한 시간을 지정할 수 있습니다. 전환이 지정된 기간보다 오래 걸린다면, 모든 변경 사항이 롤백되고 어느 환경도 변경되지 않습니다. 기본 제한 시간은 300초(5분)입니다.

전환 가드레일

전환을 시작하면 Amazon RDS는 몇 가지 기본 검사를 실행하여 블루 및 그린 환경이 전환 준비가 되었는지 테스트합니다. 이러한 검사를 전환 가드레일이라고 합니다. 이러한 전환 가드레일은 환경이 준비되지 않았다면 전환이 진행되지 않게 합니다. 따라서 예상보다 긴 다운타임을 방지하고, 전환이 시작되면 발생할 수 있는 블루 및 그린 환경 간의 데이터 손실을 방지할 수 있습니다.

Amazon RDS는 그린 환경에서 다음 가드레일 검사를 실행합니다.

  • 복제 상태 – 그린 DB 클러스터 복제 상태가 정상인지 확인합니다. 그린 DB 클러스터는 블루 DB 클러스터의 복제본입니다.

  • 복제 지연 - 그린 DB 클러스터의 복제 지연이 전환의 허용 한계 이내인지 확인합니다. 허용 한계는 지정된 제한 시간을 기준으로 합니다. 복제 지연은 그린 DB 클러스터가 자신의 블루 DB 클러스터보다 얼마나 뒤쳐져 있는지를 나타냅니다. 자세한 내용은 Aurora MySQL의 경우 읽기 전용 복제본 간 지연 문제 진단 및 해결, Aurora PostgreSQL의 경우 Aurora PostgreSQL 복제 모니터링 섹션을 참조하세요.

  • 활성 쓰기 - 그린 DB 클러스터에서 활성 쓰기가 없는지 확인합니다.

Amazon RDS는 블루 환경에서 다음 가드레일 검사를 실행합니다.

  • 외부 복제 - Aurora PostgreSQL의 경우 블루 환경이 자체 관리되는 논리적 소스(게시자) 또는 복제본(구독자)이 아니어야 합니다. 자체 관리되는 논리적 소스 또는 복제본인 경우 블루 환경의 모든 데이터베이스에서 자체 관리형 복제 슬롯과 구독을 삭제하고 전환을 진행한 다음 다시 생성하여 복제를 재개하는 것이 좋습니다. Aurora MySQL의 경우 파란색 데이터베이스가 외부 binlog 복제본이 아닌지 확인합니다. 있는 경우 활발하게 복제하고 있지 않은지 확인합니다.

  • 장기 실행 활성 쓰기 - 블루 DB 클러스터에 복제 지연을 늘릴 수 있는 장기 실행 활성 쓰기가 없는지 확인합니다.

  • 장기 실행 DDL 문 - 블루 DB 클러스터에 복제 지연을 늘릴 수 있는 장기 실행 DDL 문이 없는지 확인합니다.

  • 지원되지 않는 PostgreSQL 변경 - Aurora PostgreSQL DB 클러스터의 경우 블루 환경에서 DDL 변경이나 대형 객체의 추가 또는 수정이 수행되지 않았는지 확인합니다. 자세한 내용은 블루/그린 배포를 위한 PostgreSQL 논리적 복제 제한 단원을 참조하십시오.

    Amazon RDS가 지원되지 않는 PostgreSQL 변경을 감지하면 복제 상태를 Replication degraded로 변경하고 블루/그린 배포에서 전환을 사용할 수 없음을 알립니다. 전환을 진행하려면 블루/그린 배포와 모든 그린 데이터베이스를 삭제하고 다시 생성하는 것이 좋습니다. 이렇게 하려면 작업, 그린 데이터베이스를 사용한 삭제를 선택합니다.

전환 작업

블루/그린 배포로 전환하면 RDS는 다음 작업을 수행합니다.

  1. 가드레일 검사를 실행하여 블루 및 그린 환경이 전환 준비가 되었는지 확인합니다.

  2. 두 환경 모두에서 DB 클러스터에 대한 신규 쓰기 작업을 중지합니다.

  3. 두 환경 모두에서 DB 인스턴스에 대한 연결을 끊고 새 연결을 허용하지 않습니다.

  4. 그린 환경이 블루 환경과 동기화되도록, 그린 환경에서 복제가 충분히 진행될 때까지 기다립니다.

  5. 두 환경 모두에서 DB 클러스터와 DB 인스턴스의 이름을 바꿉니다.

    RDS는 그린 환경의 DB 클러스터와 DB 인스턴스의 이름을 블루 환경의 대응하는 DB 클러스터 및 DB 인스턴스와 일치하도록 변경합니다. 예를 들어 블루 환경의 DB 인스턴스 이름이 mydb라고 가정하겠습니다. 또한 그린 환경의 대응하는 DB 인스턴스의 이름은 mydb-green-abc123이라고 가정하겠습니다. 전환 중에는 그린 환경의 DB 인스턴스 이름이 mydb로 변경됩니다.

    RDS는 블루 환경의 DB 클러스터 및 DB 인스턴스의 현재 이름에 -oldn을 추가하여 이름을 변경합니다(n은 숫자입니다). 예를 들어 블루 환경의 DB 인스턴스 이름이 mydb라고 가정하겠습니다. 전환이 끝나면 DB 인스턴스의 이름은 mydb-old1이 됩니다.

    또한 RDS는 블루 환경의 대응하는 엔드포인트와 일치하도록 그린 환경의 엔드포인트 이름을 변경하므로, 애플리케이션은 변경하지 않아도 됩니다.

  6. 두 환경 모두에서 데이터베이스 연결을 허용합니다.

  7. 새 프로덕션 환경에서 DB 클러스터에 대한 쓰기 작업을 허용합니다.

    전환이 끝나면 이전 프로덕션 DB 클러스터는 읽기 작업만 허용합니다. DB 클러스터에서 read_only 파라미터를 비활성화하더라도 블루/그린 배포를 삭제하기 전까지는 읽기 전용으로 유지됩니다.

Amazon EventBridge를 사용하여 전환 상태를 모니터링할 수 있습니다. 자세한 내용은 블루/그린 배포 이벤트 단원을 참조하십시오.

블루 환경에서 태그를 구성했다면 이러한 태그는 전환 중에 새 프로덕션 환경으로 복사됩니다. 태그에 대한 자세한 내용은 Amazon RDS 리소스에 태그 지정 단원을 참조하세요.

어떤 이유로든 전환이 시작된 후 종료되기 전에 중지되면, 모든 변경 사항이 롤백되고 두 환경 모두 변경되지 않습니다.

전환 모범 사례

전환하기 전에 다음 작업을 완료하여 모범 사례를 준수하는 것이 좋습니다.

  • 그린 환경에서 리소스를 철저히 테스트합니다. 정상적이고 효율적으로 작동하는지 확인합니다.

  • 관련 Amazon CloudWatch 지표를 모니터링합니다. 자세한 내용은 전환 전 CloudWatch 지표 확인 단원을 참조하십시오.

  • 전환에 가장 적합한 시간을 확인합니다.

    전환 중에는 두 환경 모두의 데이터베이스에서 쓰기가 차단됩니다. 프로덕션 환경에서 트래픽이 가장 적은 시간을 확인합니다. 활성 DDL 같이 오래 실행되는 트랜잭션은 전환 시간이 길며, 그 결과 프로덕션 워크로드의 다운타임이 길어질 수 있습니다.

    DB 클러스터에 다수의 연결이 있는 경우 블루/그린 배포로 전환하기 전에 애플리케이션에 필요한 최소한의 개수로 연결을 수동으로 줄이는 것이 좋습니다. 이를 위한 한 가지 방법은 블루/그린 배포의 상태를 모니터링하고 상태가 SWITCHOVER_IN_PROGRESS로 변경되었음을 감지하면 연결 정리를 시작하는 스크립트를 만드는 것입니다.

  • 두 환경 모두에서 DB 클러스터 및 DB 인스턴스Available 상태인지 확인합니다.

  • 그린 환경의 DB 클러스터가 정상 상태이고 복제 중인지 확인합니다.

  • 네트워크 및 클라이언트 구성으로 인해 DNS 캐시 TTL(Time-to-Live)이 Aurora DNS 영역의 기본값인 5초 이상으로 늘어나지 않도록 해야 합니다. 
 그렇지 않으면 애플리케이션은 전환 후에도 계속해서 쓰기 트래픽을 블루 환경으로 전송합니다.

  • Aurora PostgreSQL DB 인스턴스의 경우 다음을 수행하세요.

    • 논리적 복제 제한을 검토하고 전환하기 전에 필요한 조치를 취합니다. 자세한 내용은 블루/그린 배포를 위한 PostgreSQL 논리적 복제 제한 단원을 참조하십시오.

    • ANALYZE 작업을 실행하여 pg_statistics 테이블을 새로 고칩니다. 이렇게 하면 전환 후 성능 문제가 발생할 위험이 줄어듭니다.

참고

전환 중에는 전환에 포함된 DB 클러스터를 수정할 수 없습니다.

전환 전 CloudWatch 지표 확인

블루/그린 배포를 전환하기 전에 Amazon CloudWatch 내에서 다음 지표를 확인하는 것이 좋습니다.

  • DatabaseConnections - 이 지표를 사용하여 블루/그린 배포의 작업 수준을 예측하고 전환하기 전에 값이 배포에 적합한 수준인지 확인합니다. 성능 개선 도우미가 활성화되어 있으면 DBLoad가 더 정확한 지표입니다.

  • ActiveTransactions - DB 인스턴스의 DB 파라미터 그룹에서 innodb_monitor_enableall로 설정된 경우 이 지표를 사용하여 전환을 차단할 수 있는 활성 트랜잭션이 많은지 확인합니다.

이러한 지표에 대한 자세한 내용은 Amazon Aurora에 대한 Amazon CloudWatch 지표 섹션을 참조하세요.

전환 전 복제 지연 모니터링

블루/그린 배포를 전환하기 전에 가동 중지 시간을 줄이기 위해 그린 데이터베이스의 복제 지연이 0에 가까운지 확인합니다.

  • Aurora MySQL의 경우 AuroraBinlogReplicaLag CloudWatch 지표를 사용하여 그린 환경의 현재 복제 지연을 식별합니다.

  • Aurora PostgreSQL의 경우 다음 SQL 쿼리를 사용하세요.

    SELECT slot_name, confirmed_flush_lsn as flushed, pg_current_wal_lsn(), (pg_current_wal_lsn() - confirmed_flush_lsn) AS lsn_distance FROM pg_catalog.pg_replication_slots WHERE slot_type = 'logical'; slot_name | flushed | pg_current_wal_lsn | lsn_distance -----------------+---------------+--------------------+------------ logical_replica1 | 47D97/CF32980 | 47D97/CF3BAC8 | 37192

    confirmed_flush_lsn은 복제본으로 전송된 마지막 로그 시퀀스 번호(LSN)을 나타냅니다. pg_current_wal_lsn은 데이터베이스의 현재 위치를 나타냅니다. lsn_distance가 0이라는 것은 최신 복제본까지 처리되었음을 의미합니다.

블루/그린 배포로의 전환

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 블루/그린 배포로 전환할 수 있습니다.

블루/그린 배포로 전환하는 방법
  1. https://console.aws.amazon.com/rds/에서 AWS Management Console에 로그인한 후 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 Databases(데이터베이스)를 선택한 후 전환할 블루/그린 배포를 선택합니다.

  3. Actions(작업)에서 Switch over(전환)을 선택합니다.

    Switch over(전환) 페이지가 표시됩니다.

    블루/그린 배포로 전환
  4. Switch over(전환) 페이지에서 전환 요약을 확인합니다. 두 환경의 리소스가 예상과 일치하는지 확인합니다. 일치하지 않는다면 Cancel(취소)를 선택합니다.

  5. 제한 시간 설정에 전환 제한 시간을 입력합니다.

  6. 클러스터에서 Aurora PostgreSQL을 실행하는 경우 전환 전 권장 사항을 검토하고 확인하세요. 자세한 내용은 블루/그린 배포를 위한 PostgreSQL 논리적 복제 제한 단원을 참조하십시오.

  7. Switch over(전환)을 선택합니다.

AWS CLI를 사용하여 블루/그린 배포로 전환하려면 다음 옵션을 지정한 switchover-blue-green-deployment 명령을 사용해야 합니다.

  • --blue-green-deployment-identifier - 블루/그린 배포의 리소스 ID를 지정합니다.

  • --switchover-timeout - 전환의 제한 시간을 초 단위로 지정합니다. 기본값은 300입니다.

예 블루/그린 배포로 전환

대상 LinuxmacOS, 또는Unix:

aws rds switchover-blue-green-deployment \ --blue-green-deployment-identifier bgd-1234567890abcdef \ --switchover-timeout 600

Windows의 경우:

aws rds switchover-blue-green-deployment ^ --blue-green-deployment-identifier bgd-1234567890abcdef ^ --switchover-timeout 600

Amazon RDS API를 사용하여 블루/그린 배포로 전환하려면 다음 파라미터를 적용한 SwitchoverBlueGreenDeployment 작업을 사용해야 합니다.

  • BlueGreenDeploymentIdentifier - 블루/그린 배포의 리소스 ID를 지정합니다.

  • SwitchoverTimeout - 전환의 제한 시간을 초 단위로 지정합니다. 기본값은 300입니다.

전환 후

전환한 후에는 이전 블루 환경의 DB 클러스터 및 DB 인스턴스가 유지됩니다. 이러한 리소스에는 표준 요금이 적용됩니다. 블루와 그린 환경 간의 복제 및 바이너리 로깅이 중지됩니다.

RDS는 블루 환경의 DB 클러스터 및 DB 인스턴스의 현재 이름에 -oldn을 추가하여 이름을 변경합니다(n은 숫자입니다). DB 클러스터는 강제로 읽기 전용 상태가 됩니다. DB 클러스터에서 read_only 파라미터를 비활성화하더라도 블루/그린 배포를 삭제하기 전까지는 읽기 전용으로 유지됩니다.

블루/그린 배포로의 전환 후

소비자를 위한 상위 노드 업데이트

Aurora MySQL 블루/그린 배포로 전환한 후, 블루 DB 클러스터에 전환 이전의 외부 복제본 또는 이진 로그 소비자가 있었던 경우, 전환 후에 상위 노드를 업데이트해야 복제 연속성을 유지할 수 있습니다.

전환 후 이전에 그린 환경에 있었던 라이터 DB 인스턴스는 마스터 로그 파일 이름 및 마스터 로그 위치가 포함된 이벤트를 내보냅니다. 예:

aws rds describe-events --output json --source-type db-instance --source-identifier db-instance-identifier { "Events": [ ... { "SourceIdentifier": "db-instance-identifier", "SourceType": "db-instance", "Message": "Binary log coordinates in green environment after switchover: file mysql-bin-changelog.000003 and position 804", "EventCategories": [], "Date": "2023-11-10T01:33:41.911Z", "SourceArn": "arn:aws:rds:us-east-1:123456789012:db:db-instance-identifier" } ] }

먼저 소비자 또는 복제본이 이전 블루 환경의 모든 이진 로그를 적용했는지 확인하세요. 그런 다음 제공된 이진 로그 좌표를 사용하여 소비자에 대한 적용을 재개하세요. 예를 들어, EC2에서 MySQL 복제본을 실행하는 경우 CHANGE MASTER TO 명령을 사용할 수 있습니다.

CHANGE MASTER TO MASTER_HOST='{new-writer-endpoint}', MASTER_LOG_FILE='mysql-bin-changelog.000003', MASTER_LOG_POS=804;