카우치베이스 서버

카우치베이스 서버 7.1의 리밸런싱 중 스마트 배치 인덱스 빌드

재조정 는 Couchbase Server 클러스터 관리의 핵심 기능입니다. 클러스터에 노드가 추가되거나 클러스터에서 제거될 때 서비스를 재분배할 수 있습니다. 이 기능을 사용하면 클러스터의 노드 간에 데이터 및 인덱스, 쿼리 및 이벤트 처리를 조정하여 메모리 및 CPU를 비롯한 리소스 사용량의 균형을 노드 간에 균등하게 맞출 수 있습니다. 재조정은 온라인 작업입니다.-일반 클러스터 워크로드와 동시에 실행됩니다.-따라서 프로덕션 애플리케이션을 중단시키지 않고 적시에 작업을 수행하는 것이 중요합니다.

카우치베이스 서버 7.1은 새로운 기능을 통해 글로벌 보조 인덱스 서비스의 리밸런싱에 수많은 성능 개선과 리소스 사용량 감소를 가져왔습니다, 리밸런싱 중 스마트 배치 인덱스 빌드또는 "스마트 배치". 인덱스 서비스의 리밸런싱 개선 사항에 대해 자세히 알아보려면 계속 읽어보세요.

인덱스 재조정

인덱스 서비스 재균형은 전체 인덱스, 복제본 및 개별 인덱스 파티션을 사용 가능한 모든 인덱스 노드에 재분배하여 노드 간에 메모리 및 CPU 수요를 균등하게 분산합니다. (이 문서에서는 인덱스, 복제본 및 파티션을 통칭하여 "인덱스"라는 약어를 사용합니다.) 인덱스 서비스 재조정은 크게 두 단계로 이루어집니다:

  1. 계획
  2. 이동

에서 계획 단계인덱스 플래너는 시뮬레이션된 어닐링 알고리즘을 사용하여 실제 및 예상 메모리와 CPU 사용량을 기반으로 노드에서 원하는 인덱스 레이아웃을 최적화하는 동시에 인덱스를 다른 노드의 새 홈으로 이동하는 비용을 고려합니다.

그리고 이동 단계 는 플래너가 새 인덱스 레이아웃에 대한 원하는 계획을 생성한 후에 시작되며, 인덱스 이동에 대한 무거운 작업이 수행되는 곳입니다. 인덱스를 한 노드에서 다른 노드로 복사한다는 의미에서 실제로 "이동"하는 것이 아니라 메타데이터가 이동되고 데이터 서비스에서 인덱싱된 데이터 필드 스트림에서 새로운 위치에 인덱스가 다시 구축된다는 점에 유의하세요. 이동해야 하는 인덱스의 수와 크기에 따라, 이 단계는 상당한 시간이 소요될 수 있으며 클러스터에 많은 리소스를 요구할 수 있습니다.

7.1 스마트 배치 기능은 이전 Couchbase Server 버전에 비해 소요 시간과 리소스 소비량을 모두 줄여줍니다. 또한 리밸런싱 리소스 사용을 최소화하는 것보다 실행 시간 단축을 우선시하는 사용 사례의 경우 이전 릴리스에서 가능했던 것보다 더 높은 동시성을 지원합니다.

스마트 배치

인덱스 서비스 재조정 중에 인덱스를 현재 노드에서 새로 계획된 대상으로 이동하는 작업은 동시에 실행 중인 프로덕션 워크로드에 너무 많은 영향을 주지 않도록 제한된 크기의 배치로 수행됩니다. 기본 배치 크기는 이전 릴리즈에서 변경되지 않은 3개이지만, 관리자가 이 크기를 늘리는 방법은 이 문서 끝에 있는 '배치 크기 관련 참고 사항' 섹션을 참조하세요.

스마트 배치 기능은 인덱스 서비스의 리밸런싱에 많은 개선을 가져왔습니다:

  1. 리밸런싱 성능이 다음과 같이 향상됩니다.
    • 파이프라인 병렬 처리 향상
    • 선택적으로 전체 동시성 증가
  2.  다음을 통해 리소스 소비를 줄입니다.
    • 데이터 스트림 공유 최적화
  3.  다음과 같이 프로덕션 워크로드에 미치는 영향을 줄입니다.
    • 인덱스를 이동하기 전에 복제본 복구
    • 부하가 많은 인덱스 노드에서 동시성 줄이기

 각 항목에 대해 차례로 간략히 살펴보겠습니다.

파이프라인 병렬 처리 향상 

