-
[AWS] 다중 AZ(Multi-AZ)로 구성한 Amazon RDS는 EBS를 공유할 수 없다.aws 2025. 2. 27. 20:30
AWS에서는 관계형 데이터베이스 서비스로 Amazon RDS와 Amazon Aurora RDS를 제공합니다. 이 두 서비스는 모두 AWS에서 관리하는 RDS 서비스이지만, 내부 아키텍처 및 동작 방식에서 차이점이 존재합니다.
- Amazon RDS : 기존의 RDBMS(ex. MySQL, PostgreSQL)를 관리형 서비스로 제공하며, 싱글 AZ 및 다중 AZ를 제공합니다.
- Amazon Aurora RDS : AWS에서 개발한 고성능 DB로, 스토리지 계층을 공유하며 자동 확장되는 구조를 가집니다.
본 글에서는 Amazon RDS에 대해서 설명하며 Aurora RDS와의 차이점에 대한 설명은 포함하지 않습니다.
1. Amazon RDS
Amazon RDS는 AWS가 제공하는 관리형 데이터베이스 서비스입니다. MySQL, PostgreSQL, MariaDB, Oracle 등 다양한 데이터베이스를 지원합니다.
1-1. 동작 방식
Amazon RDS는 기본적으로 싱글 인스턴스로 동작합니다. 싱글 인스턴스는 하나의 DB 인스턴스로 동작하기 때문에 장애 발생 시에 수동으로 복구해야 하는 문제점이 존재합니다. 반면에 다중 AZ(Multi-AZ)로 구성한다면 Primary 인스턴스와 Standby 인스턴스 두 개로 동작하게 됩니다.
- Primary 인스턴스 : 읽기/쓰기가 가능한 인스턴스
- Standby 인스턴스 : 장애 발생 시 Failover를 위해 사용되는 인스턴스
다중 AZ로 구성한 Amazon RDS 여기서 Failover란 다중 AZ에서 특정 AZ에 장애가 발생하였을 때 자동으로 다른 정상적인 AZ로 트래픽이 라우팅 되도록 서비스의 가용성을 유지하는 기능입니다. Amazon RDS도 Failover를 지원하는데 다중 AZ로 구성하여 Primary 인스턴스와 Standby 인스턴스를 서로 다른 AZ에 배포하였을 때, Primary 인스턴스에 장애가 발생하면 Standby 인스턴스가 Primary 인스턴스로 승격되면서 트래픽을 처리할 수 있도록 합니다.
1-2. Amazon RDS의 데이터는 Amazon EBS(Elastic Block Store)에 저장된다.
Amazon RDS에서 사용하는 데이터는 Amazon EBS(Elastic Block Store)에 저장됩니다. 다중 AZ로 배포한 경우에 Primary 인스턴스와 Standby 인스턴스는 자신이 속한 AZ에 EBS를 배치하여 사용합니다.
다중 AZ 환경에서 애플리케이션은 오직 Primary 인스턴스와만 통신합니다. 따라서 애플리케이션에서 CRUD 작업이 발생한다면 반드시 Primary 인스턴스와 통신하게 되고 RDS의 데이터는 Primary 인스턴스가 사용하는 EBS에 저장됩니다. 그렇다면 Standby 인스턴스는 왜 사용하는 것일까요? 애플리케이션은 Primary 인스턴스와만 통신할 뿐만 아니라 Primary 인스턴스가 사용하는 EBS에만 데이터가 저장됩니다.
Failover Standby 인스턴스는 Failover 상황에서 가용성을 유지하기 위해 사용됩니다. 싱글 인스턴스를 사용하게 되면 해당 인스턴스가 사망했을 때 애플리케이션은 DB에 접근할 수 없으므로 애플리케이션에도 장애가 발생합니다. 이때, 다중 AZ를 구성했다면 Primary 인스턴스에 장애가 발생해도 Failover가 동작하여 대기 상태에 있던 Standby 인스턴스가 Primary 인스턴스로 승격됩니다. 덕분에 애플리케이션은 문제없이 DB로부터 데이터를 가져올 수 있게 됩니다. (= Standby 인스턴스가 사용하는 EBS에서 데이터를 가져온다)
1-3. Standby 인스턴스의 EBS는 동기식 복제가 발생한다.
앞으로 Primary 인스턴스가 사용하는 EBS를 Primary EBS라고 사용하겠습니다.
Primary 인스턴스(Master)와 Standby 인스턴스 애플리케이션은 Primary 인스턴스와만 통신하기 때문에 Primary EBS만 사용하게 됩니다. 근데 Primary 인스턴스에 장애가 발생하여 Standby 인스턴스가 Primary 인스턴스로 승격되었을 때, Primary EBS와 Standby EBS에 저장된 데이터가 서로 다르지 않을까요? 왜냐하면 Primary EBS와 Standby EBS는 서로 다른 AZ에 위치해 있고, 애플리케이션은 Primary 인스턴스와만 통신하기 때문에 Standby EBS는 사용되지 않을 것이라 생각할 수 있습니다.
그러나 실제로는 Primary EBS에 저장된 데이터와 Standby EBS에 저장된 데이터는 일치합니다. Standby 인스턴스는 Primary EBS에 저장된 데이터를 동기식으로 복제합니다. 동기식 복제(Synchronous Replication)란 Primary 인스턴스의 데이터가 EBS에 저장될 때, 동일한 데이터가 Standby EBS에도 동시에 복제된다는 것을 의미합니다.
Standby EBS의 동기식 복제가 실행되는 순서는 다음과 같습니다:
- 애플리케이션이 Primary 인스턴스에 데이터를 쓰면 이 데이터는 Primary EBS에 저장됩니다.
- 동시에 동일한 데이터가 Standby 인스턴스의 EBS에도 저장됩니다.
- Standby EBS에 데이터가 저장되었는지 확인한 후, 트랜잭션이 커밋(commit)됩니다.
- Primary EBS에만 데이터가 저장된 경우 트랜잭션이 커밋되지 않습니다.
위 과정을 통해 Standby EBS는 항상 Primary EBS와 동일한 데이터를 갖게 됩니다. 덕분에 Primary 인스턴스에 장애가 발생해 Failover가 발생하여 Standby 인스턴스가 Primary 인스턴스로 승격될지라도 기존의 데이터를 유지할 수 있습니다.
실제로 AWS 공식 문서에는 다음과 같이 작성되어 있습니다.
Amazon RDS는 다중 AZ 배포를 사용하여 데이터베이스 인스턴스의 고가용성을 제공합니다. 다중 AZ 배포에서는 기본 데이터베이스 인스턴스와 동기화된 보조 인스턴스가 다른 가용 영역(AZ)에 배치됩니다.
2. Primary 인스턴스와 Standby 인스턴스는 동일한 EBS를 사용할 수 없다.
Standby 인스턴스는 동기식 복제를 통해 Primary EBS에 쓰이는 데이터를 Standby EBS에 똑같이 저장합니다. 덕분에 Failover가 발생해도 Primary EBS에 저장된 데이터를 그대로 사용할 수 있게 되었습니다.
여기서 의문이었던 점은 동기식 복제를 하지 않고 Primary와 Standby 인스턴스가 동일한 EBS를 사용하면 안 되는가? 였습니다. Standby 인스턴스는 Primary 인스턴스와 달리 애플리케이션과 통신하지 않을뿐더러, Primary EBS에 저장되는 데이터를 그대로 Standby EBS에 복사하는 작업만 하기 때문입니다. 차라리 Primary와 Standby가 동일한 EBS를 사용한다면 동기식 복제를 하지 않고도 동일한 데이터를 유지할 수 있을 것입니다.
그러나 Primary와 Standby 인스턴스가 배포된 AZ가 서로 다르기 때문에 EBS를 공유할 수 없습니다. 좀 더 세분화하여 2가지 이유를 설명해 보겠습니다.
2-1. EBS는 특정 AZ에 종속되어 있다.
Standby 인스턴스가 등장한 이유는 가용성을 확보하기 위해 다중 AZ로 구성하였기 때문이었습니다. 다중 AZ로 구성하면 Primary와 Standby 인스턴스가 속한 AZ가 다르기 때문에 EBS를 공유할 수 없게 됩니다. 즉, Primary 인스턴스가 사용하는 EBS를 다른 AZ에 속한 Standby 인스턴스가 사용할 수 없습니다.
2-2. AZ 장애 발생 시, Failover가 불가능하다.
Primary와 Standby 인스턴스가 동일한 EBS를 공유한다고 가정해 봅시다. 다중 AZ를 사용하는 이유는 Failover를 사용하여 가용성을 확보하기 위함이었습니다. 그러나 Primary 인스턴스와 연결된 EBS에 장애가 발생하면 Standby 인스턴스도 동일한 EBS를 공유하고 있으므로 Failover가 불가능하게 됩니다.
출처