クラスタ構成のQdrantでsnapshotを作成/復元する

クラスタ構成のQdrantでsnapshotを復元する際のめも

前提

[重要] Qdrantはクラスタ構成であること。

面倒なことにQdrantは1ノードの構成なのかクラスタ構成なのかでsnapshotの復元方法が異なる。

環境

github.com

手順

collection作成~point追加

これを使ってamazon_reviewというcollectionを作成 HuggingFaceのデータセットからamazonのレビューを取得して5000件ほどembeddingして追加。

github.com

data downloadとかembeddingに少し時間かかるので、自分で適当なcollectionとpointを作成したほうが早い。

qdrant.tech

snapshot作成

POST collections/amazon_review/snapshots

デフォルトでsnapshotのディレクトリは./snapshotsになっている。

コンテナの中に入って確認したらこんな感じ。

root@3396583d4622:/qdrant# ls -lh snapshots/amazon_review/
total 73M
-rw-r--r-- 1 root root 73M Aug 26 07:52 amazon_review-8556042130106098-2023-08-26-07-52-28.snapshot

snapshotが作成されていることが確認できたので、collectionを削除。

DELETE collections/amazon_review

snapshot復元

snapshotの復元方法は二つあるがクラスタ構成の場合はAPIを使って復元する方法一択になる。

まずcollectionを作成する。

PUT collections/amazon_review
{
    "vectors": {
      "size": 768,
      "distance": "Cosine"
    }
}

次にsnapshotを復元する。

PUT /collections/amazon_review/snapshots/recover
{
  "location": "http://qdrant_primary:6333/collections/amazon_review/snapshots/amazon_review-8556042130106098-2023-08-26-07-32-20.snapshot"
}

ポイントはsnapshot復元前にcollectionを作成しておくこと。そして作成時にvectorsのsizeはsnapshotのものに揃えておくこと。 ここが間違っているとエラーになる。

collectionを作成せずにrecoverすると以下のエラーが返ってくる。

{
  "error": "Wrong input: Failed to download snapshot from http://qdrant_primary:6333/collections/amazon_review/snapshots/amazon_review-8556042130106098-2023-08-26-07-52-28.snapshot: status - 404 Not Found"
}

download snapshot でエラーが発生してstatus 404なのでlocationが間違っているように見えるが、単純にcollectionがないだけである。

そしてややこしいことに、本当にsnapshotが存在しない場合も

PUT /collections/amazon_review/snapshots/recover
{
  "location": "http://qdrant_primary:6333/collections/amazon_review/snapshots/hogehogehoge.snapshot"
}

同様のエラーが返ってくる...

{
  "error": "Wrong input: Failed to download snapshot from http://qdrant_primary:6333/collections/amazon_review/snapshots/hogehogehoge.snapshot: status - 404 Not Found"
}

collectionがないことに気づかず無駄な時間を使ったのでこのエラーが出た場合は注意.

参考

qdrant.tech