온프레미스이든 퍼블릭 클라우드이든, 카우치베이스(Couchbase) 고객들은 ACID 트랜잭션, 높은 내구성의 쓰기, 고가용성 및 고성능이라는 고유한 요구사항을 가지고 있습니다. 카우치베이스의 아키텍처는 이러한 요구사항을 충족하는 동시에 DevOps와 DBA의 고충을 줄여줍니다(어쩌면 커피 타임을 갖거나 편안한 밤 휴식을 취할 수 있도록 말이죠!). 특히, 이벤트 기반의 비동기식 설계는 하나의 활성 복제본과 최대 3개의 예비 복제본을 지원하며, 리전 내에서 자동 장애 조치(failover)를 지원합니다. 마찬가지로, 서버 그룹 공중 클라우드의 랙 수준이나 심지어 가용 영역 수준에서도 광범위하게 사용되어 고가용성, 지속성 있는 쓰기 및 고성능을 제공할 수 있는 내장 기능입니다. 이러한 모든 기능이 결합되어 기본적으로 유연성과 복원력을 제공합니다.
클러스터를 결합하고 서버 그룹을 활용하는 방법
이 블로그에서는 서버 그룹을 사용하여 가용 영역으로 분할된 리전의 여러 클러스터를 하나의 자동 샤딩된 데이터베이스로 결합하는 방법을 설명합니다. 클러스터를 세 개의 개별 서버 그룹으로 결합하면 다음과 같은 몇 가지 장점이 있습니다.
- 더 많은 노드에 부하를 분산시키면 더 많은 트래픽과 더 큰 데이터 용량을 처리하는 데 도움이 됩니다.
- 가용 영역 모델의 장애 조치 이중화를 지원하고 스플릿 브레인 문제를 방지합니다.
- Couchbase의 내장된 자동 페일오버 기능을 활용하여, 오프라인 상태의 서버 그룹이나 가용 영역이 자동으로 페일오버됩니다.
- 클러스터를 결합하는 것은 다중 문서 트랜잭션을 지원하는 단일 활성 데이터 또는 문서 복사본을 의미합니다. 여러 클라이언트로부터 동일한 문서에 다수의 쓰기와 읽기 작업이 발생하는 경우에도 충돌 해결이 필요하지 않습니다. 필요한 경우, 쓰기와 읽기 작업은 복제본 및 지속성 계층과 일치하도록 유지될 수 있으며 ACID 트랜잭션을 보장합니다.
최근에 저는 두 개의 개별 클러스터와 상호작용하는 두 개의 애플리케이션 환경을, 복제본과 디스크 모두에 대한 내구성 있는 쓰기를 보장하면서 고가용성을 갖춘 하나의 클러스터로 고객이 이전할 수 있도록 도울 기회가 있었습니다. 과제는 각 애플리케이션이 아래에 설명된 대로 쓰기 보장과 함께 클러스터 내의 하나의 활성 복사본에 쓴다는 점이었습니다. 
쓰기 보증이란 각 애플리케이션이 활성 복제본에 쓰고, 데이터를 잠근 다음, 복제본과 디스크에 기록될 때까지 기다리는 것을 의미합니다. 이전 다른 응용 프로그램이 데이터를 읽고 쓸 수 있었습니다. 복잡하게 들리나요? Couchbase와 서버 그룹을 사용하면 실제로 그렇지 않습니다.
고객은 여기에 표시된 것과 같이 하나의 리전 내에 세 개의 가용 영역을 사용하는 퍼블릭 클라우드를 활용하여 자동 장애 조치 기능이 있는 단일 클러스터를 원했습니다.
Couchbase 서버 그룹의 이점
위의 토폴로지는 다음과 같은 지원 기능을 갖추고 있습니다:
- 자동 장애 조치(Failover) 기능을 사용할 수 있습니다.
- 클러스터의 노드 수에 따라 하나의 활성 데이터 복사본과 최대 3개의 복제본을 사용할 수 있습니다.
- 전체 클러스터에 걸쳐 활성 및 복제본 복사본을 균형 있고 자동으로 분산합니다.
- 인덱스와 복제본 인덱스는 가용 영역 간에 균형 있게 배치됩니다.
Couchbase가 이러한 각 기능을 어떻게 지원하는지 살펴보겠습니다.
퍼블릭 클라우드 리전(또는 온프레미스 배포 환경까지도)에는 자동 장애 조치 기능이 필요합니다. 일반적으로 온프레미스 배포의 경우, 고객은 전원 공급 장치 고장과 같은 랙 장애로 인한 데이터 손실을 방지하기 위해 여러 랙에 걸쳐 머신을 분산시키기를 원합니다.
카우치베이스 서버 그룹 데이터의 활성 및 복제본 복사본이 서버 그룹 간에 고르게 분산되는 기능입니다. 그러나 활성 데이터는 하나의 서버 그룹/가용 영역에만 상주하지 않고 확장됩니다. 모두 서버 그룹들. 각 활성 문서와 인덱스에 대해 복제본은 서로 다른 그룹에 속하는 것이 보장됩니다.
데이터를 미리 계획하고 정렬할 필요가 없습니다. 카우치베이스의 아키텍처가 알아서 처리해 줍니다! 하지만 왜 세 개의 그룹일까요? 이는 그룹이나 가용 영역에 장애가 발생했을 때 스플릿 브레인(split-brain) 시나리오를 방지하기 위해서입니다.
고가용성 및 고성능 클러스터 구축 방법
두 개의 클러스터를 결합하고 세 번째 서버 그룹을 추가하는 권장 절차는 무엇입니까? 오토 샤딩, 인덱스 레플리카 관리 및 서버 그룹 덕분에 Couchbase를 사용하면 실제로 그리 복잡하지 않습니다. 다음 그림에서 볼 수 있듯이, 한 클러스터에서 다른 클러스터(예: 클러스터 2)로 교차 데이터 센터 복제(XDCR) 기능을 사용한 다음 새 서버 그룹을 생성합니다.
클러스터 2가 주 클러스터가 되며, 해당 노드들은 다음과 같이 선언됩니다. 서버 그룹 1, 이는 Couchbase가 런타임에 수행할 수 있는 작업입니다!
그런 다음 노드를 하나씩 추가하여 서버 그룹 2를 생성할 수 있습니다. 이것이 퍼블릭 클라우드 배포인 경우, 가용성 그룹 2로 선언할 수도 있습니다.
퍼블릭 클라우드 배포인 경우, 마지막으로 가용 영역 3에 서버 그룹 3 노드를 클러스터에 추가합니다.
이것은 두 가지 방법으로 수행할 수 있습니다. 각 노드를 추가할 때마다 한 번씩 노드 단위로 재조정하는 방법, 또는 모든 노드를 추가한 후에 재조정하는 방법입니다.
클러스터에 노드를 하나 추가하고 동일한 리밸런싱 중에 노드를 제거하면, 카우치베이스 서버는 “스왑 리밸런싱”을 수행하며, 이는 이 과정에서 데이터와 인덱스가 이동하므로 리소스를 많이 소모하는 작업이 될 수 있습니다. 리밸런싱 및 업그레이드 문서를 참조하세요 이에 대한 자세한 내용은 다음과 같습니다. 이는 트래픽이 적은 시간에 주의해서 수행해야 합니다. 시간이 다소 걸릴 수 있으므로 그에 맞춰 계획을 세우세요.
하지만 모든 리전마다 두 개의 인덱스 및 쿼리 노드가 모두 필요한가요? 사실 그것은 쿼리 트래픽에 따라 다릅니다. 하지만 쿼리 트래픽이 많지 않다면 서버 그룹당 하나의 인덱스 쿼리 노드를 사용하는 것도 가능합니다.
카우치베이스의 고가용성 목표
- Couchbase는 100%의 가동률을 유지하도록 설계되었으며, 즉 다운타임이 전혀 없습니다.
- 카우치베이스는 진정한 자동 샤딩 데이터베이스입니다. 즉, 운영 전환 중에 클러스터 전걸에 걸친 데이터 분산은 데브옵스나 데이터베이스 관리자에게 과도한 작업이 아닙니다.
- 서버 그룹 기능은 가용 영역을 위한 것이며, 카우치베이스는 활성 데이터 및 복제본 데이터와 인덱스가 동일한 서버 그룹에 위치하지 않음을 보장합니다.
- 세 개의 가용 영역에 있는 세 개의 서버 그룹은 사전 설정된 타이머를 기반으로 하는 Couchbase의 자동 장애 조치 기능을 활성화합니다. 자동 장애 조치는 노드 또는 서버 그룹에 장애가 발생했다고 선언하고, 복제본을 생성하고 클러스터 맵을 클라이언트에 푸시하기 위한 적절한 조치를 취합니다.
다음 단계 및 리소스
Couchbase는 아키텍처 자체에 자율성이 내장되어 있어, 데이터와 인덱스의 이동이 간소화되고 자동으로 이루어집니다. 클러스터를 통합하는 것이 왜 좋은지, 그리고 이를 100% 수준의 내결함성을 갖도록 만드는 방법에 대해 살펴보았습니다. Couchbase가 강력한 이유는 운영 중단이 없기 때문이며, 클러스터는 항상 가동 상태를 유지합니다. 애플리케이션이 클러스터와 상호작용하기 위해 코드를 수정할 필요가 없습니다. 클러스터 변경 사항은 SDK의 내부 클러스터 맵에서 처리되며, 이러한 변경 사항은 애플리케이션 자체에 전혀 영향을 미치지 않습니다.
카우치베이스의 디자인 팀과 아키텍처는 거의 모든 사용 사례에 최적의 내결함성 데이터베이스를 만들기 위해 운영 자율성과 자동 샤딩을 포함하도록 선구적입니다.
자동화의 다음 진화는 Couchbase의 쿠버네티스를 위한 자율형 오퍼레이터 그리고 OpenShift입니다. 오퍼레이터가 작업을 수행하여 스스로 복구하고 관리하는 클러스터를 상상해 보십시오. 이것이 바로 Couchbase Autonomous Operator입니다. 위에서 설명한 프로세스는 오퍼레이터와 새로운 최종 클러스터의 YAML 파일을 통해 모두 실행될 수 있습니다. 정말 그렇게 간단합니다.
자원
고가용성 클러스터, 리밸런싱 등에 대해 자세히 알아보려면 다음 문서와 페이지를 읽어보세요.




댓글 남기기
댓글을 달기 위해서는 로그인해야합니다.