JuiceFS 기반 Milvus 클러스터 구축
오픈 소스 커뮤니티 간의 협업은 마법 같은 일입니다. 열정적이고 지적이며 창의적인 자원봉사자들은 오픈 소스 솔루션을 혁신적으로 유지할 뿐만 아니라, 서로 다른 도구들을 흥미롭고 유용한 방식으로 결합하기 위해 노력합니다. 세계에서 가장 인기 있는 벡터 데이터베이스인 Milvus와 클라우드 네이티브 환경을 위해 설계된 공유 파일 시스템인 JuiceFS는 각각의 오픈 소스 커뮤니티에 의해 이러한 정신으로 결합되었습니다. 이 글에서는 JuiceFS가 무엇인지, JuiceFS 공유 파일 스토리지를 기반으로 Milvus 클러스터를 구축하는 방법, 그리고 사용자가 이 솔루션을 사용할 때 기대할 수 있는 성능에 대해 설명합니다.
JuiceFS란 무엇인가요?
JuiceFS는 Redis와 S3 위에 구축할 수 있는 고성능 오픈 소스 분산 POSIX 파일 시스템입니다. 클라우드 네이티브 환경을 위해 설계되었으며 모든 유형의 데이터를 관리, 분석, 보관 및 백업하는 것을 지원합니다. JuiceFS는 일반적으로 빅데이터 과제를 해결하고, 인공지능(AI) 애플리케이션을 구축하며, 로그를 수집하는 데 사용됩니다. 또한 이 시스템은 여러 클라이언트 간의 데이터 공유를 지원하며 Milvus에서 공유 스토리지로 직접 사용할 수 있습니다.
데이터와 그에 해당하는 메타데이터가 각각 객체 스토리지와 Redis에 영속화된 후, JuiceFS는 상태 비저장 미들웨어로 작동합니다. 데이터 공유는 표준 파일 시스템 인터페이스를 통해 서로 다른 애플리케이션이 원활하게 연동되도록 함으로써 실현됩니다. JuiceFS는 메타데이터 저장을 위해 오픈 소스 인메모리 데이터 저장소인 Redis에 의존합니다. Redis는 원자성을 보장하고 고성능 메타데이터 작업을 제공하기 때문에 사용됩니다. 모든 데이터는 JuiceFS 클라이언트를 통해 객체 스토리지에 저장됩니다. 아키텍처 다이어그램은 다음과 같습니다:
JuiceFS의 전체 아키텍처.
JuiceFS 기반 Milvus 클러스터 구축
JuiceFS로 구축된 Milvus 클러스터(아래 아키텍처 다이어그램 참조)는 클러스터 샤딩 미들웨어인 Mishards를 사용하여 업스트림 요청을 분할하고, 요청을 하위 모듈로 연쇄적으로 전달하는 방식으로 작동합니다. 데이터를 삽입할 때 Mishards는 업스트림 요청을 Milvus 쓰기 노드에 할당하며, 이 노드는 새로 삽입된 데이터를 JuiceFS에 저장합니다. 데이터를 읽을 때 Mishards는 Milvus 읽기 노드를 통해 JuiceFS에서 데이터를 메모리로 로드하여 처리한 다음, 하위 서비스의 결과를 수집하여 업스트림으로 반환합니다.
JuiceFS로 구축된 Milvus 클러스터의 아키텍처.
1단계: MySQL 서비스 시작
클러스터의 임의의 노드에서 MySQL 서비스를 시작합니다. 자세한 내용은 MySQL로 메타데이터 관리를 참조하세요.
2단계: JuiceFS 파일 시스템 생성
시연 목적으로, 사전 컴파일된 바이너리 JuiceFS 프로그램을 사용합니다. 시스템에 맞는 올바른 설치 패키지를 다운로드하고 자세한 설치 지침은 JuiceFS Quick Start Guide를 따르세요. 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 --storage wasb \
4 --bucket https://<container> \
5 ... \
6 localhost test #format
7 $ ./juicefs mount -d localhost ~/jfs #mount
8
Redis 서버가 로컬에서 실행 중이 아니라면 localhost를 다음 주소로 교체하세요:
redis://<user:password>@host:6379/1.
설치가 성공하면 JuiceFS는 공유 스토리지 페이지 /root/jfs를 반환합니다.
설치 성공.
3단계: Milvus 시작
클러스터의 모든 노드에는 Milvus가 설치되어 있어야 하며, 각 Milvus 노드는 읽기 또는 쓰기 권한으로 구성되어야 합니다. 하나의 Milvus 노드만 쓰기 노드로 구성할 수 있으며, 나머지는 읽기 노드여야 합니다. 먼저 Milvus 시스템 구성 파일 server_config.yaml에서 cluster 및 general 섹션의 매개변수를 설정합니다:
섹션 cluster
| 매개변수 | 설명 | 구성 |
|---|---|---|
enable | 클러스터 모드 활성화 여부 | true |
role | Milvus 배포 역할 | rw/ro |
섹션 general
# meta_uri is the URI for metadata storage, using MySQL (for Milvus Cluster). Format: mysql://<username:password>@host:port/database
general:
timezone: 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 is the shared storage path
5 -v /home/$USER/milvus/conf:/var/lib/milvus/conf \
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 시작 성공.
성능 벤치마크
공유 스토리지 솔루션은 일반적으로 네트워크 연결 스토리지(NAS) 시스템으로 구현됩니다. 일반적으로 사용되는 NAS 시스템 유형에는 Network File System(NFS)과 Server Message Block(SMB)이 포함됩니다. 퍼블릭 클라우드 플랫폼은 일반적으로 Amazon Elastic File System(EFS)과 같이 이러한 프로토콜과 호환되는 관리형 스토리지 서비스를 제공합니다.
기존 NAS 시스템과 달리 JuiceFS는 Filesystem in Userspace(FUSE)를 기반으로 구현되며, 모든 데이터 읽기 및 쓰기가 애플리케이션 측에서 직접 이루어져 액세스 지연 시간이 더욱 줄어듭니다. 또한 데이터 압축 및 캐싱과 같이 다른 NAS 시스템에서는 찾을 수 없는 JuiceFS 고유의 기능도 있습니다.
벤치마크 테스트에 따르면 JuiceFS는 EFS에 비해 큰 이점을 제공합니다. 메타데이터 벤치마크(그림 1)에서 JuiceFS는 초당 I/O 작업 수(IOPS)가 EFS보다 최대 10배 높습니다. 또한 I/O 처리량 벤치마크(그림 2)는 JuiceFS가 단일 작업 및 다중 작업 시나리오 모두에서 EFS보다 우수한 성능을 보인다는 것을 보여줍니다.
그림 1. 메타데이터 벤치마크.
그림 2. 순차 읽기/쓰기 벤치마크.
또한 벤치마크 테스트에 따르면 JuiceFS 기반 Milvus 클러스터의 첫 번째 쿼리 검색 시간, 즉 새로 삽입된 데이터를 디스크에서 메모리로 로드하는 시간은 평균 0.032초에 불과하여 데이터가 디스크에서 메모리로 거의 즉시 로드됨을 나타냅니다. 이 테스트에서 첫 번째 쿼리 검색 시간은 128차원 벡터 데이터 100만 행을 100k 단위의 배치로 1~8초 간격으로 삽입하여 측정했습니다.
JuiceFS는 안정적이고 신뢰할 수 있는 공유 파일 스토리지 시스템이며, JuiceFS 기반으로 구축된 Milvus 클러스터는 고성능과 유연한 스토리지 용량을 모두 제공합니다.
Milvus에 대해 더 알아보기
Milvus는 방대한 인공지능 및 벡터 유사도 검색 애플리케이션을 지원할 수 있는 강력한 도구입니다. 이 프로젝트에 대해 더 알아보려면 다음 리소스를 확인하세요:
- 블로그를 읽어보세요.
- Slack에서 오픈 소스 커뮤니티와 소통하세요.
- GitHub에서 세계에서 가장 인기 있는 벡터 데이터베이스를 사용하거나 기여하세요.
- 새로운 bootcamp를 통해 AI 애플리케이션을 빠르게 테스트하고 배포하세요.
Changjian Gao의 약력.
Jingjing Jia의 약력.
계속 읽기

Introducing Loon: A New Storage Engine for Vector Data That Never Stops Changing
Loon is a new storage engine for Milvus 3.0 and Zilliz Vector Lakebase, built to manage evolving vector datasets with ColumnGroups, row ID alignment, and Manifests.

What Is a Vector Lakebase?
A Vector Lakebase is a unified, lake-native data architecture for AI that combines vector-database-grade serving with open lake storage, reusable lake-level indexes, and a shared semantic layer.

VidTok: Rethinking Video Processing with Compact Tokenization
VidTok tokenizes videos to reduce redundancy while preserving spatial and temporal details for efficient processing.



