장애 조치 후 Aurora PostgreSQL용 클러스터 캐시 관리를 통한 신속한 복구 - Amazon Aurora

장애 조치 후 Aurora PostgreSQL용 클러스터 캐시 관리를 통한 신속한 복구

장애 조치가 발생한 경우 Aurora PostgreSQL 클러스터에 라이터 DB 인스턴스를 신속하게 복구하려면 Amazon Aurora PostgreSQL용 클러스터 캐시 관리를 사용하십시오. 장애 조치가 발생한 경우 클러스터 캐시 관리를 통해 애플리케이션 성능을 유지할 수 있습니다.

일반적인 장애 조치 상황에서는 장애 조치 후 일시적이지만 큰 성능 저하를 겪을 수 있습니다. 이러한 현상이 일어나는 이유는 장애 조치 DB 인스턴스가 시작될 때 버퍼 캐시가 비어 있기 때문입니다. 빈 캐시는 콜드 캐시라고도 합니다. 콜드 캐시로 인해 성능이 저하되는 이유는 DB 인스턴스가 버커 캐시에 저장된 값을 이용하는 대신에 속도가 느려진 디스크에서 읽어야 하기 때문입니다.

클러스터 캐시 관리를 통해 특정 리더 DB 인스턴스를 장애 조치 대상으로 설정하십시오. 클러스터 캐시 관리는 지정된 리더의 캐시가 라이터 DB 인스턴스의 캐시에 있는 데이터와 동기화된 상태를 유지하도록 보장합니다. 미리 채워진 값이 있는 지정된 리더의 캐시는 웜 캐시라고도 합니다. 장애 조치가 발생하면 지정된 리더는 새로운 라이터 DB 인스턴스로 승격될 때 즉시 웜 캐시에 있는 값을 사용합니다. 이러한 접근 방식을 통해 애플리케이션의 복구 성능이 대폭 향상됩니다.

클러스터 캐시 관리를 사용하려면 지정된 리더 인스턴스의 인스턴스 클래스 유형 및 크기(예: db.r5.2xlarge 또는 db.r5.xlarge)가 라이터와 같아야 합니다. Aurora PostgreSQL DB 클러스터를 생성할 때 이 점을 염두에 두어 장애 조치 중에 클러스터가 복구될 수 있도록 해야 합니다. 인스턴스 클래스 유형 및 크기 목록은 Aurora용 DB 인스턴스 클래스의 하드웨어 사양을 참조하세요.

참고

Aurora 글로벌 데이터베이스의 일부인 Aurora PostgreSQL DB 클러스터에는 클러스터 캐시 관리가 지원되지 않습니다. 지정된 Tier-0 리더에서는 워크로드를 실행하지 않는 것이 좋습니다.

클러스터 캐시 관리 구성

클러스터 캐시 관리를 구성하려면 다음 프로세스를 순서대로 수행합니다.

참고

구성 절차를 마친 후 클러스터 캐시 관리 기능이 완전하게 실행되려면 최소 1분이 지나야 합니다.

클러스터 캐시 관리 활성화

클러스터 캐시 관리를 활성화하려면 아래 설명된 단계를 수행합니다.

클러스터 캐시 관리를 활성화하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 파라미터 그룹을 선택합니다.

  3. 목록에서 Aurora PostgreSQL DB 클러스터의 파라미터 그룹을 선택합니다.

    DB 클러스터에서는 기본값이 아닌 파라미터 그룹을 사용해야 합니다. 기본 파라미터 그룹에서는 값을 변경할 수 없기 때문입니다.

  4. 파라미터 그룹 작업에서 편집을 선택합니다.

  5. apg_ccm_enabled 클러스터 파라미터의 값을 1로 설정합니다.

  6. 변경 사항 저장을 선택합니다.

Aurora PostgreSQL DB 클러스터에 대해 클러스터 캐시 관리를 사용 설정하려면 다음 필수 파라미터와 함께 AWS CLI modify-db-cluster-parameter-group 명령을 사용합니다.

  • --db-cluster-parameter-group-name

  • --parameters

Linux, macOS, Unix:

aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name my-db-cluster-parameter-group \ --parameters "ParameterName=apg_ccm_enabled,ParameterValue=1,ApplyMethod=immediate"

Windows의 경우:

aws rds modify-db-cluster-parameter-group ^ --db-cluster-parameter-group-name my-db-cluster-parameter-group ^ --parameters "ParameterName=apg_ccm_enabled,ParameterValue=1,ApplyMethod=immediate"

라이터 DB 인스턴스에 대한 승격 티어 우선 순위 설정

클러스터 캐시 관리를 위해 Aurora PostgreSQL DB 클러스터의 라이터 DB 인스턴스에 대한 승격 우선 순위는 tier-0이어야 합니다. 승격 티어 우선 순위는 장애 조치 후 Aurora 리더가 라이터 DB 인스턴스로 승격할 순서를 지정하는 값입니다. 유효한 값은 0–15이며, 여기에서 0은 최우선 순위이고 15는 마지막 우선 순위입니다. 승격 티어에 대한 자세한 내용은 Aurora DB 클러스터의 내결함성 단원을 참조하십시오.

라이터 DB 인스턴스에 대해 승격 우선 순위를 설정하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 데이터베이스를 선택합니다.

  3. Aurora PostgreSQL DB 클러스터의 쓰기 DB 인스턴스를 선택합니다.

  4. 수정을 선택합니다. [Modify DB Instance] 페이지가 나타납니다.

  5. 추가 구성 패널에서 장애 조치 우선 순위tier-0을 선택합니다.

  6. [Continue]를 수정 사항을 요약한 내용을 확인합니다.

  7. 변경 사항을 저장한 후 즉시 적용하려면 즉시 적용을 선택합니다.

  8. DB 인스턴스 수정을 선택하여 변경 사항을 저장합니다.

AWS CLI를 사용해 라이터 DB 인스턴스에 대한 승격 티어 우선 순위를 0으로 설정하려면 다음 필수 파라미터와 함께 modify-db-instance 명령을 호출하십시오.

  • --db-instance-identifier

  • --promotion-tier

  • --apply-immediately

Linux, macOS, Unix:

aws rds modify-db-instance \ --db-instance-identifier writer-db-instance \ --promotion-tier 0 \ --apply-immediately

Windows의 경우:

aws rds modify-db-instance ^ --db-instance-identifier writer-db-instance ^ ---promotion-tier 0 ^ --apply-immediately

리더 DB 인스턴스에 대한 승격 티어 우선 순위 설정

클러스터 캐시 관리에 대해 리더 DB 인스턴스를 하나만 설정합니다. 이를 위해서는 라이터 DB 인스턴스와 동일한 인스턴스 클래스와 크기인 Aurora PostgreSQL 클러스터에서 리더를 선택해야 합니다. 예를 들어, 라이터에서 db.r5.xlarge을(를) 사용하면 동일한 인스턴스 클래스 유형 및 크기를 사용하는 리더를 선택합니다. 그런 다음 리더의 승격 티어 우선 순위를 0으로 설정합니다.

승격 티어 우선 순위는 장애 조치 후 Aurora 리더가 라이터 DB 인스턴스로 승격할 순서를 지정하는 값입니다. 유효한 값은 0–15이며, 여기에서 0은 최우선순위이고 15는 마지막 우선순위입니다.

라이터 DB 인스턴스의 승격 우선 순위를 tier-0으로 설정하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 데이터베이스를 선택합니다.

  3. 라이터 DB 인스턴스와 동일한 인스턴스 클래스인 Aurora PostgreSQL DB 클러스터의 읽기 DB 인스턴스를 선택합니다.

  4. 수정을 선택합니다. [Modify DB Instance] 페이지가 나타납니다.

  5. 추가 구성 패널에서 장애 조치 우선 순위tier-0을 선택합니다.

  6. [Continue]를 수정 사항을 요약한 내용을 확인합니다.

  7. 변경 사항을 저장한 후 즉시 적용하려면 즉시 적용을 선택합니다.

  8. DB 인스턴스 수정을 선택하여 변경 사항을 저장합니다.