파이프라인 병렬 처리 향상 은 여러 가지 방법으로 수행됩니다. 첫째, 스마트 배칭은 인덱스 이동 배치를 겹쳐서 처리합니다. 이전 알고리즘에서는 다음 배치를 시작하기 전에 전체 이동 배치가 완료될 때까지 기다려야 했기 때문에 각 배치에서 가장 오래 실행되는 이동이 다음 배치의 시작을 지연시키는 '롱폴' 효과가 발생하여 전체 동시성 수준이 상대적으로 안정적으로 유지되지 않고 펄스 단위로 위아래로 진동했습니다. 대신 스마트 배치에서는 이전 배치의 하위 집합만 완료되면 새 인덱스 이동 배치를 시작하여 전체 동시성 수준을 원하는 최대값에 가깝게 유지합니다.

둘째, 스마트 배칭은 인덱스 및 파티션 삭제와 다른 인덱스의 빌드를 겹쳐서 수행합니다. 인덱스 "이동"은 실제로 메타데이터를 이동하고, 새 노드에서 인덱스를 빌드한 다음, 원래 노드에서 삭제하는 것으로 구성됩니다. 이전 알고리즘에서는 일괄 처리의 모든 인덱스 빌드가 완료될 때까지 기다렸다가 드롭을 시작해야 했습니다. 스마트 일괄 처리는 이전에 구축된 인덱스를 삭제하는 프로세스와 새 인덱스를 구축하는 프로세스를 겹쳐서 수행합니다.

마지막으로, 스마트 일괄 처리는 모든 지연된 인덱스를 작은 단위로 이동하는 대신 한꺼번에 이동합니다. 지연된 인덱스는 지연된 인덱스로 생성된 인덱스(WITH {"defer_build": true})가 있지만 아직 빌드 명령이 실행되지 않은 인덱스입니다. 이러한 인덱스에 대한 메타데이터만 존재하며, 이는 매우 작은 크기(대략 해당 인덱스에 해당하는 인덱스 생성 N1QL 문)을 사용하여 대상 노드에 빌드할 필요가 없으므로 이동하는 데 클러스터 리소스를 거의 소비하지 않습니다. 이전 릴리즈에서는 작은 배치로 이동했는데, 각 배치가 다음 배치가 시작되기 전에 완료되어야 했기 때문에 더 많은 월 클럭 시간이 소모되었습니다.

전체 동시 접속자 수 증가

선택적으로 전체 동시성 증가 은 스마트 배치 기능의 개선 사항으로, 최대 배치 크기를 더 크게 설정할 수 있어 더 많은 인덱스 이동을 동시에 수행할 수 있습니다. 기본 배치 크기인 3개는 이전 릴리즈에서 변경되지 않았지만, 이제 이전에는 지원되지 않았던 배치 크기를 10보다 큰 숫자로 설정할 수 있습니다. 이전 릴리즈와 마찬가지로, 인덱스 서비스는 인덱스 또는 데이터 노드에 과부하가 걸리지 않도록 인덱스 빌드 시 한 번에 최대 10개의 데이터 스트림만 생성하지만, 스트림 공유(다음 항목에 설명)를 사용하면 이전에는 지원되지 않았던 총 10개 이상의 인덱스를 동시에 빌드하면서 해당 스트림을 소비할 수 있습니다.

데이터 스트림 공유

데이터 스트림 공유 최적화 는 여러 인덱스 빌드가 가능한 한 자주 동일한 데이터 스트림을 공유하도록 배치를 구성하는 것을 의미합니다. 스마트 배칭은 동일한 배치에서 스트림을 공유할 수 있는 인덱스를 우선적으로 예약하여, 빌드 프로세스 중에 인덱스와 데이터 노드 모두에서 소비되는 클러스터 리소스, 특히 CPU의 양을 줄입니다. 이전에는 배치 내에서 이동되는 인덱스의 하위 집합이 기본적으로 무작위였습니다.

스트림 공유는 배치에 대해 이미 선택된 인덱스와 스트림을 공유할 인덱스를 우선적으로 선택함으로써 최적화됩니다.

    • 동일한 인덱스의 파티션은 동일한 데이터 스트림을 공유할 뿐만 아니라 정확히 동일한 인덱스 키 세트가 필요하므로 스트리밍해야 하는 데이터 필드의 양을 최소화할 수 있으므로 가장 선호됩니다.
    • 동일한 인덱스의 파티션이 충분하지 않은 경우 동일한 컬렉션에 있는 인덱스가 선호됩니다. 이러한 인덱스도 스트림을 공유하지만 일반적으로 서로 다른 키가 필요하므로 스트림을 사용하는 모든 인덱스가 스트림의 모든 데이터 필드를 공유하지는 않습니다.

