재해 복구를 위한 Neptune 스트림 교차 리전 복제 사용 - Amazon Neptune

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

재해 복구를 위한 Neptune 스트림 교차 리전 복제 사용

Neptune은 교차 리전 장애 조치 기능을 구현하는 두 방법을 제공합니다.

  • 교차 리전 스냅샷 복사 및 복원

  • Neptune 스트림을 사용하여 서로 다른 두 리전의 두 클러스터 간에 데이터를 복제합니다.

교차 리전 스냅샷 복사 및 복원은 다른 리전의 Neptune 클러스터를 복구하는 데 드는 운영 오버헤드가 가장 낮습니다. 그러나 스냅샷은 Neptune 클러스터의 전체 백업이므로, 리전 간에 스냅샷을 복사하려면 상당한 데이터 전송 시간이 필요할 수 있습니다. 따라서 시간 단위의 Recovery Point Objective(RPO)와 시간 단위의 Recovery Time Objective(RTO)만 필요한 시나리오에서 교차 리전 스냅샷 복사 및 복원을 사용할 수 있습니다.

Recovery Point Objective(RPO)는 백업 사이의 시간으로 측정됩니다. 이는 마지막 백업을 만든 시점과 데이터베이스를 복구한 시점 사이에 손실될 수 있는 데이터의 양을 정의합니다.

Recovery Time Objective(RTO)는 복구 작업을 수행하는 데 걸리는 시간으로 측정됩니다. 장애 발생 후 DB 클러스터가 복구된 데이터베이스로 장애 조치하는 데 걸리는 시간입니다.

Neptune 스트림은 백업 Neptune 클러스터를 기본 프로덕션 클러스터와 항상 동기화된 상태로 유지하는 방법을 제공합니다. 오류가 발생하면 데이터베이스가 백업 클러스터로 장애 조치됩니다. 이렇게 하면 데이터가 백업 클러스터로 계속 복사되고 백업 클러스터는 언제든지 장애 조치 대상으로 즉시 사용할 수 있어 RPO 및 RTO가 분 단위로 줄어듭니다.

이러한 방식으로 Neptune 스트림을 사용할 때의 단점은 복제 구성 요소를 유지 관리하는 데 필요한 운영 오버헤드와 두 번째 Neptune DB 클러스터를 항상 온라인 상태로 유지하는 데 드는 비용이 상당히 클 수 있다는 것입니다.

Neptune에서 Neptune으로의 복제 설정

기본 프로덕션 DB 클러스터는 지정된 소스 리전의 VPC에 있습니다. 재해 복구를 위해 다른 복구 리전에서 복제하거나 에뮬레이션해야 하는 3가지 주요 요소는 다음과 같습니다.

  • 클러스터에 저장된 데이터입니다.

  • 기본 클러스터의 구성입니다. 여기에는 IAM 인증 사용 여부, 암호화 여부, DB 클러스터 파라미터, 인스턴스 파라미터, 인스턴스 크기 등이 포함됩니다.

  • 대상 VPC, 보안 그룹 등을 포함하여 사용하는 네트워킹 토폴로지입니다.

다음과 같은 Neptune 관리 API를 사용하여 해당 정보를 수집할 수 있습니다.

수집한 정보를 바탕으로 다음 절차에 따라 다른 리전에 백업 클러스터를 설정할 수 있습니다. 그러면 장애 발생 시 프로덕션 클러스터가 장애 조치할 수 있습니다.

1: Neptune 스트림 활성화

ModifyDBClusterParameterGroup을 사용하여 neptune_streams 파라미터를 1로 설정할 수 있습니다. 그런 다음 변경 사항을 적용하려면 DB 클러스터의 모든 인스턴스를 재부팅합니다.

Neptune 스트림이 활성화된 후에는 소스 DB 클러스터에서 추가 또는 업데이트 작업을 한 번 이상 수행하는 것이 좋습니다. 이렇게 하면 나중에 프로덕션 클러스터를 백업 클러스터와 재동기화할 때 참조할 수 있는 데이터 포인트로 변경 스트림이 채워집니다.

2: 백업 클러스터를 설정하려는 리전에 새 VPC 생성

