46.5kデモを予約するログイン無料で始める

JuiceFSに基づくMilvusクラスタの構築

Jun 15, 20211 min read

オープンソースコミュニティ間のコラボレーションは魔法のようなものだ。情熱的で、知的で、創造的なボランティアは、オープンソースのソリューションを革新的なものに保つだけでなく、さまざまなツールを興味深く有用な方法で一つにまとめる作業も行っている。世界で最も人気のあるベクトルデータベースであるMilvusと、クラウドネイティブ環境向けに設計された共有ファイルシステムであるJuiceFSは、それぞれのオープンソースコミュニティによってこの精神で結ばれた。この記事では、JuiceFSとは何か、JuiceFS共有ファイルストレージをベースとしたMilvusクラスタの構築方法、そしてこのソリューションを使用することでユーザが期待できるパフォーマンスについて説明します。

**JuiceFSとは?

JuiceFSは高性能なオープンソースの分散POSIXファイルシステムで、RedisとS3の上に構築することができます。クラウドネイティブ環境向けに設計されており、あらゆるタイプのデータの管理、分析、アーカイブ、バックアップをサポートします。JuiceFSは、ビッグデータの課題解決、人工知能(AI)アプリケーションの構築、ログ収集などによく使われている。また、複数のクライアント間でのデータ共有にも対応しており、Milvusの共有ストレージとして直接使用することもできる。

データとそれに対応するメタデータがそれぞれオブジェクトストレージとRedisに永続化された後、JuiceFSはステートレスミドルウェアとして機能する。データ共有は、標準的なファイルシステムインタフェースを通じて、異なるアプリケーション同士がシームレスにドッキングできるようにすることで実現されます。JuiceFSは、メタデータの保存にオープンソースのインメモリデータストアであるRedisを利用している。Redisが使用される理由は、アトミティシティが保証され、高性能なメタデータ操作が提供されるからです。すべてのデータは、JuiceFSクライアントを通じてオブジェクトストレージに格納されます。アーキテクチャ図は以下の通り:

