Skip to content

refactor: DB EC2 MySQL data volume 분리 #57

Description

@Hexeong

배경

Issue #50 에서 prod DB 대체용 MySQL EC2가 생성되었지만, 현재 MySQL 데이터 디렉터리(/var/lib/mysql)는 root volume 위에 위치합니다. 이후 prod RDS 데이터를 이관하기 전에 MySQL data volume을 root volume과 분리할 필요가 있습니다.

필요성

  • AMI 업데이트 또는 EC2 재생성 시 OS/root volume과 MySQL 데이터를 분리해 데이터 유실 위험을 줄입니다.
  • Docker/MySQL bootstrap, OS 패치, AMI 교체 작업과 실제 DB 데이터의 생명주기를 분리할 수 있습니다.
  • 현재 prod RDS는 20GiB gp3를 사용 중이고 최근 실사용량은 약 1.9GiB 수준입니다. DB EC2는 root 8GiB + data 12GiB로 구성하면 총 EBS 20GiB로 기존 RDS allocated storage와 총량을 맞추면서도 data directory를 분리할 수 있습니다.
  • 이후 #51의 RDS -> DB EC2 데이터 마이그레이션을 root volume에 데이터를 넣기 전에 안전한 구조에서 진행할 수 있습니다.
  • #48의 백업 전략을 설계할 때 data volume 단위 snapshot/복구 전략을 잡기 쉬워집니다.

RDS 스토리지 사용량 참고

현재 prod RDS의 할당 스토리지는 20GiB입니다.

-----------------------------------------------------------------------------------------------------------
|                                           DescribeDBInstances                                           |
+----------------------+----------------------------------------------------------------------------------+
|  AllocatedStorageGiB |  20                                                                              |
|  DBInstanceClass     |  db.t4g.micro                                                                    |
|  DBInstanceIdentifier|  solid-connection-prod-rds-mysql                                                 |
|  Endpoint            |  solid-connection-prod-rds-mysql.ch6qko8w6yyl.ap-northeast-2.rds.amazonaws.com   |
|  Engine              |  mysql                                                                           |
|  EngineVersion       |  8.4.8                                                                           |
|  StorageEncrypted    |  True                                                                            |
|  StorageType         |  gp3                                                                             |
+----------------------+----------------------------------------------------------------------------------+

최근 CloudWatch FreeStorageSpace 기준으로는 여유 공간이 약 18.10GiB 수준입니다.

allocated_gib=20.00
free_min_gib=18.10
used_at_min_free_gib=1.90
free_avg_gib=18.10
used_at_avg_free_gib=1.90

따라서 현재 실사용량 약 1.9GiB 대비 data volume 12GiB는 약 6배 이상의 여유를 가지며, root 8GiB와 합산하면 전체 EBS 용량은 기존 RDS allocated storage와 같은 20GiB가 됩니다.

작업 방향

  • DB EC2와 동일 AZ에 별도 gp3 encrypted EBS data volume을 생성합니다.
  • data volume 크기는 우선 12GiB를 기준으로 검토합니다.
  • 해당 volume을 DB EC2에 attach하고 /var/lib/mysql에 mount되도록 bootstrap을 수정합니다.
  • 아직 prod 데이터가 이관되기 전이므로, 기존 DB EC2는 한 번 재생성하는 방식으로 깔끔하게 반영합니다.
  • data volume에는 prevent_destroy 등 삭제 방지 설정을 적용할지 검토합니다.

주의 사항

  • 이 작업이 완료된 뒤 #51에서 RDS 데이터를 DB EC2로 dump/import하는 것이 안전합니다.
  • 실제 migration, API 서버 DB endpoint 전환, 기존 RDS 제거는 이 이슈 범위에 포함하지 않고 각각 후속 이슈에서 진행합니다.

Parent: #39

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions