2024.05.14
고가용성은 현대의 데이터베이스 시스템에서 핵심 요소로 자리 잡았습니다. 사용자들은 서비스의 지속적인 가용성과 안정성을 요구하며, 이를 위해 데이터베이스 시스템은 장애나 오류 상황에서도 끊김 없는 서비스를 제공할 수 있어야 합니다. MySQL은 이러한 요구에 부합하기 위해 다양한 고가용성 옵션을 제공하고 있습니다. 이번 포스팅에서는 MySQL의 고가용성 솔루션 중 하나인 InnoDB Cluster에 대해 소개하겠습니다.
MySQL은 오라클에서 개발, 배포 및 지원되고 있는 오픈소스 관계형 데이터베이스(RDBMS)입니다. 성능이 좋고, 신뢰성이 높으며 확장 및 사용이 용이하다는 특징이 있습니다. 이런 특성으로 인해 전 세계에서 가장 대표적으로 사용되는 오픈소스 DBMS 중 하나로 자리잡았습니다.
MySQL은 듀얼 라이센스 모델을 채택하고 있어, 개인이나 기업은 자신의 요구에 맞는 버전을 선택할 수 있습니다. 커뮤니티 버전은 무료로 제공되지만, 기술 지원이나 일부 기능에는 제한이 있습니다. 반면 엔터프라이즈 버전은, MySQL 엔터프라이즈 백업 및 MySQL 엔터프라이즈 모니터와 같은 추가적인 기능을 제공하고, 오라클의 글로벌 지원을 받을 수 있습니다.
또한, SQL과 NoSQL에 모두 대응하며, 복잡한 데이터 처리부터 단순한 고속 Key-Value 작업까지 폭넓은 용도로 활용할 수 있습니다. 하둡(Hadoop)이나 카산드라(Cassandra)와 같은 빅데이터 시스템과의 연동성 및 상호 운용성 또한 뛰어납니다.
현재 MySQL은 지속적으로 혁신을 거듭하며 새로운 버전을 내놓고 있으며, ‘8.3.0 Innovation’이라는 최신 버전에는 여러 새로운 기능이 포함되어 있습니다. 이처럼 지속적인 업데이트와 발전을 통해, MySQL은 데이터베이스 시장에서 중요한 자리를 차지하고 있습니다.
고가용성(High Availability, HA)이란 시스템이 장애 또는 오류가 발생해도 사용자에게 서비스를 계속 제공할 수 있는 능력을 의미합니다. MySQL 데이터베이스가 고가용성을 갖추면 사용자가 데이터베이스에 접속하고 데이터를 조회, 추가, 수정, 삭제할 수 있는 서비스가 계속해서 제공됩니다.
MySQL은 다양한 고가용성 구성 옵션을 제공하는데, 이 중 대표적으로 ①OS HA 솔루션을 활용한 OS 클러스터 방식과 ②오픈소스 솔루션인 MHA 및 MMM을 사용하는 방식이 있습니다.
OS 클러스터는 일반적으로 Active-Standby 또는 Active-Passive 구조로 설정됩니다. 이 시스템은 ‘heartbeat’ 신호를 통해 서버의 상태를 지속적으로 체크합니다. 만약 주 서버에 문제가 발생하면, 준비 상태에 있는 스탠바이 서버가 활성 상태로 전환되어 서비스를 지속할 수 있게 됩니다.
반면, MHA와 MMM은 MySQL의 복제 기능을 기반으로 합니다. 이들은 데이터 동기화를 위한 추가 솔루션 없이도, 복제 구성을 활용해 높은 가용성을 달성합니다. Manager 서버가 시스템 장애를 감지하면, 자동으로 'Failover(장애 극복)'를 실행하여 서비스의 연속성을 보장합니다. 여기서 Failover란 시스템에서 이상이 생겼을 때 대체 시스템으로 자동 전환되는 기능을 말합니다.
다만 앞서 설명한 서드파티 솔루션을 사용할 때는 몇 가지 이슈가 있습니다. Failover 기능을 구현하기 위해 OS 클러스터 솔루션이 필요한데, 이는 추가적인 구축 비용을 발생시킵니다. 이런 시스템에서는 한 번에 하나의 노드만이 Active 활성 상태를 유지할 수 있습니다. 또한 장애 발생 시 Standby 또는 Slave 서버로의 Failover 과정이 수십 초에서 수분 정도의 서비스 지연을 야기할 수 있습니다.
그리고 장애가 발생한 후 원래의 Master 서버를 복구하더라도, Auto-Rejoin 기능이 없어 수동으로 노드를 재결합시키고, 장애 이후 발생한 데이터를 수동으로 동기화해야 하는 번거로움이 있습니다.
특히 MMM과 MHA 같은 오픈소스 솔루션의 경우, 공식적인 벤더 지원이 부족하여 문제 발생 시 신속한 해결이 어려운 경우가 많습니다.
이러한 서드파티 도구들이 갖고 있는 다양한 문제점들을 해결하며 더 나은 지원을 제공하는 것이 바로 InnoDB Cluster의 역할입니다. InnoDB Cluster는 이러한 모든 이슈에 대한 솔루션을 내장하고 있어, 고가용성 구성을 더욱 간편하고, 효율적으로 관리할 수 있게 해줍니다.
InnoDB Cluster란 ‘분산된 고가용성 데이터베이스 솔루션’이라고 정의할 수 있습니다.
InnoDB Cluster는 적어도 3개의 MySQL 서버 인스턴스로 구성되어 고가용성을 제공함과 동시에 시스템 확장성까지 고려한 구조를 가지고 있습니다. InnoDB Cluster는 완전히 새로운 제품을 개발한 것이 아니라, 기존에 검증된 MySQL 제품들을 통합해 만들어낸 솔루션입니다.
특히, InnoDB Cluster는 기존 Master-Slave 복제 방식에서는 제공하지 못했던 내결함성 과 자동 장애 복구 기능을 갖추고 있어, 데이터베이스 시스템의 안정성을 대폭 강화했습니다. 더 나아가 MySQL Shell을 통해 데이터베이스 인스턴스 관리를 손쉽게 할 수 있으며, 장애 발생 시 신속한 감지와 빠른 복구를 통해, 데이터 손실의 위험을 최소화할 수 있습니다.
InnoDB Cluster의 주요 장점 중 하나는 다양한 구성 옵션을 제공한다는 점입니다. Single Primary 모드는 단일 Read/Write 인스턴스를 갖습니다. 반면에 Multi Primary 모드에서는 모든 인스턴스가 Read/Write 작업을 처리할 수 있습니다.
InnoDB Cluster의 또 다른 중요한 특징은 자동 Failover 기능입니다. 이는 주 ‘데이터베이스 인스턴스’에 장애가 발생해도 다른 인스턴스가 자동으로 승격되어 데이터 손실 없이 시스템을 운영할 수 있도록 합니다. MySQL Router가 포함되어 있어, 읽기 및 쓰기 요청을 분산하여 처리할 수 있습니다.
클러스터 서버 장애 발생 시, 인스턴스 구성의 수에 따라 쿼럼(정족수)을 유지하여 클러스터의 안정성을 보장합니다. 예를 들어, 3개 인스턴스로 구성된 클러스터는 1대까지 장애가 발생해도 문제없이 작동하며, 5대 또는 7대와 같이 홀수로 구성된 클러스터는 더 많은 장애를 견딜 수 있습니다.
InnoDB Cluster 구성 시 최소 3대의 인스턴스가 필요하며, 홀수로 구성하는 것이 권장됩니다. 5.7 미만 버전의 MySQL은 지원되지 않으며, 안정적이고 향상된 InnoDB Cluster의 기능을 사용하려면 8.0 이상 버전을 사용하실 것을 권장 드립니다.
InnoDB 엔진만이 클러스터에 적용되며, 단일 또는 복제 구성과 비교했을 때, 약간의 성능 차이가 있을 수 있습니다. 이는 데이터를 즉시 동기화하는 방식과 네트워크 성능이 영향을 미치기 때문입니다. 따라서 서비스 요구사항에 맞추어 적절한 구성을 선택하는 것이 중요합니다.
이처럼 InnoDB Cluster를 사용하면 고가용성을 확보하고 데이터베이스 시스템의 안정성을 대폭 강화할 수 있습니다. 이 솔루션은 다양한 구성 옵션과 자동 장애 복구 기능을 통해 기업 및 조직들이 높은 수준의 가용성을 달성할 수 있도록 도와줍니다.
InnoDB Cluster 구성에 대해 더 알아보고 싶으시다면, 락플레이스와 상담하세요!
<작성: 락플레이스 DB팀>