기본 클러스터와 다른 리전에 새 Neptune DB 클러스터를 생성하기 전에 대상 리전에 클러스터를 호스팅할 새 VPC를 구축해야 합니다. 기본 클러스터와 백업 클러스터 간의 연결은 서로 다른 VPC의 프라이빗 서브넷 전반에서 트래픽을 사용하는 VPC 피어링을 통해 설정됩니다. 하지만 두 VPC 간에 VPC 피어링을 설정하려면 두 VPC의 CIDR 블록 또는 IP 주소 공간이 겹치지 않아야 합니다. 즉, 기본 VPC의 CIDR 블록은 항상 동일하기 때문에(172.31.0.0/16) 두 리전에서 기본 VPC를 그냥 사용할 수는 없습니다.

다음 조건을 충족하는 한 대상 리전의 기존 VPC를 사용할 수 있습니다.

  • 기본 클러스터가 있는 VPC의 CIDR 블록과 중첩되는 CIDR 블록이 없습니다.

  • 기본 클러스터가 위치한 VPC와 동일한 CIDR 블록을 가진 다른 VPC와 아직 피어링되지 않았습니다.

대상 리전에 적합한 VPC가 없는 경우 Amazon EC2 CreateVpc API를 사용하여 새로 생성합니다.

3: 기본 클러스터의 스냅샷을 생성하여 대상 백업 리전으로 복원

이제 대상 백업 리전의 적절한 VPC, 즉 프로덕션 클러스터의 복사본에 해당하는 Neptune 클러스터를 새로 생성합니다.

백업 리전에 프로덕션 클러스터의 복사본 생성
  1. 대상 백업 리전에서 프로덕션 DB 클러스터에서 사용하는 파라미터와 파라미터 그룹을 다시 생성합니다. CreateDBClusterParameterGroup, CreateDBParameterGroup, ModifyDBClusterParameterGroup, ModifyDBParameterGroup를 사용하여 이 작업을 수행할 수 있습니다.

    참고로 CopyDBClusterParameterGroupCopyDBParameterGroup API는 현재 교차 리전 복사를 지원하지 않습니다.

  2. CreateDBClusterSnapshot을 사용하여 프로덕션 리전의 VPC에 프로덕션 클러스터의 스냅샷을 생성합니다.

  3. CopyDBClusterSnapshot을 사용하여 스냅샷을 대상 백업 리전의 VPC에 복사합니다.

  4. RestoreDBClusterFromSnapshot을 사용하여 복사한 스냅샷으로 대상 백업 리전의 VPC에 새 DB 클러스터를 생성합니다. 기본 프로덕션 클러스터에서 복사한 구성 설정과 파라미터를 사용하세요.

  5. 이제 새 Neptune 클러스터가 존재하지만, 인스턴스를 포함하지 않습니다. CreateDBInstance를 사용하여 프로덕션 클러스터의 라이터 인스턴스와 인스턴스 유형 및 크기가 동일한 새 기본/라이터 인스턴스를 생성합니다. 장애 조치 전에 백업 인스턴스를 사용하여 대상 리전의 읽기 I/O를 처리하지 않는 한, 이 시점에서 추가 읽기 전용 복제본을 생성할 필요가 없습니다.

4: 기본 클러스터의 VPC와 새 백업 클러스터의 VPC 간에 VPC 피어링 설정

VPC 피어링을 설정하면 기본 클러스터의 VPC가 마치 단일 프라이빗 네트워크인 것처럼 백업 클러스터의 VPC와 통신할 수 있습니다. 이 작업을 수행하려면 다음 단계를 수행하십시오.

  1. 프로덕션 클러스터의 VPC에서 CreateVpcPeeringConnection API를 호출하여 피어링 연결을 설정합니다.

  2. 대상 백업 클러스터의 VPC에서 AcceptVpcPeeringConnection API를 호출하여 피어링 연결을 수락합니다.

  3. 프로덕션 클러스터의 VPC에서 CreateRoute API를 사용하여 VPC의 라우팅 테이블에 경로를 추가합니다. 이 라우팅 테이블은 모든 트래픽을 대상 VPC의 CIDR 블록으로 리디렉션하여 VPC 피어링 접두사 목록을 사용하도록 합니다.

  4. 마찬가지로, 대상 백업 클러스터의 VPC에서 CreateRoute API를 사용하여 트래픽을 기본 클러스터의 VPC로 라우팅하는 VPC의 라우팅 테이블에 경로를 추가합니다.

