분산 배포

분산 배포 (Distributed Deployment)

Qdrant v0.8.0부터 사용 가능

Qdrant는 분산 배포 모드(distributed deployment mode) 를 지원해요.

이 모드에서는 여러 Qdrant 서비스가 서로 통신하며 피어(peer)들 사이에 데이터를 분산해서 저장 용량을 확장하고 안정성을 높여요.

출처: Qdrant 공식 문서 — distributed_deployment

Qdrant Cloud에서 분산 모드 활성화하기

최상의 결과를 위해서는 클러스터가 Qdrant v1.7.4 이상에서 실행 중인지 먼저 확인하세요. 더 오래된 Qdrant 버전도 분산 모드를 지원하지만, v1.7.4의 개선 사항 덕분에 분산 클러스터가 장애 중에 더 회복력이 좋아요.

분산 모드를 활성화하려면 Qdrant Cloud 콘솔에서 "Scale Cluster"를 클릭하고 원하는 노드 개수를 선택하세요.

추가로 Qdrant Cloud는 컬렉션을 자동으로 리밸런싱하고 리샤딩(reshard)하는 기능을 제공하는데, 이는 셀프호스팅 Qdrant에서는 사용할 수 없어요. 자세한 내용은 ReshardingShard Rebalancing 섹션을 참고하세요.

새 분산 Qdrant 클러스터 활용하기

  • 각 노드에 충분한 샤드가 이미 있고 데이터가 이미 복제된 상태라면, 샤드를 이동(move)해서 데이터를 (복제 없이) 새 노드로 옮길 수 있어요.

샤딩 (Sharding)

Qdrant는 컬렉션의 포인트를 샤드들 사이에 분산해서 수평 확장을 해요. 샤딩의 개념에 대해서는 Horizontal Scaling의 Sharding 부분을 참고하세요.

올바른 샤드 개수 고르기

import { QdrantClient } from "@qdrant/js-client-rest";
client.createCollection("{collection_name}", {
  vectors: { size: 300, distance: "Cosine" },
  shard_number: 6,
});

리샤딩 (Resharding)

Cloud에서 v1.13.0부터 사용 가능

대규모 컬렉션의 리샤딩은 오래 걸릴 수 있어요. 컬렉션을 만들 때 원하는 샤드 개수를 설정하는 게 더 좋아요.

자세한 내용은 클라우드 문서의 Resharding 섹션을 참고하세요.

사용자 정의 샤딩 (User-Defined Sharding)

멀티테넌시 (Multitenancy)

테넌트 중심의 워크스루는 Multitenancy 가이드의 사용자 정의 샤딩을 참고하세요.

카디널리티가 큰 키(cardinality keys)는 대신 payload로 파티셔닝을 사용하는 걸 권장해요.

이제 커스텀 샤드를 만들어야 해요 (API reference).

샤드 전송 방식 (Shard Transfer Method)

  • stream_records(기본값) 레코드를 대상 노드로 배치 단위로 스트리밍해서 전송.
  • snapshot스냅샷을 자동으로 활용해 인덱스와 양자화된 데이터까지 포함해서 전송.
  • wal_delta(자동 복구 기본값) WAL 차이를 해결해, 놓쳤던 연산들만 전송.

샤드 전송 방식을 선택하려면 method를 지정해요:

 POST /collections/{collection_name}/cluster
 {
     "move_shard": {
         "shard_id": 0,
         "from_peer_id": 381894127,
         "to_peer_id": 467122995,
         "method": "snapshot"
     }
 }

wal_delta 전송 방식은 두 샤드 사이의 차이만 전송해요. 더 정확히 말하면, 대상 샤드에 놓친 연산들을 모두 전송해요. 두 샤드의 WAL을 사용해 이를 해결해요. 두 가지 이점이 있어요: (1) 전송량이 적고, (2) 자동 복구 시 빠릅니다.

리스너 모드 (Listener Mode)

리스너 모드를 활성화하려면 config 파일에서 node_typeListener로 설정해요:

storage:
  node_type: "Listener"

리스너 노드는 검색 연산에는 참여하지 않지만, 쓰기 연산은 받아들이고 데이터를 로컬 스토리지에 저장해요.

더 알아보기 (Learn more)