데이터베이스/MySQL

[MySQL] InnoDB 클러스터

샥쿠 2024. 3. 29. 08:48

InnoDB 클러스터란?

MySQL에서 제공하는 고가용성(High Availability) 솔루션이다. 즉 MySQL의 가용성을 높이기 위한 기능이다.

어떻게 가용성을 높이는 걸까?

MySQL의 일반 복제(Replication) 기능을 통해 소스-레플리카 구조로 형성하는 것도 가용성을 높이기 위한 하나의 방법이다. 다만 이러한 일반 복제는 소스 서버에서 장애 발생시 레플리카 서버가 자동으로 기존의 소스 서버를 대체하는 기능(Failover)을 제공하지는 않는다. 이를 자동화하기 위해 InnoDB 클러스터를 사용할 수 있다.

❓ Failover란?
장애 극복 기능을 의미하며, 시스템에 이상이 생겼을 때 대체 시스템으로 자동 전환하는 기능이다.

어떻게 장애 극복을 자동화하는 걸까?

InnoDB 클러스터는 다음과 같은 구성요소들로 이루어져있으며, 구성요소들의 상호작용을 통해 자동화된 고가용성 솔루션을 제공한다.

  • 그룹 복제(Group Replication)
  • MySQL 라우터(MySQL Router)
  • MySQL 셸(MySQL Shell)

다음 그림을 통해 각 구성요소들이 어떻게 상호작용하는지 간략하게 알 수 있다.

https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html

3가지 구성요소를 통해 InnoDB 클러스터에서 장애 극복을 자동화하는 방법을 알아보자.

그룹 복제(Group Replication)

  • 3대 이상의 MySQL 서버로 그룹이 만들어지고, 그룹 내 서버들은 서로 통신하며 양방향으로 복제할 수 있다. 소스 → 레플리카 단방향으로만 복제가 이루어지는 일반 복제(Replication)와의 차이점이다.
  • 각각의 서버는 읽기/쓰기 모두 가능한 프라이머리(Primary) 또는 읽기만 가능한 세컨더리(Secondary) 중 하나의 역할을 가진다.
  • 그룹 멤버 간에 주기적으로 서로의 상태를 확인하고, 장애가 발생한 멤버는 그룹에서 추방하여 그룹이 정상적으로 동작 중인 멤버로만 구성될 수 있도록 한다.
  • 프라이머리 서버에 장애 발생시 클러스터 내에서 자동으로 새로운 프라이머리 서버를 선정한다.

MySQL 라우터(MySQL Router)

  • 애플리케이션 서버 → InnoDB 클러스터 로 유입된 쿼리 요청을 클러스터 내 적절한 MySQL 서버로 전달하고, MySQL 서버에서 반환한 쿼리 결과를 다시 애플리케이션 서버로 전달하는 프록시 역할을 한다.
  • MySQL 라우터가 없으면 애플리케이션 서버는 MySQL 서버의 IP와 같은 정보를 커넥션 설정에 저장해서 사용하기 때문에 장애 발생으로 MySQL 서버가 다른 서버로 교체되면 애플리케이션 서버의 DB 커넥션 정보를 수정해야한다.
  • 반면 MySQL 라우터 사용시에는 애플리케이션 서버의 커넥션 설정에 라우터 서버 정보만 저장해두면 클러스터 내에 MySQL 서버 구성이 바뀌어도 애플리케이션 서버의 커넥션 설정을 변경할 필요가 없다.

MySQL 셸(MySQL Shell)

  • 단순한 SQL문 실행만 가능한 기존 클라이언트 툴인 mysql보다 확장된 기능을 제공하는 고급 클라이언트 툴이다.
  • MySQL 서버의 설정 변경 및 InnoDB 클러스터를 구축할 수 있는 AdminAPI를 제공한다.
  • AdminAPI를 통해 InnoDB 클러스터의 서버들의 상태를 모니터링할 수 있고, 모니터링한 정보를 바탕으로 장애 발생시 자동으로 대응할 수 있다.
  • 사용자 편의 차원에서는 MySQL 셸에 내장된 글로벌 객체들을 이용하여 여러가지 메서드를 실행할 수 있다. 예를 들어 InnoDB 클러스터 구축과 관련한 기능을 제공하는 dba 객체의 dba.createCluster() 메서드를 사용하여 클러스터를 간단하게 생성할 수 있다.