JuiceFSの全体アーキテクチャ](https://assets.zilliz.com/juicefs_architecture_2023b37a4e.png)

JuiceFSをベースとしたMilvusクラスタの構築

JuiceFSで構築されたMilvusクラスタ(以下のアーキテクチャ図を参照)は、クラスタシャーディングミドルウェアであるMishardsを使用してアップストリームリクエストを分割し、リクエストをサブモジュールにカスケードダウンすることで動作します。データを挿入するとき、Mishardsは上流のリクエストをMilvusの書き込みノードに割り当て、書き込みノードは新しく挿入されたデータをJuiceFSに格納する。データを読み込む場合、MishardsはJuiceFSからMilvus readノードを通じてデータをメモリにロードして処理し、上流のサブサービスから結果を収集して返します。

JuiceFSで構築されたMilvusクラスタのアーキテクチャ](https://assets.zilliz.com/milvus_cluster_built_with_juicefs_3a43cd262c.png)

ステップ1: MySQLサービスを起動する。

クラスタ内の任意のノードでMySQLサービスを起動します。詳細については、Manage Metadata with MySQLを参照してください。

ステップ2: JuiceFSファイルシステムを作成する。

デモンストレーションのため、コンパイル済みのバイナリJuiceFSプログラムを使用します。お使いのシステムに適したインストール・パッケージをダウンロードし、JuiceFS クイック・スタート・ガイドに従って詳しいインストール手順を確認してください。JuiceFSファイルシステムを作成するには、まずメタデータ・ストレージ用にRedisデータベースをセットアップします。パブリッククラウドのデプロイメントでは、アプリケーションと同じクラウド上でRedisサービスをホストすることをお勧めします。さらに、JuiceFS用のオブジェクトストレージをセットアップします。この例ではAzure Blob Storageを使用していますが、JuiceFSはほぼすべてのオブジェクトサービスをサポートしています。シナリオの要求に最も適したオブジェクト・ストレージ・サービスを選択してください。

Redisサービスとオブジェクトストレージを設定したら、新しいファイルシステムをフォーマットし、JuiceFSをローカルディレクトリにマウントします:

1 $ export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX;EndpointSuffix=core.windows.net"
2 $ ./juicefs format  \
3 --ストレージ
4 --bucket https://<container> ¦コンテナを指定します。
5 ...\
6 localhost test #フォーマット
7 $ ./juicefs mount -d localhost ~/jfs #mount
8

Redisサーバーがローカルで動作していない場合は、localhostを以下のアドレスに置き換えてください:redis://<ユーザー:パスワード>@host:6379/1`。

インストールに成功すると、JuiceFSは共有ストレージページ/root/jfsを返します。

インストールに成功しました](https://assets.zilliz.com/installation_success_9d05279ecd.png)

ステップ3: Milvusを起動します。

クラスタ内のすべてのノードにMilvusをインストールし、各Milvusノードに読み込み権限または書き込み権限を設定します。Milvusは1ノードのみ書き込みノードとして設定でき、残りは読み込みノードとして設定する必要があります。まず、Milvus システム設定ファイル server_config.yaml の cluster セクションと general セクションのパラメータを設定する:

セクション cluster

パラメータ**説明設定
クラスタモードを有効にするかどうか。
role|Milvusのデプロイロール|rw/ro`|」を指定します。

セクション general

# meta_uri はMySQL (Milvus Cluster用)を使用したメタデータストレージのURIです。フォーマット: mysql://<ユーザ名:パスワード>@host:port/データベース
一般的な
  タイムゾーンUTC+8
  meta_uri: mysql://root:milvusroot@host:3306/milvus

インストール中、設定された JuiceFS 共有ストレージのパスは /root/jfs/milvus/db として設定される。

1 sudo docker run -d --name milvus_gpu_1.0.0 --gpus all ୧-͈ᴗ-͈⸝⸝.
2 -p 19530:19530 \
3 -p 19121:19121 \
4 -v /root/jfs/milvus/db:/var/lib/milvus/db ୧ #/root/jfs/milvus/db は共有ストレージのパスです。
5 -v /home/$USER/milvus/conf:/var/lib/milvus/conf ㊟ #/root/jfs/milvus/db は共有ストレージのパスです。
6 -v /home/$USER/milvus/logs:/var/lib/milvus/logs ☑は共有ストレージのパスです。
7 -v /home/$USER/milvus/wal:/var/lib/milvus/wal  \
8 milvusdb/milvus:1.0.0-gpu-d030521-1ea92e
9

インストールが完了したら、Milvusを起動し、正しく起動することを確認する。 最後に、クラスタ内の任意のノードでMishardsサービスを起動します。以下の画像はMishardsが正常に起動したことを示しています。詳細はGitHub チュートリアルをご参照ください。

Mishardsの起動に成功しました](https://assets.zilliz.com/mishards_launch_success_921695d3a8.png)

パフォーマンス・ベンチマーク

共有ストレージ・ソリューションは通常、ネットワーク・アタッチド・ストレージ(NAS)システムによって実装される。一般的に使用されるNASシステムのタイプには、ネットワークファイルシステム(NFS)やサーバーメッセージブロック(SMB)などがある。パブリック・クラウド・プラットフォームは一般に、Amazon Elastic File System(EFS)など、これらのプロトコルと互換性のあるマネージド・ストレージ・サービスを提供している。

従来のNASシステムとは異なり、JuiceFSはFUSE(Filesystem in Userspace)に基づいて実装されており、すべてのデータの読み書きがアプリケーション側で直接行われるため、アクセスの待ち時間がさらに短縮されます。また、データ圧縮やキャッシングなど、他のNASシステムにはないJuiceFS独自の機能もあります。

ベンチマークテストにより、JuiceFSがEFSよりも大きな利点を提供していることが明らかになりました。メタデータベンチマーク(図1)では、JuiceFSの1秒あたりのI/Oオペレーション(IOPS)はEFSの最大10倍です。さらに、I/Oスループットベンチマーク(図2)では、シングルジョブとマルチジョブの両方のシナリオで、JuiceFSがEFSを上回っています。

図1.メタデータベンチマーク](https://assets.zilliz.com/performance_benchmark_1_b7fcbb4439.png)

図2.シーケンシャル・リード/ライト・ベンチマーク](https://assets.zilliz.com/performance_benchmark_2_e311098123.png)

さらに、ベンチマークテストによれば、JuiceFSベースのMilvusクラスタにおける最初のクエリ検索時間、すなわち新しく挿入されたデータをディスクからメモリにロードする時間は平均でわずか0.032秒であり、データがディスクからメモリにほぼ瞬時にロードされることを示している。このテストでは、100万行の128次元ベクトルデータを100kバッチで1秒から8秒間隔で挿入し、最初のクエリ検索時間を測定している。

JuiceFSは安定した信頼性の高い共有ファイルストレージシステムであり、JuiceFS上に構築されたMilvusクラスタは、高いパフォーマンスと柔軟なストレージ容量の両方を提供する。

Milvusについてもっと知る

Milvusは、人工知能やベクトル類似検索の膨大なアプリケーションを強化できる強力なツールです。プロジェクトの詳細については、以下のリソースをご覧ください:

  • 私たちのブログを読む。
  • Slack](https://join.slack.com/t/milvusio/shared_invite/zt-e0u4qu3k-bI2GDNys3ZqX1YCJ9OM~GQ)でオープンソースコミュニティと交流する。
  • GitHub](https://github.com/milvus-io/milvus/)で、世界で最も人気のあるベクトル・データベースを利用したり、貢献したりする。
  • 私たちの新しいブートキャンプでAIアプリケーションを素早くテストし、デプロイする。

高昌堅の経歴](https://assets.zilliz.com/writer_bio_changjian_gao_68018f7716.png) ジンジン・ジャの経歴](https://assets.zilliz.com/writer_bio_jingjing_jia_a85d1c2e3b.png)

Updated on Jul 09, 2026