복제본 복구

인덱스를 이동하기 전에 복제본 복구 는 스마트 배칭이 정기적인 인덱스 이동을 예약하기 전에 이전 노드 장애 조치로 인해 손실된 인덱스 복제본을 다시 빌드한다는 뜻입니다. 글로벌 보조 인덱스의 모든 복제본은 읽기와 쓰기 모두에 사용할 수 있으므로, 손실된 복제본을 먼저 구축하면 일부 복제본이 손실되어 소수의 복제본에 집중되었던 프로덕션 워크로드를 더 빠르게 노드 전체에 분산시킬 수 있습니다. 스마트 배치 이전에는 복제본 복구에 우선순위가 지정되어 있지 않았기 때문에 다른 인덱스 이동과 무작위로 섞여 있었습니다. 복제본 복구는 여전히 인덱스 재조정에서 가장 리소스 집약적인 측면인 인덱스 빌드가 필요하기 때문에 다른 이동과 마찬가지로 이미 설명한 새로운 중복 방식으로 일괄 처리됩니다.

동시 접속자 수 감소 

부하가 많은 인덱스 노드에서 동시성 줄이기 는 스마트 배치 기능이 Couchbase Server 7.1에 제공하는 마지막 리밸런싱 개선 사항입니다. 새로운 작업 배치를 생성할 때, 스마트 배칭은 각 노드에 이미 존재하는 인덱스의 크기를 고려하여 현재 배치의 특정 노드에 다른 인덱스를 구축할지(부하가 적은 노드에 대해 수행), 아니면 라운드 로빈 노드 시퀀스에서 다음 노드에 대한 인덱스 구축을 선택할지(부하가 더 많은 노드에 대해 수행) 여부를 결정합니다.

동일한 노드에서 더 많은 인덱스를 빌드하면 스트림 공유 가능성이 높아지지만, 빌드가 진행되는 동안 해당 노드에서 더 많은 CPU와 메모리를 소비하게 됩니다. 노드의 RSS(메모리 상주 세트 크기)가 평균 50%(표준 글로벌 보조 인덱스, 일명 플라즈마) 이상이거나 노드에서 이미 사용된 총 인덱스 서비스 메모리가 할당된 메모리 할당량의 최대 절반인 경우(메모리 최적화 인덱스) 노드는 부하가 적은 것으로 간주됩니다. 스마트 일괄 처리 기능 이전에는 재조정 알고리즘이 노드 부하를 고려하지 않았습니다.

혼합 레벨 클러스터를 위한 스마트 배치 지원

다른 인덱스의 빌드와 인덱스 및 파티션 드롭이 겹치는 특정 파이프라인 병렬화를 제외한 모든 스마트 배칭 혜택은 적어도 하나의 인덱스 노드가 Couchbase Server 7.1 이상을 실행하는 한, 릴리스 수준이 다른 노드가 있는 클러스터에도 적용됩니다.

배치 크기에 대한 참고 사항

인덱스 재조정 기본 배치 크기는 이전 값인 3으로 유지됩니다. Couchbase Server UI에는 이 구성 매개변수가 표시되지 않지만, Couchbase 관리자 권한이 있는 사용자는 다음을 통해 모든 인덱스 노드의 명령줄에서 이 매개변수를 변경할 수 있습니다:

변경 사항은 모든 인덱스 노드에 자동으로 전파되며 노드 및 클러스터가 다시 시작될 때 기억됩니다.

결론

Couchbase Server 7.1은 인덱스 서비스 재조정의 속도를 높이고 영향을 줄이는 핵심 재조정 기능에 많은 흥미로운 새로운 개선 사항을 제공합니다. 이 문서는 새로운 큰 수준의 변경 사항에 익숙해지는 데 도움이 될 뿐만 아니라 Couchbase Server 7.1에서 인덱스 재조정을 더욱 스마트하게 만드는 데 필요한 몇 가지 세부적인 사항을 이해하는 데 도움이 될 것입니다.

이 릴리스에는 그 외에도 많은 기능과 개선 사항이 포함되어 있습니다. Couchbase Server 7.1의 새로운 기능 를 클릭해 속도를 높이세요.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 케빈 체르카우어, 수석 소프트웨어 엔지니어, Couchbase

댓글 하나

  1. 인덱스를 다시 빌드하는 대신 물리적으로 이동하면 어떨까요? GSI는 기본적으로 (보조 키, pk) 쌍이므로 파일을 물리적으로 이동하기만 해도 유효하며 리소스 사용량이 적습니다. 여기서 제가 놓치고 있는 것이 있나요?

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.