Aurora Mysql

dragonappear·2022년 8월 15일
0

AWS

목록 보기
6/6
post-custom-banner

참고

오로라는 멀티 AZ를 지원하지 않는다?

  • 오로라는 멀티 AZ를 지원하지 않는다
  • 그 이유는 오로라의 컨셉이다.
  • 오로라는 Read Replica를 Failover에 사용한다.
  • 여러 RR이 같은 클러스터로 묶여있고 Write 권한이 있는 마스터가 다운되면 RR 중 하나를 마스터로 자동 승격시켜 대응한다.
  • 이 과정은 수초내로 기존 RDB 대비 굉장히 빨리 이루어진다.
  • 이는 Storage가 Computation Unit과 물리적으로 분리되어 있으며 DNS 차원에서 연결을 승격된 RR로 바로 돌릴 수 있기 때문이다.

Failover 참고 : https://thefif19wlsvy.tistory.com/22

  • 기존의 RDS는 Computation과 Storage를 단일 VM내에 모두 지닐수밖에 빠르게 Failover 하는 것이 힘들었다.(장애상황에서 뎅이터를 보호하고, 이전하는 일들이 베어본을 쓰는 것보다 쉽긴 했지만 그래도 어려운 일이다.)

  • 그리고 DB의 Endpoint는 master instance에 직접 연결되어 있는 주소였기 때문에 master에 장애가 생기면 이를 수동으로 RR과 교체해줄때까지 서비스에 문제가 생기는건 감내해야 했다.

  • 하지만 Aurora의 Storage는 Computation과 물리적으로 분리되어 여러 AZ에 걸쳐서 복제되어 있다.

    • 따라서 Aurora에선 Computation instance는 언제든 문제가 생기면 클러스터 내에 있는 다른것으로 빨리 갈아 버리면 그만이다.
    • 기존 RDS 엔진들 처럼 무조건 24/365 master 인스턴스를 조마조마하게 유지하고 있을 이유가 없는 것이다.
  • 따라서 Aurora에선 Storage의 Multi AZ는 있으나 Instance의 Multi AZ는 RR을 하나이상 만들어 다는 것으로 대체되었다고 보면 된다.

  • 그렇기 때문에 Aurora Instance에 안정적으로 접속하고 싶다면 마스터 외에 1개 이상의 RR을 붙여주는게 필수적이다.

클러스터와 인스턴스는 따로국밥

  • 이렇게 Aurora 에선 Failover와 관련된 Operation 부터 클러스터 기반으로 돌아간다.

  • 따라서 클러스터를 쓸건지 인스턴스만 쓸건지를 정할수 있는 다른 엔진과 달리 반드시 클러스터를 생성해야 한다.

  • Cluster Endpoint와 Instance Endpoint가 각각 주어지며, 인스턴스가 하나도 없어도 Cluster Endpoint가 존재한다.

  • Write Query를 날리고 싶다면 Cluster Endpoint에 날려야 하며 이 End point는 master = primary instance로 연결된다.

    • 인스턴스 레벨의 Endpoint는 각각의 인스턴스에 접근할수 있는 것처럼 보이지만 장애시 CNAME Swapping을 위해서 존재하는 주소로서의 역할이 더 크다.
  • 또한 Reader Endpoint라는 Endpoint도 클러스터 레벨에서 지원하는데 이 Endpoint로 들어온 트래픽은 클러스터 내의 여러 Read Replica에게 Load Balancing 된다.

  • 따라서 웹 서버에서는 Write는 Cluster Endpoint로 설정하고 Read Replica 접근은 Reader Endpoint로만 가도록 만들면 된다.

    • Aurora 클러스터 아래 어떻게 구성되어 있는지는 웹서버에서 신경쓰지 않아도 된다.

일부 높은 MySQL 버전을 지원하지 않는다.

  • RDS MySQL을 Aurora로 옮긴다면 굳이 DMS를 사용할 필요는 없다.

  • RDS MySQL의 Read Replica로 Aurora클러스터 & 인스턴스를 하나 띄우고, MySQL에 Write 요청이 들어오지 않도록 웹서버 패치후 Aurora의 mysql console에서 Replica Lag이 0에 다다르면 Aurora를 메인 DB로 승격시킨 후 기존 MySQL 인스턴스를 내리면 된다.

  • 이 방법은 서비스 중단을 최소화 해야 할때 유용하며 중단해도 된다면 다른 방법을 써도 된다.

  • 하지만 여기에 복병이 하나 있는데, MySQL 엔진 버전이 Aurora에서 지원하지 않을 경우 Read Replica가 생성되지 않는다. 이는 호환성 때문이다.

MySQL 5.6.x 계열에서는 UNIQUE KEY의 최대 길이가 767 bytes 이다. 5.7.x 부턴 이 제약이 innodb_large_prefix가 켜져있을 경우 3072 bytes 까지 늘어난다.

post-custom-banner

0개의 댓글