Qdrant Cloud 클러스터 확장하기

Qdrant Cloud 클러스터 확장하기 (cloud-cluster-scaling)

데이터의 양은 언제나 늘어나기 마련이라, 어느 시점에는 클러스터의 용량을 바꿔야 할 수도 있어요. Qdrant Cloud 콘솔의 **클러스터 상세 페이지(Cluster detail page)**에서 클러스터를 쉽게 **확장(scale up)**하거나 **축소(scale down)**할 수 있어요.

클러스터 확장

출처: Qdrant 공식 문서

수직 확장 (Vertical Scaling)

**수직 확장(vertical scaling)**은 각 데이터베이스 노드에 CPU, 저장소, 메모리 자원을 추가하거나 제거해서 클러스터의 용량을 늘리는 과정이에요.

최소한의 클러스터 구성으로 시작해서, 애플리케이션의 데이터가 늘어남에 따라 시간이 지나며 확장할 수 있어요. 클러스터가 여러 노드로 이뤄져 있다면 각 노드를 같은 크기로 확장해야 해요.

참고로 클러스터의 컬렉션이 **복제(replicated)**되지 않은 경우, 수직 확장에는 짧은 다운타임이 필요해요. CPU, 메모리, 디스크 크기를 적용하려면 클러스터의 각 노드를 재시작해야 하기 때문이에요.

클러스터를 **축소(scale down)**하려면, 새로 줄어든 메모리 크기가 그래도 클러스터의 모든 데이터를 저장하기에 충분해야 해요. 그렇지 않으면 데이터베이스 클러스터가 메모리 부족으로 크래시할 수 있어요. 따라서 새 메모리 크기는 데이터베이스 클러스터의 현재 메모리 사용량보다 최소한 약간의 버퍼를 포함해 그 이상이어야 해요. Qdrant Cloud는 너무 작은 메모리 크기로 Qdrant 데이터베이스 클러스터를 축소하지 못하게 자동으로 막아줘요.

또한 기반 클라우드 제공자의 기술적 제약 때문에 클러스터의 디스크 공간은 축소할 수 없다는 점을 기억하세요.

수평 확장 (Horizontal Scaling)

수직 확장은 클러스터 성능을 개선하고 용량을 늘리는 효과적인 방법이지만 한계가 있어요. 수직 확장의 주요 단점은 클러스터를 얼마나 늘릴 수 있는지에 한계가 있다는 점이에요. 어느 시점에 이르면 클러스터에 자원을 더 추가하는 일이 비현실적이거나 비용 효율적이지 않게 돼요.

이런 경우 **수평 확장(horizontal scaling)**이 더 효과적인 해결책일 수 있어요.

수평 확장노드를 더 추가하고, 그 노드들 사이에 부하와 데이터를 분산해서 클러스터의 용량을 늘리는 과정이에요. Qdrant의 수평 확장은 컬렉션 레벨에서 시작해요. 컬렉션을 만들 때 컬렉션을 분산할 샤드(shard)의 수를 선택해야 해요. 자세한 내용은 샤딩 문서를 참고하세요.

수평으로 확장할 때 클라우드 플랫폼은 데이터가 고르게 분산되도록 모든 노드에 걸쳐 사용 가능한 샤드를 자동으로 리밸런싱해요. 자세한 내용은 클러스터 구성(Configuring Clusters)을 참고하세요.

수평으로 축소할 때 클라우드 플랫폼은 삭제될 노드에 있던 샤드들이 남은 노드들로 이동되도록 자동으로 보장해요.

중요: 하나의 샤드는 여러 노드에 걸쳐 쪼개질 수 없어요. 그래서 컬렉션에 샤드를 2개로 구성했는데 클러스터를 1개 노드에서 3개 노드로 확장하면, 클러스터 노드를 완전히 활용할 수 없어요. 클라우드 플랫폼이 샤드를 자동으로 리밸런싱해서 두 노드에 각각 샤드 하나씩 두고, 세 번째 노드에는 샤드가 전혀 없게 돼요. 기존 컬렉션의 샤드 수를 바꾸려면 리샤딩(resharding) 기능을 사용할 수 있어요. 리샤딩이 완료되면 클라우드 플랫폼이 모든 노드에 걸쳐 샤드를 리밸런싱해 모든 노드가 활용되게 해요.

확장을 위한 최적의 전략에 대해 기꺼이 상담해 드릴게요. 문의를 통해 필요를 알려주시면 함께 적절한 해결책을 정할 수 있어요.

리샤딩 (Resharding)

Qdrant v1.13.0부터 사용 가능해요.

컬렉션을 만들면 특정한 수의 샤드를 가지게 돼요. 클러스터가 진화하면서 이상적인 샤드 수는 달라질 수 있어요.

**리샤딩(resharding)**을 하면 기존 컬렉션의 샤드 수를 위(up)와 아래(down)로 모두 바꿀 수 있어요. 컬렉션을 처음부터 다시 만들 필요 없이요.

리샤딩은 투명한(transparent) 과정이에요. 즉 리샤딩이 진행되는 동안에도 컬렉션은 다운타임 없이 사용 가능한 상태로 유지돼요. 이 덕분에 데이터를 완벽하게 분산한 채로 한 노드에서 원하는 수의 노드로, 그리고 다시 그 반대로 확장할 수 있어요.

샤드 수를 늘리려면(reshard up), 컬렉션 클러스터 설정 업데이트 API를 사용해 리샤딩 과정을 시작하세요.

POST /collections/{collection_name}/cluster

{
  "start_resharding": {
    "direction": "up",
    "shard_key": null
  }
}

샤드 수를 줄이려면(reshard down), "down" 방향을 지정하면 돼요.

리샤딩의 현재 상태는 컬렉션 클러스터 정보에서 확인할 수 있어요. 다음처럼 조회하면 돼요.

GET /collections/{collection_name}/cluster

시작한 리샤딩 작업은 끝까지 실행하는 걸 항상 권장해요. 하지만 어느 시점에 리샤딩 작업을 중단해야 한다면, 다음을 사용할 수 있어요.

POST /collections/{collection_name}/cluster

{
  "abort_resharding": {}
}

리샤딩에 관해 알아두면 좋은 점이 몇 가지 있어요.

  • 리샤딩 동안 클러스터의 성능이 약간 감소할 수 있어요.
  • 리샤딩 동안 보고되는 포인트 개수는 정확하지 않을 수 있어요.
  • 아주 큰 컬렉션에서는 리샤딩이 오래 걸리는 작업일 수 있어요.
  • 한 번에 컬렉션당 하나의 리샤딩 작업만 실행할 수 있어요.

더 알아보기 (Learn more)