AWS 기술 블로그
HAQM OpenSearch Service의 Multi-AZ with Standby 기능 동작 방식 알아보기
HAQM OpenSearch Service 는 비즈니스 크리티컬 워크로드에 99.99%의 가용성과 일관된 성능을 제공하는 관리형 클러스터를 위한 Multi-AZ with Standby 배포 옵션을 제공합니다. Multi-AZ with Standby를 사용하면 OpenSearch Service 도메인은 하드웨어 또는 네트워킹 장애와 같은 인프라 장애에 대해 복원력을 갖출 수 있습니다. 이 옵션은 안정성이 향상되고 모범 사례를 적용하고 복잡성을 줄임으로써 클러스터 구성 및 관리를 간소화하는 추가적인 이점을 제공합니다.
이 글에서는 Multi-AZ with Standby 기능이 활성화 되어있는 있는 클러스터에서 어떻게 검색과 색인 작업이 어떻게 이루어지는지 살펴보고, 그 안정성, 단순성, 내결함성에 기여하는 기본 메커니즘을 자세히 살펴봅니다.
배경
Multi-AZ with Standby가 활성화되면 세 개의 가용 영역에 걸쳐 OpenSearch Service도메인 인스턴스를 배포하며, 두 개의 영역은 활성 영역으로, 나머지 하나는 대기 영역으로 지정됩니다. 이 구성은 모든 영역에 걸쳐 동일한 용량을 유지함으로써 영역 장애(Zonal Failures)가 발생한 경우에도 일관된 성능을 보장합니다. 중요한 것은, 이 대기 영역은 가용 영역을 사용한 정적 안정성 설계를 따르므로 장애 발생 시 용량 프로비저닝이나 데이터 이동이 필요하지 않습니다.
정상 작동 중에는 활성화된 영역이 읽기 및 쓰기 요청과 쿼리 트래픽을 처리합니다. 반면, 대기 영역은 복제 트래픽만 수신합니다. OpenSearch 서비스는 쓰기 요청에 대해 동기식 복제 프로토콜을 활용합니다. 이 프로토콜을 활용하면 장애 발생 시(장애 복구 시간 <= 1분) 대기 영역을 활성 상태로 신속하게 전환할 수 있습니다. 이를 영역 장애 조치(Zonal Failover)라고 합니다. 그러면 이전에 활성 상태였던 영역이 대기 모드로 전환되고, 정상 상태로 복구하기 위한 복구 작업이 시작됩니다.
검색 가용성을 보장하기 위한 트래픽 라우팅 및 장애 조치
OpenSearch 서비스 도메인에서 코디네이터는 HTTP(S) 요청, 특히 색인 및 검색 요청을 처리하는 노드입니다. Multi-AZ with Standby를 사용하는 OpenSearch Service 도메인에서 활성 영역의 데이터 노드는 검색 요청에 대한 코디네이터 역할을 합니다.
검색 요청의 쿼리 단계에서 코디네이터는 쿼리할 샤드를 결정하고 샤드 복사본을 호스팅하는 데이터 노드로 요청을 보냅니다. 쿼리는 각 샤드에서 로컬로 실행되고 일치하는 문서가 코디네이터 노드로 반환됩니다. 샤드 복사본을 포함하는 노드로 요청을 보내는 코디네이터 노드는 두 단계로 프로세스를 실행합니다. 먼저, 샤드 복사본에 대한 요청을 할 때 노드를 쿼리해야 하는 순서를 정의하는 반복자를 생성하여 트래픽이 샤드 복사본에 균일하게 분산되도록 합니다. 그 다음, 요청이 관련 노드로 전송됩니다.
샤드 복사본을 위해 쿼리할 노드의 정렬된 목록을 생성하기 위해 코디네이터 노드는 다양한 알고리즘을 사용합니다. 이러한 알고리즘에는 라운드 로빈 선택, 적응형 복제본 선택, 선호도 기반 샤드 라우팅, 가중치 라운드 로빈 등이 포함됩니다.
Multi-AZ with Standby의 경우, 가중치 라운드 로빈 알고리즘이 샤드 복사본 선택에 사용됩니다. 이 접근 방식에서는 활성 영역에 가중치 1이 할당되고 대기 영역에 가중치 0이 할당됩니다. 이렇게 하면 대기 상태 도메인 가용 영역의 데이터 노드로 읽기 트래픽이 전송되지 않습니다.
가중치는 클러스터 상태 메타데이터에 JSON 객체로 저장됩니다.
"weighted_shard_routing": {
"awareness": {
"zone": {
"us-east-1b": 0,
"us-east-1d": 1,
"us-east-1c": 1
}
},
"_version": 3
}
다음 그림에 표시된 것처럼, us-east-1b
가용 영역은 상태가 StandBy
로 표시되어 있습니다. 이는 이 가용 영역의 데이터 노드가 대기 상태에 있으며 로드 밸런서로부터 검색 또는 인덱싱 요청을 받지 않음을 나타냅니다.
안정적인 운영을 유지하기 위해 대기 가용 영역은 30분마다 순환되어 모든 네트워크 부분이 가용성 영역에 걸쳐 적용되도록 합니다. 이러한 사전 예방적 접근 방식은 읽기 경로의 가용성을 확인하여 잠재적 장애 발생 시 시스템의 복원력을 더욱 향상시킵니다. 다음 다이어그램은 이 아키텍처를 보여줍니다.
위의 다이어그램에서, Zone-C는 가중치 라운드 로빈 알고리즘의 가중치가 0으로 설정되어 있습니다. 이것은 대기 영역에 있는 데이터 노드가 인덱싱이나 검색 트래픽을 받지 않도록 합니다. 코디네이터가 데이터 노드에 샤드 복사본을 요청할 때, 가중치 라운드 로빈 알고리즘의 가중치를 사용하여 요청할 노드의 순서를 결정합니다. 대기 가용 영역의 가중치가 0이기 때문에, 코디네이터 요청이 전송되지 않습니다.
OpenSearch 서비스 클러스터에서는 다음 그림에 표시된 것처럼 가용 영역 순환 메트릭스를 사용하여 언제든지 활성 영역과 대기 영역을 확인할 수 있습니다.
가용 영역 중단 시, 대기 상태의 가용 영역은 검색 요청을 위해 장애 개방 모드로 원활하게 전환됩니다. 즉, 활성 가용 영역에서 정상적인 샤드 복사본을 사용할 수 없는 경우, 샤드 쿼리 트래픽은 대기 상태의 가용 영역을 포함한 모든 가용 영역으로 라우팅됩니다. 이 장애 개방 접근 방식은 장애 발생 시 검색 요청이 중단되지 않도록 보호하여 지속적인 서비스를 보장합니다. 다음 다이어그램은 이 아키텍처를 보여줍니다.
위의 다이어그램에서, 정상 상태에서는 샤드 쿼리 트래픽이 활성 가용 영역(Zone-A와 Zone-B)의 데이터 노드로 전송됩니다. Zone-A의 노드 장애가 발생하면 대기 가용 영역(Zone-C)이 트래픽을 받을수 있도록 변경 되어 검색 요청에 영향을 미치지 않습니다. 결국, Zone-A가 비정상 상태로 감지되고 읽기 장애 조치이 대기 영역을 Zone-A로 전환합니다.
쓰기 장애 시 고가용성을 보장하는 장애 조치
OpenSearch 서비스 복제 모델은 동기적 특성을 특징으로 하는 기본 백업 모델을 따르며, 쓰기 요청이 사용자에게 승인되기 전에 모든 샤드 복사본의 승인이 필요합니다. 이 복제 모델의 한 가지 주목할 만한 단점은 쓰기 경로가 손상될 경우 속도가 느려질 수 있다는 점입니다. 이러한 시스템은 장애나 지연을 식별하기 위해 활성 리더 노드를 사용하며, 이 정보를 모든 노드에 브로드캐스팅합니다. 이러한 문제를 감지하는 데 걸리는 시간(평균 감지 시간)과 그 후 문제를 해결하는 데 걸리는 시간(평균 복구 시간)에 따라 시스템이 손상된 상태에서 작동하는 기간이 크게 달라집니다. 또한, 영역 간 통신에 영향을 미치는 모든 네트워킹 이벤트는 복제의 동기적 특성으로 인해 쓰기 요청을 상당히 방해할 수 있습니다.
OpenSearch 서비스는 내부 노드 간 통신 프로토콜을 활용하여 쓰기 트래픽을 복제하고 선출된 리더를 통해 메타데이터 업데이트를 조정합니다. 따라서, 스트레스를 받는 영역을 대기 상태로 두는 것은 쓰기 장애 문제를 효과적으로 해결하지 못합니다.
영역별 쓰기 장애 조치: 영역 간 복제 트래픽 차단
Multi-AZ with Standby의 경우, 영역 장애 및 네트워킹 이벤트와 같은 예기치 않은 이벤트로 인해 발생할 수 있는 잠재적인 성능 문제를 완화하려면 영역 쓰기 장애 복구가 효과적인 접근 방식입니다. 이 접근 방식은 영향을 받는 영역의 노드를 클러스터에서 안정적으로 제거하여 영역 간 입출력 트래픽을 효과적으로 차단합니다. 영역 간 복제 트래픽을 분리함으로써 클러스터 내 장애의 영향 최대한 억제할 수 있습니다. 이 접근 방식은 고객에게 보다 예측 가능한 경험을 제공하고 시스템이 안정적으로 계속 작동하도록 보장합니다.
원할한(Graceful) 쓰기 전환
OpenSearch 서비스 내에서 쓰기 장애 조치의 조정은 잘 정의된 메커니즘을 통해 선출된 리더 노드에 의해 수행됩니다. 이 메커니즘은 클러스터 상태 공개를 위한 합의 프로토콜을 포함하며, 모든 노드 간에 만장일치로 합의하여 (항상) 단일 영역을 폐기하도록 지정합니다. 중요한 것은, 영향을 받는 영역과 관련된 메타데이터가 모든 노드에 복제되어 중단이 발생한 경우 전체 재시작 중에도 지속성을 보장한다는 것입니다.
또한, 리더 노드는 I/O 펜싱을 시작하기 전에 5분 동안 영향을 받는 영역에 있는 노드를 대기 상태로 두어 원활하고 그레이스풀 전환을 보장합니다. 이러한 신중한 접근 방식은 새로운 코디네이터 트래픽이나 샤드 쿼리 트래픽이 영향을 받는 영역 내의 노드로 향하는 것을 방지합니다. 따라서 이러한 노드는 진행 중인 작업을 원활하게 완료하고 서비스가 중단되기 전에 진행 중인 요청을 점진적으로 처리할 수 있습니다. 다음 다이어그램은 이 아키텍처를 보여줍니다.
리더 노드에 대한 쓰기 장애 조치를 구현하는 과정에서, OpenSearch 서비스는 다음과 같은 핵심 단계를 따릅니다:
- 리더 사임 – 리더 노드가 쓰기 장애 조치가 예정된 영역에 위치해 있는 경우, 시스템은 리더 노드가 자발적으로 리더 역할에서 물러나도록 합니다. 이 사임은 통제된 방식으로 이루어지며, 전체 프로세스는 다른 적격 노드로 넘겨지고, 그 다음에 필요한 조치를 담당합니다.
- 사임 예정 리더의 재선출 방지 – 쓰기 전환이 필요한 영역에서 리더의 재선출을 방지하기 위해, 적격 리더 노드가 쓰기 전환 작업을 시작할 때, 사임 예정 리더 노드가 더 이상 투표에 참여하지 않도록 조치를 취합니다. 이는 투표 구성에서 폐기될 리더 노드를 제외함으로써 달성되며, 클러스터 운영의 중요한 단계에서 투표가 이루어지지 않도록 효과적으로 방지합니다.
쓰기 장애 조치 영역과 관련된 메타데이터는 클러스터 상태 내에 저장되며, 이 정보는 분산된 OpenSearch 서비스 클러스터의 모든 노드에 다음과 같이 게시됩니다.
"decommissionedAttribute": {
"awareness": {
"zone": "us-east-1c"
},
"status": "successful",
"requestID": "FLoyf5v9RVSsaAquRNKxIw"
}
다음 그림은 특정 영역에서 네트워킹 속도가 느려지는 동안 쓰기 장애 조치 기능이 가용성을 복구하는 데 도움이 된다는 것을 보여줍니다.
쓰기 장애 복구 후 영역 복구
영역 재가동 과정은 영역 쓰기 장애 조치 후 복구 단계에서 중요한 역할을 합니다. 영향을 받은 영역이 복구되고 안정된 것으로 간주되면, 이전에 해제되었던 노드가 클러스터에 다시 참여하게 됩니다. 이 재가동은 일반적으로 영역이 재가동된 후 2분 이내에 발생합니다.
이를 통해 다른 노드와 동기화할 수 있고, 복제 샤드의 복구 프로세스를 시작하여 클러스터를 원하는 상태로 효과적으로 복원할 수 있습니다.
결론
OpenSearch Service Multi-AZ with Standby의 도입은 기업에 중요한 업무에 대해 고가용성과 일관된 성능을 달성할 수 있는 강력한 솔루션을 제공합니다. 이 배포 옵션을 사용하면 기업은 인프라의 복원력을 강화하고, 클러스터 구성 및 관리를 단순화하며, 모범 사례를 적용할 수 있습니다. 가중 라운드 로빈 샤드 복사 선택, 사전 예방적 장애 조치 메커니즘, 장애 개방 대기 가용 영역과 같은 기능을 갖춘 OpenSearch Service Multi-AZ with Standby는 까다로운 기업 환경에 안정적이고 효율적인 검색 경험을 보장합니다.
Multi-AZ with Standby에 대한 자세한 내용은 HAQM OpenSearch Service Under the Hood: Multi-AZ with Standby 블로그를 참조하세요.