메뉴 닫기

MySQL InnoDB Cluster 개념 및 구축 방식

데이터베이스 운영에서 가장 중요한 요소 중 하나는 바로 고가용성(High Availability, HA)입니다.

서버에 장애가 발생하더라도 서비스는 중단 없이 지속되어야 하기 때문입니다. 

이러한 무결점 고가용성을 쉽고 강력하게 구축할 수 있도록 돕는 솔루션이 바로 MySQL InnoDB Cluster입니다.

 

오늘 글에서는 MySQL InnoDB Cluster가 무엇인지, 어떤 컴포넌트로 구성되어 있으며 어떻게 동작하는지에 대해서 설명해보도록 하겠습니다. 

 

 

1. MySQL InnoDB Cluster란?

MySQL InnoDB Cluster는 오라클(Oracle)에서 공식적으로 제공하는 MySQL 고가용성(HA) 및 확장성 솔루션입니다.

과거에는 MySQL을 이중화하기 위해 MHA(Master High Availability)나 클러스터 제어용 서드파티 툴을 복잡하게 엮어 사용해야 했습니다. 하지만 InnoDB Cluster가 등장하면서 설치부터 구성, 페일오버(Failover, 자동 장애 복구)까지 MySQL 네이티브 환경에서 매우 직관적이고 완벽하게 관리할 수 있게 되었습니다.

 

 

 

2. InnoDB Cluster를 구성하는 3대 핵심 컴포넌트

InnoDB Cluster는 세 가지 핵심 컴포넌트로 구성되어 있습니다. 

  • MySQL Group Replication (데이터 복제 및 동기화)

    • 클러스터의 심장 역할을 하는 기술입니다.

    • 단순한 비동기 복제가 아닌 분산 합의 알고리즘(Paxos 기반)을 사용하여 노드 간 데이터를 안전하게 동기화합니다.

    • 최소 3대 이상의 MySQL 서버(인스턴스)로 구성되어야 하며, 특정 노드에 장애가 발생해도 데이터 손실 없이 클러스터가 유지됩니다.

  • MySQL Router (트래픽 라우팅 및 자동 페일오버)

    • 애플리케이션과 MySQL 클러스터 사이에서 트래픽을 중계하는 경량 미들웨어입니다.

    • 애플리케이션은 개별 데이터베이스 IP를 알 필요 없이 Router로만 쿼리를 보냅니다.

    • Primary 노드(쓰기 가능)와 Secondary 노드(읽기 전용)를 자동으로 구분하여 쿼리를 분산(Load Balancing)시키며, 장애 발생 시 트래픽을 정상 노드로 자동 우회시킵니다.

  • MySQL Shell (통합 관리 인터페이스)

    • 클러스터를 구축하고 관리하는 강력한 커맨드라인 도구입니다.

    • 자바스크립트(JavaScript), 파이썬(Python), SQL 인터페이스를 지원하며, 복잡한 설정 파일 수정 없이 단 몇 줄의 명령어만으로 클러스터를 생성하고 상태를 모니터링할 수 있습니다.

 

 

 

3. InnoDB Cluster 핵심 구축 방식 2가지

내부적인 복제 메커니즘은 동일하나, 트랜잭션(쓰기 작업)을 수용하는 방식에 따라 두 가지 토폴로지로 설계할 수 있습니다.

 

① Single-Primary 방식

클러스터 내에서 단 1대의 노드(Primary)만 읽기/쓰기(R/W) 트랜잭션을 허용하고, 나머지 노드(Secondary)는 읽기 전용(R/O)으로 동작하는 방식입니다.

[애플리케이션 트래픽]
       │
       ▼
 ┌───────────┐
 │MySQLRouter│
 └─────┬─────┘
       │
       ├─────────────── 쓰기/읽기 (RW) ──────────────┐
       │                                             │
       ▼ (읽기 전용)                                 ▼
┌──────────────┐   그룹 복제 (Paxos)   ┌──────────────┐
│  Secondary   │◄──────────────────────►│   Primary    │
│   (Node 2)   │                        │   (Node 1)   │
└──────▲───────┘                        └──────▲───────┘
       │                                       │
       └─────────────── 그룹 복제 ─────────────┘

 

② Multi-Primary 방식

클러스터에 참여하는 모든 노드가 동시에 읽기/쓰기(R/W) 트랜잭션을 처리할 수 있는 액티브-액티브(Active-Active) 형태의 아키텍처입니다.

[애플리케이션 트래픽]
                        │
                        ▼
                  ┌───────────┐
                  │MySQLRouter│
                  └─────┬─────┘
        ┌───────────────┼───────────────┐
        ▼ (RW)          ▼ (RW)          ▼ (RW)
┌──────────────┐┌──────────────┐┌──────────────┐
│   Primary    ││   Primary    ││   Primary    │
│   (Node 1)   ││   (Node 2)   ││   (Node 3)   │
└──────▲───────┘└──────▲───────┘└──────▲───────┘
       │               │               │
       └─────────── 그룹 복제 ─────────┘

 

 

 

 

4. 안정적인 트래픽 제어: MySQL Router 기반 접속 방식

고가용성 클러스터에서는 데이터베이스 레벨의 복제뿐만 아니라, 애플리케이션 레벨에서의 투명한 연결 유지가 필수적입니다. 데이터베이스 IP를 직접 바라보는 방식(Direct Connection)은 노드 장애 시 애플리케이션의 재배포나 수동 개입을 요구합니다.

MySQL Router는 이러한 의존성을 끊어내는 역할을 수행합니다.

┌────────────────────────────────────────┐
 │            Application Layer           │
 └───────────────────┬────────────────────┘
                     │ (TCP Connection)
         ┌───────────┴───────────┐
         ▼                       ▼
   [Port 6446 (RW)]        [Port 6447 (RO)]
         │                       │
         │ (Routing)             │ (Round-Robin)
         ▼                       ├──► Secondary (Node 2)
   Primary (Node 1)              └──► Secondary (Node 3)
  • 지능형 포트 라우팅: 애플리케이션은 Router가 노출하는 가상 포트로만 통신합니다.

    • 6446 포트로 들어오는 트래픽은 쓰기가 가능한 Primary 노드로 즉각 라우팅됩니다.

    • 6447 포트로 들어오는 트래픽은 여러 Secondary 노드로 라운드 로빈(Round-Robin) 분산되어, 대규모 조회 트래픽(Read-Scale Out)을 효율적으로 처리합니다.

  • 장애 격리 및 무중단 전환: Primary 노드에 하드웨어 장애가 발생하여 Group Replication이 새로운 Primary를 선출하면, Router는 이를 밀리초 단위로 인지하여 6446 포트의 백엔드 목적지를 자동으로 스위칭합니다. 애플리케이션은 일시적인 커넥션 재시도(Retry) 로직만으로 무중단 서비스가 가능해집니다.

 

 

 

MySQL InnoDB Cluster & HA 공식 레퍼런스

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다