Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

고가용성(HA) 아키텍처 완벽 가이드: 개념부터 구축 전략까지

고가용성 아키텍처란 무엇인가?

고가용성(High Availability) 아키텍처는 여러 컴포넌트, 모듈 또는 서비스가 유기적으로 결합하여 피크 타임의 과중한 부하와 무관하게 최적의 성능을 유지하도록 설계된 시스템 구조를 의미합니다.

본질적으로 고가용성 시스템은 일정 기간 동안 장애 없이 비즈니스가 연속적으로 운영될 수 있게 해줍니다. 많은 기업들은 단 몇 분의 다운타임조차 감당할 수 없습니다. 데이터가 곧 생명선인 현대 비즈니스 환경에서는 짧은 서비스 중단만으로도 막대한 비용 손실로 이어질 수 있기 때문입니다.

실제 상황에서는 사람의 생명이 고가용성 데이터베이스에 달려 있는 경우도 있습니다. 응급실에 환자가 도착하면 의료진은 즉시 환자의 건강 기록에 접근해 최선의 치료 방침을 결정해야 합니다. 정보 접근이 조금이라도 지연되면 치명적인 결과를 초래할 수 있습니다.

참고: 고가용성은 일반적으로 서비스가 사용자에게 제공된 시간의 백분율로 측정됩니다. Microsoft 네트워크 개발자 용어집에 따르면, 서버가 '고가용성'으로 인정받으려면 99.999%의 네트워크 가동률을 달성해야 합니다.

고가용성 클러스터란?

고가용성 클러스터는 여러 호스트가 하나의 시스템처럼 통합되어 다운타임을 방지하는 구성입니다. 클러스터 내 한 대의 서버에 장애가 발생하면, 오류 감지 즉시 미션 크리티컬 애플리케이션이 다른 서버로 자동 전환됩니다.

어떤 시스템도 장애에서 완전히 자유로울 수는 없습니다. 고가용성 클러스터는 불가피한 장애가 발생하더라도 최적의 성능 수준을 유지하도록 보장합니다. 그렇기 때문에 가장 중요한 미션 크리티컬 애플리케이션, 웹사이트, 트랜잭션 처리 시스템에 주로 활용됩니다.

고가용성 클러스터링은 어떻게 작동하는가?

고가용성 클러스터는 이미 통합된 여러 시스템을 활용합니다. 따라서 하나의 시스템에 장애가 발생하더라도 다른 시스템을 효율적으로 투입해 서비스나 애플리케이션의 연속성을 유지할 수 있습니다.

이 과정에서 고가용성 로드 밸런싱 클러스터는 시스템 장애 방지에 핵심적인 역할을 합니다. 로드 밸런서는 동일한 웹사이트나 애플리케이션을 서비스하는 여러 웹 노드에 트래픽을 분산시켜 특정 서버에 가해지는 부담을 줄여줍니다. 이를 통해 각 클러스터가 더욱 최적으로 작동하고, 트래픽은 정상 상태의 서버로만 전달됩니다.

고가용성 클러스터의 핵심 개념

액티브-패시브(Active-Passive) 클러스터

액티브/패시브 클러스터는 최소 두 개 이상의 노드로 구성됩니다. 이름 그대로 모든 노드가 활성 상태인 것은 아니며, 한 노드가 활성으로 작동하면 나머지 노드는 읽기 전용 대기 상태를 유지합니다. 패시브 서버는 백업 역할을 하며, 활성 서버에 장애가 발생했을 때 그 기능을 대신 수행합니다.

액티브-액티브(Active-Active) 클러스터

이 유형의 클러스터는 일반적으로 최소 두 개 이상의 노드가 동일한 서비스를 동시에 실행합니다. 액티브-액티브 클러스터에서는 두 노드가 모두 프라이머리 노드 역할을 하므로 어느 쪽이든 읽기와 쓰기를 처리할 수 있습니다. 한 노드에 장애가 발생하면 사용자는 자동으로 다른 노드에 연결되어 서비스 연속성이 보장되며, 장애 노드가 복구되면 사용자 트래픽은 다시 두 노드에 분배됩니다.

액티브/액티브 클러스터의 가장 큰 장점은 노드 간 네트워크 균형을 실현할 수 있다는 점입니다. 서버 장애가 감지되면 로드 밸런서가 사용자 요청을 가용 가능한 서버로 전송하고 노드-네트워크 활동을 분석합니다. 이후 로드 밸런서는 해당 트래픽을 처리할 수 있는 노드로 트래픽을 보내 더 높은 수준의 장애 허용성(fault tolerance)을 제공합니다.

이 전략은 라운드 로빈(round-robin) 방식과 유사한 순환 프로세스를 따릅니다. 사용자를 가용 노드에 무작위로 분산하거나, 반대로 특정 노드에 일정 비율의 우선순위를 부여하는 가중치(weighting) 방식을 적용할 수도 있습니다.

셰어드-낫싱(Shared-Nothing) vs 셰어드-디스크(Shared-Disk) 클러스터

분산 컴퓨팅의 기본 원칙은 단일 장애점(Single Point of Failure)을 어떤 대가를 치르더라도 피하는 것입니다. 이를 위해서는 리소스를 능동적으로 복제하거나 교체 가능하게 만들어, 전체 서비스가 중단되더라도 특정 요소 하나 때문에 시스템 전체가 마비되지 않도록 해야 합니다.

예를 들어 하나의 데이터베이스에 의존하는 50개의 실행 노드가 있다고 가정해 봅시다. 노드 하나에 장애가 발생해도 실행 중인 노드 수와 무관하게 다른 노드의 영속 상태에는 영향을 주지 않습니다.

그러나 데이터베이스 자체에 장애가 발생하면 클러스터 전체가 다운됩니다. 이 경우 데이터베이스가 단일 장애점이 되는데, 이러한 구성을 셰어드 디스크 클러스터라고 합니다.

반면 각 노드가 자체 데이터베이스를 유지하는 구조라면, 한 노드의 장애가 클러스터 전체에 영향을 미치지 않습니다. 이를 셰어드 낫싱 클러스터라고 부릅니다.

참고: 고가용성 클러스터링 기술에 대해 더 알아보려면 관련 웨비나를 확인해 보세요. 소프트웨어 업계에서 20년 이상의 경력을 지닌 George Carbonnel이 Redis Enterprise의 클러스터링 기술이 어떻게 고성능과 고가용성을 동시에 실현하는지 상세히 설명합니다.

고가용성 아키텍처의 필수 요건

내구성과 고가용성을 극대화하기 위해 충족해야 할 요건은 여러 가지가 있습니다.

로드 밸런싱(Load Balancing)

로드 밸런싱은 모든 고가용성 아키텍처의 핵심 요소입니다. 주요 기능은 트래픽을 백엔드 서버들에 분산시켜 데이터 전송 효율을 높이고 서버 과부하를 방지하는 것입니다. 로드 밸런싱 시스템의 선행 조건은 노드 장애 발생 시 수행할 페일오버(failover) 절차를 명확히 정의하는 것입니다.

데이터 확장성(Data Scalability)

모든 고가용성 아키텍처는 데이터베이스나 디스크 스토리지를 확장할 수 있는 능력을 고려해야 합니다. 확장성 확보를 위한 해결책은 크게 두 가지입니다.

  • 아키텍처의 메인 데이터베이스를 활용하고 복제(replication) 또는 파티셔닝(partitioning)으로 고가용성을 확보하는 방법
  • 각 애플리케이션 인스턴스가 자체 데이터 저장소를 유지하도록 하는 방법

지리적 분산(Geographical Diversity)

오늘날처럼 빠르게 변화하는 디지털 세상에서는 고가용성 클러스터를 전 세계에 분산 배치하는 것이 필수적입니다. 이렇게 하면 특정 지역에 자연재해가 발생하더라도 서비스 제공 능력에 지장을 주지 않습니다.

백업 및 복구(재해 복구)

아무리 안정적인 고가용성 아키텍처라도 서비스를 방해하는 일종의 오작동에 노출될 수 있습니다. 따라서 서비스가 중단되었을 때 전체 시스템을 최대한 신속하게 재가동할 수 있는 복구 전략을 반드시 마련해야 합니다.

