Question

서울 리전에 있는 Aurora Mysql Serverless를 메인으로 하고 다른 지역의 리전으로 복제를 했는데, 서울 리전에 있는 DB의 테이블의 레코드 개수와 복제된 리전 레코드 개수가 불일치 하는 문제 원인 문의

( 리전끼리 VPC Peering 연결 )



Answer

해당 원인은 RDS 리전 복사 시 데이터 정합성이 틀려서 나타날 수 있습니다. 


클러스터를 복제 하는 경우 네트워크 중단이나 기타 여러가지의 원인으로 복제 과정이 원활하게 진행되지 않을 수 있습니다. 

복제 지연과 관련된 문제가 발생했을 때는 우선적으로 두 가지의 CloudWatch 지표를 보시는 것을 권장드립니다. 



[ Aurora DB의 복제 지연을 나타내는 CloudWatch 지표 차이 ]

  • AuroraReplicaLag : 

  • 단일 클러스터 내에서 writer-reader 간에 복제 지연을 나타내는 지표

  • 밀리초 단위로 측정

  • 동일한 리전


  • AuroraBinlogReplicaLag : 

  • AuroraDB 클러스터 간의 복제본 지연을 나타내는 지표

  • 동일 리전 또는 교차 리전


해당 문제는 리전 간에 클러스터를 복제하다 문제가 발생한 경우로, 

교차 리전 간의 클러스터 복제라는 점을 감안하여 AuroraBinlogReplicaLag 지표값을 확인해볼 수 있습니다. 

AuroraBinlogReplicaLag 가 나타내는 지표 값은 아래와 같습니다. 


[ Amazon Aurora에 대한 CloudWatch 지표 ]

  • AuroraBinlogReplicaLag 가 0 보다 높은 값 : 복제본이 복제 소스를 지연

  • AuroraBinlogReplicaLag 가 0 또는 0에 가까운 값 :복제본 프로세스가 활성 상태 

  • AuroraBinlogReplicaLag가 -1 : Aurora가 지연 시간을 확인할 수 없는 경우


AuroraBinlogReplicaLag 의 수가 0보다 큰 경우라면, 복제 과정에서 지연이 발생했다는 뜻이지만, 

-1의 경우라면 Aurora가 지연 시간을 확인할 수 없는 경우입니다.

이 말은 복제본 설정이 진행중이거나 오류 상태에 있을 수 있다는 뜻입니다. 


그렇기 때문에 지표 값이 " -1 "로 확인된다면, 

1) 복제본 설정이 아직 진행 중은 아닌지 DB 상태를 체크하고 

2) 추가적인 에러 로그는 발생하지 않는지 확인하시기 바랍니다. 


또한, AuroraBinlogReplicaLag 지표값이 어느순간 0이나 그 이상으로 변할 수 있으니 지속적으로 지표값을 모니터링 하시기를 권고드립니다.


---


[ 데이터 정합성이란 (Data Consistency)

어떤 데이터들의 값이 서로 일치하는 상태를 의미합니다.



여러 AWS 리전에 걸쳐 Amazon Aurora MySQL DB 클러스터 복제 ]

Amazon Aurora MySQL DB 클러스터를 소스 DB 클러스터와 다른 리전에 읽기 전용 복제본으로 만들 수 있습니다. 

이를 통해 아래와 같은 기능 상 이점을 누릴 수 있습니다.

    1. 재해 복구 기능을 개선

    2. 읽기 작업을 사용자와 가까운 리전에서 할 수 있도록 확장

    3. 한 AWS 리전에서 다른 리전으로 손쉽게 마이그레이션

암호화된 DB 클러스터와 암호화되지 않은 DB 클러스터의 읽기 전용 복제본을 모두 만들 수 있고, 

원본 DB 클러스터당 최대 5개의 리전 간 DB 클러스터(읽기 전용 복제본)를 만들 수 있습니다.




[ 리전 간 Aurora MySQL DB 클러스터의 읽기 전용 복제본 생성 시 주의 사항 ]

  • 원본 DB 클러스터와 리전 간 읽기 전용 복제본 DB 클러스터 모두 DB 클러스터의 기본 인스턴스 외에 최대 15개의 Aurora 복제본을 가질 수 있습니다. 

  • 교차 리전 시나리오에서는 AWS 리전 간 네트워크 채널이 더 길어지기 때문에 소스 DB 클러스터와 읽기 전용 복제본 간의 지연 시간이 증가합니다.

  • 리전 간 복제를 위해 데이터를 전송할 때는 Amazon RDS 데이터 전송 요금이 발생합니다. 다음과 같이 소스 AWS 리전을 벗어나 데이터를 전송하기 때문입니다.

    • 읽기 전용 복제본을 생성할 때는 Amazon RDS가 소스 클러스터의 스냅샷을  생성하여 해당 스냅샷을 읽기 전용 복제본이 있는 AWS 리전으로 전송합니다.

    • 소스 데이터베이스에서 데이터를 변경할 때마다 Amazon RDS가 소스 리전에서 읽기 전용 복제본이 있는 AWS 리전으로 데이터를 전송합니다.

Amazon Aurora 요금 참고 ]

  • 동일한 원본 DB 클러스터를 참조하는 읽기 전용 복제본에 대해 동시 생성 또는 삭제 작업을 여러 개 실행할 수 있습니다. 하지만 각 원본 DB 클러스터에 대한 읽기 전용 복제본 개수를 5개 이하로 유지해야 합니다.

  • 효과적인 복제를 위해서는 읽기 전용 복제본도 각각 원본 DB 클러스터와 동일한 양의 컴퓨팅 및 스토리지 리소스를 가져야 합니다. 원본 DB 클러스터를 확장하면 읽기 전용 복제본도 확장해야 합니다.



감사합니다.



=== 참고 문서 ===

[1] 여러 AWS 리전에 걸쳐 Amazon Aurora MySQL DB 클러스터 복제

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.CrossRegion.html#AuroraMySQL.Replication.CrossRegion.Troubleshooting

[2] Amazon Aurora에 대한 Cloudwatch 지표

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMonitoring.Metrics.html

[3] Amazon Aurora에서 읽기 전용 복제본을 사용할 때 일반적인 문제 해결

https://repost.aws/es/knowledge-center/aurora-mysql-read-replicas