MySQL 고가용성은 장애 또는 중단 시 MySQL 데이터베이스를 계속 사용할 수 있도록 선택할 수 있는 옵션입니다. 이 기능을 사용하면 더 높은 가동시간 요구 사항과 데이터 손실 허용 오차를 설정할 수 있습니다. 이 문서에서는 고가용성의 일반적인 개념이 무엇을 의미하는지, 그리고 MySQL의 고가용성 옵션이 어떻게 작동하는지 살펴보겠습니다.
고가용성이란?
고가용성은 시스템 또는 서비스가 지속적으로 작동하며 장애나 정전이 발생할 때 가용성을 유지하는 기능입니다. 고가용성 시스템은 조직의 미션 크리티컬 시스템과 애플리케이션이 항상 가동되도록 보장합니다. 이는 미션 크리티컬 시스템의 고장이 심각한 결과를 초래할 수 있는 헬스케어, 금융 및 항공과 같은 분야의 기업에게 특히 중요합니다.
고가용성은 일반적으로 서비스 수준 계약(SLA)에 의해 정의된 가동시간의 백분율로 표시되며, 100점은 절대 실패하지 않는 시스템을 나타냅니다. 이는 사실상 달성할 수 없기 때문에, 대부분의 조직은 “99%” 또는 99.999% 가용성을 목표로 합니다.
MySQL이 고가용성을 달성하는 방법
고가용성 시스템은 폴트가 발생하면 즉시 복구할 수 있어야 합니다. 고가용성 아키텍처에는 복구 가능성과 고가용성을 보장하기 위해 함께 작동하는 최소 세 가지 기본 요소가 필요합니다.
장애 감지
MySQL은 애플리케이션이 더 높은 가동시간(및 데이터 손실 허용 오차 없음)에 대한 요구 사항을 충족할 수 있도록 지원하는 고가용성 옵션을 제공합니다. 고가용성 옵션이 켜져 있는 경우 MySQL 시스템은 서로 다른 장애 도메인 또는 가용성 영역에 걸쳐 3개의 인스턴스를 생성합니다.
데이터는 MySQL 그룹 복제를 사용하여 세 인스턴스 간에 복제되며, 애플리케이션은 데이터베이스에서 데이터를 읽고 쓰기 위한 기본 인스턴스에 연결됩니다. 장애가 발생하면 시스템이 몇 분 내에 보조 인스턴스에 대한 자동 페일오버를 트리거합니다.
장애 조치
페일오버 메커니즘은 서비스를 복제된 인스턴스로 전송합니다. 둘 이상의 백업 인스턴스를 사용할 수 있는 경우, 장애 조치 메커니즘은 기본 노드로 승격할 최상의 인스턴스를 선택합니다.
리디렉션 메커니즘
2차 인스턴스로의 페일오버가 발생하면 고가용성 기능은 모든 애플리케이션 및 사용자 연결을 새로운 1차 노드로 리디렉션합니다. 또한 기존 기본 노드의 모든 쿼리를 새 기본 데이터베이스로 리디렉션합니다.
MySQL 고가용성: 가동시간
가동 시간은 시스템을 사용할 수 있고 올바르게 작동하는 시간이며, 시스템이 작동될 것으로 예상되는 총 시간의 백분율로 표시됩니다. 가동시간이 높다는 것은 시스템이 대부분 예상대로 작동하고 있음을 의미합니다.
다양한 수준의 MySQL 고가용성으로 예상할 수 있는 가동 시간은 구현하는 특정 고가용성(HA) 솔루션에 따라 달라집니다.
MySQL 복제
MySQL Replication을 사용하면 HA 기능이 없는 MySQL 서버보다 높은 가동시간을 지원하기 위해 이중화 및 페일오버를 제공할 수 있도록 여러 서버를 설정할 수 있습니다. 마스터-슬레이브 구성은 읽기 및 쓰기를 허용하는 단일 마스터 서버와 하나 이상의 읽기 전용 슬레이브 서버를 사용합니다. 마스터 서버의 데이터는 슬레이브 서버에 비동기적으로 복제됩니다.
페일오버를 구현하려면, 장애 발생 시 마스터로 승격될 수 있는 대기 서버로 하나 이상의 슬레이브 서버를 설정해야 합니다. 페일오버는 일반적으로 쿼리를 수락할 수 있도록 승격된 슬레이브의 상태를 읽기-쓰기 모드로 변경하여 슬레이브 노드를 마스터 노드로 승격해야 하는 수동 프로세스입니다.
페일오버는 수동으로 수행되기 때문에 시간이 오래 걸리고 인적 오류가 발생하기 쉬우며, 이로 인해 정전이 더 길어질 수 있습니다. 또한 MySQL Replication은 비동기식 복제를 사용합니다. 즉, 마스터가 실패하면 마스터에서 커밋된 트랜잭션이 아직 슬레이브 서버에 복제되지 않았을 수 있습니다. 심각한 데이터 손실이 발생하는 경우, 데이터를 복구해야 하므로 시스템 다운 시간이 늘어납니다.
MySQL 그룹 복제
MySQL 그룹 복제를 사용하면 MySQL 복제보다 더 높은 가동시간을 달성할 수 있습니다. MySQL 그룹 복제를 사용하면 하나의 서버가 기본 서버로 지정되고 다른 서버가 보조 서버로 지정된 그룹에 여러 MySQL 서버를 설정할 수 있습니다. 그룹의 각 서버는 데이터 복사본을 유지하고 복제를 사용하여 복사본이 동기화된 상태로 유지되도록 합니다.
기본 서버가 다운되면 그룹의 보조 서버가 자동으로 장애를 감지하고 장애 조치 프로세스를 시작합니다. 보조 서버 중 하나가 자동으로 새 기본 서버로 승격되어 클라이언트의 요청을 제공하기 시작합니다. 그룹의 다른 보조 멤버는 이제 새 기본 서버로부터 업데이트를 받고 클라이언트 읽기 요청을 계속 처리합니다.
오류가 발생한 서버가 다시 온라인 상태로 돌아오면 자동으로 그룹에 보조 서버로 다시 가입됩니다.
MySQL 그룹 복제를 통해 장애 감지 및 페일오버가 자동으로 발생하기 때문에 다운타임은 최소화되며 사용자와 애플리케이션은 일반적으로 정전이 발생했음을 알지 못합니다.
MySQL 클러스터
MySQL Cluster HA 솔루션은 최고 수준의 가동시간을 제공합니다. 자동 페일오버 및 로드 밸런싱과 함께 고가용성 분산 데이터베이스 시스템은 높은 수준의 가용성, 성능 및 확장성을 제공하며 거의 제로에 가까운 다운타임을 제공하도록 설계되었습니다.
MySQL 클러스터는 데이터를 저장하고 관리하기 위해 함께 작동하는 세 가지 유형의 노드를 사용합니다.
- 데이터 노드: 데이터를 저장하고 읽기 및 쓰기 쿼리를 처리합니다.
- MySQL 서버 노드: 클라이언트 애플리케이션으로부터 쿼리를 수신하고, 데이터 노드에서 처리한 다음, 결과를 클라이언트에 반환합니다.
- 관리 노드: 클러스터의 운영을 관리하고, 장애 발생 시 장애 조치 및 복구를 처리합니다.
클러스터에 있는 하나 이상의 노드가 실패하면 클러스터는 자동으로 문제를 감지하고 장애 조치 프로세스를 트리거합니다. 전체 프로세스는 일반적으로 장애 발생 후 1초 이내에 발생하며, 클라이언트 애플리케이션에 대한 서비스를 중단하지 않습니다. 클러스터는 다운타임 없이 정상적으로 계속 작동합니다.