이를 흔히 재해 복구(disaster recovery)라고 부르며, 장애 발생 시 서비스를 완전한 기능 상태로 복원하기 위한 일련의 정책과 절차를 의미합니다.

고가용성 측정 방법

고가용성은 일반적으로 서비스가 사용자에게 제공된 시간의 백분율로 측정됩니다. 총 가동 시간을 시스템 전체 기간으로 나눈 뒤 100을 곱해 백분율로 계산합니다. Microsoft 네트워크 개발자 용어집에 따르면, 서버가 '고가용성'으로 간주되려면 99.999%의 네트워크 가동률을 달성해야 합니다.

흔히 가용성 백분율을 숫자 속 '9(nine)'의 개수로 표현하기도 합니다. 예를 들어 포 나인스(four nines)는 99.99%를 의미합니다.

참고: 업계 표준으로 통용되는 가용성 수준은 99.99%입니다.

고가용성을 위한 모범 사례

고가용성을 극대화하기 위해 취할 수 있는 조치는 다양합니다. 점검해야 할 컴포넌트 수부터 장애 서버 교체 방식까지 폭넓은 범위에 걸쳐 있습니다. 다음은 고가용성을 달성하는 데 활용할 수 있는 대표적인 실천 방법입니다.

지리적 중복성(Geo-Redundancy) 확보

지리적 중복성은 서비스 장애로 이어질 수 있는 자연재해에 대응하는 핵심 방어선입니다. 이 방식은 여러 지역에 서버를 분산 배치함으로써 리스크를 분산시키고, 한 지역에 재난이 닥쳐도 다른 지역의 서버로 전환해 운영을 지속할 수 있게 합니다.

참고: Active-Active 지리 분산(Geo-Distribution) 기능을 갖춘 데이터베이스를 사용하면 이를 손쉽게 구현할 수 있습니다.

페일오버(Failover) 솔루션 활용

고가용성 아키텍처는 일반적으로 페일오버 기능을 제공하는 여러 느슨하게 결합된(loosely coupled) 서버로 구성됩니다. 페일오버는 프라이머리 시스템의 기능이 중단되었을 때 자동으로 전환되는 백업 운영 모드를 의미합니다.

로드 밸런서 구현

앞서 언급했듯이 로드 밸런서는 들어오는 트래픽을 여러 서버에 분산시켜 다운타임 위험을 줄여줍니다. 이 솔루션의 효과를 극대화하려면 자신의 요구 사항에 맞는 알고리즘을 적용하도록 로드 밸런서를 설정해야 합니다.

RPO(복구 시점 목표)에 맞는 데이터 동기화 보장

RPO(Recovery Point Objective)는 조직에 피해를 주지 않고 잃을 수 있는 데이터의 최대 허용량을 나타내는 지표입니다. 이는 비즈니스 전체의 데이터 손실 허용 범위를 보여주며, 보통 1분, 1일 같은 시간 단위로 측정됩니다.

RPO를 60초 이하로 설정하면 최대 가용성을 유지하는 데 도움이 됩니다. 이렇게 하면 프라이머리 소스에 장애가 발생하더라도 최대 60초 분량의 데이터만 손실되도록 보장할 수 있습니다.

고가용성 아키텍처에서 Redis의 역할

Redis Enterprise는 최대 가용성을 달성하고자 하는 대규모 기업을 위한 강력한 솔루션입니다. 하드웨어 장애와 클라우드 중단 위험을 줄이면서도 파이브 나인스(five-nines, 99.999%) 가용성을 보장하는 실시간 데이터 플랫폼으로, 최고 수준의 자동화된 데이터베이스 복원력을 제공합니다.

Redis Enterprise는 가장 중요한 미션 크리티컬 엔터프라이즈 애플리케이션의 고가용성 요구 사항을 충족합니다. Active-Active 지리 분산, 자동 페일오버, 지능형 클러스터링, 셰어드 낫싱 아키텍처, 글로벌 분산 등 업계 최고 수준의 기능을 통해 99.999% 가용성을 실현합니다.

고가용성 달성 방법에 대해 더 알고 싶으신가요?