AWS CLI를 사용해 리더 DB 인스턴스에 대한 승격 티어 우선 순위를 0으로 설정하려면 다음 필수 파라미터와 함께 modify-db-instance 명령을 호출하십시오.

  • --db-instance-identifier

  • --promotion-tier

  • --apply-immediately

Linux, macOS, Unix:

aws rds modify-db-instance \ --db-instance-identifier reader-db-instance \ --promotion-tier 0 \ --apply-immediately

Windows의 경우:

aws rds modify-db-instance ^ --db-instance-identifier reader-db-instance ^ ---promotion-tier 0 ^ --apply-immediately

버퍼 캐시 모니터링

클러스터 캐시 관리를 설정하였으면 이제 라이터 DB 인스턴스의 버퍼 캐시와 지정된 리더의 웜 버퍼 캐시 사이의 동기화 상태를 모니터링할 수 있습니다. 라이터 DB 인스턴스와 지정된 리더 DB 인스턴스에 있는 버퍼 캐시 콘텐츠를 검토하려면 PostgreSQL pg_buffercache 모듈을 사용하십시오. 자세한 내용은 PostgreSQL pg_buffercache 설명서를 참조하십시오.

aurora_ccm_status 함수 사용

클러스터 캐시 관리는 aurora_ccm_status 함수도 제공합니다. 라이터 DB 인스턴스에서 aurora_ccm_status 함수를 사용해 지정된 리더에서 캐시 워밍이 진행되는 과정에 대해 다음과 같은 정보를 얻으십시오.

  • buffers_sent_last_minute – 마지막 순간에 지정된 리더로 전송된 버퍼의 수.

  • buffers_found_last_minute - 지난 1분 동안 식별된 자주 액세스된 버퍼 수입니다.

  • buffers_sent_last_scan – 버퍼 캐시에 대한 마지막 전체 스캔 중에 지정된 리더로 전송된 버퍼의 수.

  • buffers_found_last_scan – 자주 액세스되는 것으로 식별되어 버퍼 캐시에 대한 마지막 전체 스캔 중에 전송되어야 했던 버퍼의 수. 지정된 리더에 이미 캐시된 버퍼는 전송되지 않습니다.

  • buffers_sent_current_scan – 현재 스캔 중에 지금까지 전송된 버퍼의 수.

  • buffers_found_current_scan – 현재 스캔 중에 자주 액세스되는 것으로 식별된 버퍼의 수.

  • current_scan_progress – 현재 스캔 중에 지금까지 방문을 받은 버퍼의 수.

다음 예에서는 aurora_ccm_status 함수를 사용해 출력 중 일부를 웜 속도 및 웜 비율로 변환하는 방법을 보여줍니다.

SELECT buffers_sent_last_minute*8/60 AS warm_rate_kbps, 100*(1.0-buffers_sent_last_scan::float/buffers_found_last_scan) AS warm_percent FROM aurora_ccm_status();

CCM 구성 문제 해결

apg_ccm_enabled 클러스터 파라미터를 활성화하면 라이터 DB 인스턴스의 인스턴스 수준 및 Aurora PostgreSQL DB 클러스터의 리더 DB 인스턴스 1개에서 클러스터 캐시 관리가 자동으로 설정됩니다. 라이터 및 리더 인스턴스는 동일한 인스턴스 클래스 유형과 크기를 사용해야 합니다. 프로모션 티어 우선 순위는 0으로 설정되어 있습니다. DB 클러스터의 다른 리더 인스턴스는 0이 아닌 승격 티어가 있어야 하며 해당 인스턴스에 대해서는 클러스터 캐시 관리가 비활성화되어 있습니다.

다음과 같은 이유로 구성 문제가 발생하고 클러스터 캐시 관리가 비활성화될 수 있습니다.

  • 승격 티어가 0으로 설정된 리더 DB 인스턴스가 하나도 없는 경우

  • 라이터 DB 인스턴스의 승격 티어가 0으로 설정되지 않은 경우

  • 2개 이상의 리더 DB 인스턴스에서 승격 티어가 0으로 설정된 경우

  • 승격 티어가 0인 라이터와 리더 DB 인스턴스 1개의 인스턴스 크기가 같지 않은 경우