5: Neptune 스트림 복제 인프라 설정

이제 두 클러스터가 모두 배포되고 두 지역 간의 네트워크 통신이 설정되었으므로 Neptune-to-Neptune AWS CloudFormation 템플릿을 사용하여 데이터 복제를 지원하는 추가 인프라와 함께 Neptune 스트림 소비자 Lambda 함수를 배포하십시오. 기본 프로덕션 클러스터의 VPC에서 이 작업을 수행하세요.

이 스택에 제공해야 하는 파라미터는 다음과 같습니다. AWS CloudFormation

  • NeptuneStreamEndpoint   –   기본 클러스터의 스트림 엔드포인트(URL 형식)입니다. 예를 들면 https://(cluster name):8182/pg/stream입니다.

  • QueryEngine   –   gremlin, sparql 또는 openCypher여야 합니다.

  • RouteTableIds   –   DynamoDB VPC 엔드포인트와 모니터링 VPC 엔드포인트 모두에 경로를 추가할 수 있습니다.

    2개의 추가 파라미터(CreateMonitoringEndpointCreateDynamoDBEndpoint)도 기본 클러스터의 VPC에 존재하지 않는 경우 true로 설정해야 합니다. 이미 존재하는 경우 false로 설정해야 합니다. 그렇지 않으면 AWS CloudFormation 생성이 실패합니다.

  • SecurityGroupIds   –   Lambda 소비자가 기본 클러스터의 Neptune 스트림 엔드포인트와 통신하는 데 사용하는 보안 그룹을 지정합니다.

    대상 백업 클러스터에서 이 보안 그룹부터 시작되는 트래픽을 허용하는 보안 그룹을 연결합니다.

  • SubnetIds   –   Lambda 소비자가 기본 클러스터와 통신하는 데 사용할 수 있는 기본 클러스터 VPC의 서브넷 ID 목록입니다.

  • TargetNeptuneClusterEndpoint   –   대상 백업 클러스터의 클러스터 엔드포인트(호스트 이름만 해당)입니다.

  • TargetAWSRegion— 대상 백업 클러스터의 AWS 지역 us-east-1 (예:). AWS 지역 간 복제의 경우와 같이 타겟 백업 클러스터의 영역이 Neptune 소스 클러스터의 영역과 다른 경우에만 이 매개 변수를 제공해야 합니다. 소스 리전과 대상 리전이 동일한 경우 이 파라미터는 선택 사항입니다.

    TargetAWSRegion값이 Neptune이 지원하는 유효한 AWS 지역이 아닌 경우 프로세스가 실패한다는 점에 유의하십시오.

  • VPC   –   기본 클러스터 VPC의 ID입니다.

다른 모든 파라미터는 기본값을 그대로 유지할 수 있습니다.

AWS CloudFormation 템플릿이 배포되면 Neptune은 기본 클러스터에서 백업 클러스터로 모든 변경 사항을 복제하기 시작합니다. Lambda 소비자 함수로 생성된 CloudWatch 로그에서 이 복제를 모니터링할 수 있습니다.

기타 고려 사항

  • 기본 클러스터와 백업 클러스터 간에 IAM 인증을 사용해야 하는 경우 템플릿을 호출할 때 IAM 인증을 설정할 수도 있습니다. AWS CloudFormation

  • 기본 클러스터에서 저장 중 암호화가 활성화되어 있는 경우 스냅샷을 대상 리전으로 복사할 때 관련 KMS 키를 관리하고 대상 리전에서 새 KMS 키를 연결하는 방법을 고려합니다.

  • 가장 좋은 방법은 애플리케이션에서 사용되는 Neptune 엔드포인트 앞에서 DNS CNAME을 사용하는 것입니다. 그런 다음 대상 백업 클러스터로 수동 장애 조치해야 하는 경우 대상 클러스터 및/또는 인스턴스 엔드포인트를 가리키도록 해당 CNAME을 변경할 수 있습니다.