Amazon EKS에 오픈 소스 Milvus 벡터 데이터베이스를 배포하는 방법
이 게시물은 원래 AWS 웹사이트에 게시되었으며 허가를 받아 여기에 번역, 편집 및 재게시되었습니다.
벡터 임베딩 및 벡터 데이터베이스 개요
생성적 AI(GenAI), 특히 대규모 언어 모델(LLM)의 등장으로 벡터 데이터베이스에 대한 관심이 크게 증가하면서 벡터 데이터베이스는 GenAI 생태계 내에서 필수 구성 요소로 자리 잡았습니다. 그 결과, 벡터 데이터베이스는 점점 더 많은 사용 사례에서 채택되고 있습니다.
IDC 보고서에 따르면 2025년까지 비즈니스 데이터의 80% 이상이 텍스트, 이미지, 오디오, 비디오와 같은 형식으로 존재하는 비정형 데이터가 될 것으로 예측합니다. 이렇게 방대한 양의 비정형 데이터를 대규모로 이해하고, 처리하고, 저장하고, 쿼리하는 것은 상당한 도전 과제입니다. GenAI와 딥 러닝의 일반적인 관행은 비정형 데이터를 벡터 임베딩으로 변환하고, 저장하고, Milvus나 Zilliz Cloud (완전 관리형 Milvus)와 같은 벡터 데이터베이스에 색인하여 벡터 유사성 또는 의미적 유사성 검색을 수행하는 것입니다.
그렇다면 벡터 임베딩이란 정확히 무엇일까요? 간단히 말해, 부동소수점 숫자를 고차원 공간에 수치로 표현한 것입니다. 두 벡터 사이의 거리는 관련성을 나타내며, 가까울수록 서로 관련성이 높으며 그 반대의 경우도 마찬가지입니다. 즉, 유사한 벡터는 유사한 원본 데이터에 해당하며, 이는 기존의 키워드 또는 일치 검색과는 다릅니다.
벡터 유사도 검색을 수행하는 방법
그림 1: 벡터 유사도 검색을 수행하는 방법
벡터 임베딩을 저장, 색인, 검색하는 기능은 벡터 데이터베이스의 핵심 기능입니다. 현재 주류 벡터 데이터베이스는 크게 두 가지 범주로 나뉩니다. 첫 번째 범주는 KNN 플러그인이 포함된 Amazon OpenSearch Service와 pgvector 확장이 포함된 PostgreSQL용 Amazon RDS와 같은 기존 관계형 데이터베이스 제품을 확장한 것입니다. 두 번째 범주는 Milvus, Zilliz Cloud(완전 관리형 Milvus), Pinecone, Weaviate, Qdrant, Chroma 등 잘 알려진 사례를 포함한 전문 벡터 데이터베이스 제품으로 구성됩니다.
임베딩 기술과 벡터 데이터베이스는 이미지 유사도 검색, 동영상 중복 제거 및 분석, 자연어 처리, 추천 시스템, 타겟 광고, 개인화된 검색, 지능형 고객 서비스, 사기 탐지 등 다양한 AI 기반 사용 사례에 광범위하게 적용되고 있습니다.
Milvus는 수많은 벡터 데이터베이스 중에서 가장 인기 있는 오픈 소스 옵션 중 하나입니다. 이 포스팅에서는 Milvus를 소개하고 AWS EKS에 Milvus를 배포하는 방법을 살펴봅니다.
Milvus란?
Milvus는 매우 유연하고 안정적이며 매우 빠른 클라우드 네이티브 오픈 소스 벡터 데이터베이스입니다. 벡터 유사도 검색과 AI 애플리케이션을 지원하며 모든 조직에서 벡터 데이터베이스에 액세스할 수 있도록 노력하고 있습니다. Milvus는 심층 신경망과 기타 머신 러닝(ML) 모델에서 생성된 10억 개 이상의 벡터 임베딩을 저장, 색인, 관리할 수 있습니다.
Milvus는 2019년 10월에 오픈 소스 Apache 라이선스 2.0에 따라 출시되었습니다. 현재 LF AI & Data Foundation의 대학원 프로젝트입니다. 이 블로그를 작성할 당시 Milvus는 5,000만 건 이상의 Docker 풀 다운로드를 달성했으며, NVIDIA, AT&T, IBM, eBay, Shopee, Walmart 등 많은 고객들이 사용하고 있습니다.
Milvus 주요 기능
클라우드 네이티브 벡터 데이터베이스로서 Milvus는 다음과 같은 주요 기능을 자랑합니다:
수십억 개 규모의 벡터 데이터 세트에 대한 고성능 및 밀리초 검색.
다국어 지원 및 도구 체인.
수평적 확장성 및 장애 발생 시에도 높은 안정성.
스칼라 필터링과 벡터 유사도 검색을 결합하여하이브리드 검색을 실현합니다.
Milvus 아키텍처
Milvus는 데이터 흐름과 제어 흐름을 분리하는 원칙을 따릅니다. 시스템은 다이어그램에 표시된 것처럼 네 가지 수준으로 나뉩니다:
Milvus 아키텍처
그림 2 Milvus 아키텍처
액세스 레이어: 액세스 계층은 상태 비저장 프록시 그룹으로 구성되며 시스템의 프론트 레이어이자 사용자에 대한 엔드포인트 역할을 합니다.
코디네이터 서비스: 코디네이터 서비스는 작업자 노드에 작업을 할당합니다.
워커 노드: 워커 노드는 코디네이터 서비스의 지시를 따르고 사용자가 트리거한 DML/DDL 명령을 실행하는 덤 실행기입니다.
스토리지: 스토리지는 데이터 지속성을 담당합니다. 메타 스토리지, 로그 브로커, 오브젝트 스토리지로 구성됩니다.
Milvus 배포 옵션
Milvus는 세 가지 실행 모드를 지원합니다: Milvus Lite, 독립형, 분산형.
Milvus Lite는 로컬 애플리케이션으로 가져올 수 있는 Python 라이브러리입니다. Milvus의 경량 버전으로, Jupyter 노트북에서 빠르게 프로토타이핑하거나 리소스가 제한된 스마트 기기에서 실행하는 데 이상적입니다.
Milvus Standalone은단일 머신 서버 배포입니다. 프로덕션 워크로드가 있지만 Kubernetes를 사용하지 않으려는 경우, 충분한 메모리가 있는 단일 머신에서 Milvus Standalone을 실행하는 것이 좋은 옵션입니다.
Milvus Distributed는 Kubernetes 클러스터에 배포할 수 있습니다. 더 큰 데이터 세트, 더 높은 가용성 및 확장성을 지원하며 프로덕션 환경에 더 적합합니다.
Milvus는 처음부터 Kubernetes를 지원하도록 설계되었으며 AWS에 쉽게 배포할 수 있습니다. 관리형 Kubernetes로 Amazon Elastic Kubernetes Service(Amazon EKS)를, 오브젝트 스토리지로 Amazon S3를, 메시지 스토리지로 Amazon Managed Streaming for Apache Kafka(Amazon MSK)를, 로드 밸런서로 Amazon Elastic Load Balancing(Amazon ELB)을 사용하여 안정적이고 탄력적인 Milvus 데이터베이스 클러스터를 구축할 수 있습니다.
다음으로, EKS 및 기타 서비스를 사용하여 Milvus 클러스터를 배포하는 단계별 지침을 제공합니다.
AWS EKS에 Milvus 배포하기
전제 조건
AWS CLI를 사용하여 EKS 클러스터를 생성하고 Milvus 데이터베이스를 배포하겠습니다. 다음 전제 조건이 필요합니다:
적절한 권한으로 AWS CLI가 설치 및 구성된 PC/Mac 또는 Amazon EC2 인스턴스. 아마존 리눅스 2 또는 아마존 리눅스 2023을 사용하는 경우 AWS CLI 도구가 기본적으로 설치됩니다.
Helm, Kubectl, eksctl 등을 포함한EKS 도구가 설치되어 있어야 합니다.
Amazon S3 버킷.
Amazon MSK 인스턴스.
MSK 생성 시 고려 사항
- Milvus의 최신 안정 버전(v2.3.13)은 Kafka의
autoCreateTopics
기능에 의존합니다. 따라서 MSK를 생성할 때 사용자 정의 구성을 사용하고auto.create.topics.enable
속성을 기본값false
에서true
로 변경해야 합니다. 또한 MSK의 메시지 처리량을 높이려면message.max.bytes
및replica.fetch.max.bytes
의 값을 높이는 것이 좋습니다. 자세한 내용은 사용자 지정 MSK 구성을 참조하세요.
auto.create.topics.enable=true
message.max.bytes=10485880
replica.fetch.max.bytes=20971760
- Milvus는 MSK의 IAM 역할 기반 인증을 지원하지 않습니다. 따라서 MSK를 생성할 때 보안 구성에서
SASL/SCRAM authentication
옵션을 활성화하고, AWS Secrets Manager에서username
및password
을 구성하세요. 자세한 내용은 AWS Secrets Manager를 사용한 로그인 자격 증명 인증을 참조하세요.
그림 3 보안 설정에서 SASL 스크램 인증 활성화.png
그림 3: 보안 설정: SASL/SCRAM 인증 활성화하기
- EKS 클러스터의 보안 그룹 또는 IP 주소 범위에서 MSK 보안 그룹에 대한 액세스를 활성화해야 합니다.
EKS 클러스터 만들기
콘솔, CloudFormation, eksctl 등을 통해 EKS 클러스터를 만드는 방법에는 여러 가지가 있습니다. 이 글에서는 eksctl을 사용하여 EKS 클러스터를 생성하는 방법을 보여드리겠습니다.
eksctl
는 Amazon EKS에서 쿠버네티스 클러스터를 생성하고 관리하기 위한 간단한 명령줄 도구입니다. Amazon EKS용 노드로 새 클러스터를 생성하는 가장 빠르고 쉬운 방법을 제공합니다. 자세한 내용은 eksctl의 웹사이트를 참조하세요.
- 먼저 다음 코드 스니펫을 사용하여
eks_cluster.yaml
파일을 만듭니다.cluster-name
을 클러스터 이름으로 바꾸고,region-code
을 클러스터를 만들려는 AWS 리전으로 바꾸고,private-subnet-idx
을 프라이빗 서브넷으로 바꿉니다. 참고: 이 구성 파일은 프라이빗 서브넷을 지정하여 기존 VPC에 EKS 클러스터를 생성합니다. 새 VPC를 만들려면 VPC 및 서브넷 구성을 제거한 다음eksctl
에서 자동으로 새 VPC를 만듭니다.
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: <cluster-name>
region: <region-code>
version: "1.26"
iam:
withOIDC: true
serviceAccounts:
- metadata:
name: aws-load-balancer-controller
namespace: kube-system
wellKnownPolicies:
awsLoadBalancerController: true
- metadata:
name: milvus-s3-access-sa
# if no namespace is set, "default" will be used;
# the namespace will be created if it doesn't exist already
namespace: milvus
labels: {aws-usage: "milvus"}
attachPolicyARNs:
- "arn:aws:iam::aws:policy/AmazonS3FullAccess"
# Use existed VPC to create EKS.
# If you don't config vpc subnets, eksctl will automatically create a brand new VPC
vpc:
subnets:
private:
us-west-2a: { id: <private-subnet-id1> }
us-west-2b: { id: <private-subnet-id2> }
us-west-2c: { id: <private-subnet-id3> }
managedNodeGroups:
- name: ng-1-milvus
labels: { role: milvus }
instanceType: m6i.2xlarge
desiredCapacity: 3
privateNetworking: true
addons:
- name: vpc-cni # no version is specified so it deploys the default version
attachPolicyARNs:
- arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
- name: coredns
version: latest # auto discovers the latest available
- name: kube-proxy
version: latest
- name: aws-ebs-csi-driver
wellKnownPolicies: # add IAM and service account
ebsCSIController: true
- 그런 다음
eksctl
명령을 실행하여 EKS 클러스터를 만듭니다.
eksctl create cluster -f eks_cluster.yaml
이 명령은 다음 리소스를 생성합니다:
지정된 버전의 EKS 클러스터.
3개의 m6i.2xlarge EC2 인스턴스가 있는 관리형 노드 그룹.
나중에 AWS 로드 밸런서 컨트롤러를 설치할 때 사용할 IAM OIDC ID 공급자 및
aws-load-balancer-controller
라는 서비스 계정.네임스페이스
milvus
및 이 네임스페이스 내의 서비스 계정milvus-s3-access-sa
. 이 네임스페이스는 나중에 Milvus의 오브젝트 스토리지로 S3를 구성할 때 사용됩니다.참고: 간단하게 하기 위해 여기서는
milvus-s3-access-sa
에 전체 S3 액세스 권한이 부여됩니다. 프로덕션 배포에서는 최소 권한 원칙을 따르고 Milvus에 사용되는 특정 S3 버킷에 대한 액세스 권한만 부여하는 것이 좋습니다.vpc-cni
,coredns
,kube-proxy
는 EKS에 필요한 핵심 애드온입니다.aws-ebs-csi-driver
는 EKS 클러스터가 Amazon EBS 볼륨의 수명 주기를 관리할 수 있도록 하는 AWS EBS CSI 드라이버입니다.
이제 클러스터 생성이 완료될 때까지 기다리기만 하면 됩니다.
클러스터 생성이 완료될 때까지 기다립니다. 클러스터 생성 프로세스 중에 kubeconfig
파일이 자동으로 생성되거나 업데이트됩니다. 다음 명령을 실행하여 수동으로 업데이트할 수도 있습니다. region-code
을 클러스터가 생성되는 AWS 리전으로 바꾸고 cluster-name
을 클러스터 이름으로 바꾸세요.
aws eks update-kubeconfig --region <region-code> --name <cluster-name>
클러스터가 생성되면 실행하여 노드를 볼 수 있습니다:
kubectl get nodes -A -o wide
- 스토리지 유형이 GP3로 구성된
ebs-sc
StorageClass를 생성하고 이를 기본 StorageClass로 설정합니다. Milvus는 etcd를 메타 스토리지로 사용하며 이 StorageClass가 PVC를 생성하고 관리하는 데 필요합니다.
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ebs-sc
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
EOF
그런 다음 원래 gp2
StorageClass를 기본값이 아닌 것으로 설정합니다:
kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
- AWS 로드 밸런서 컨트롤러를 설치합니다. 이 컨트롤러는 나중에 Milvus 서비스 및 Attu 인그레스에 사용할 예정이므로 미리 설치해 두겠습니다.
- 먼저
eks-charts
리포지토리를 추가하고 업데이트합니다.
helm repo add eks https://aws.github.io/eks-charts
helm repo update
- 다음으로, AWS Load Balancer Controller를 설치합니다.
cluster-name
를 클러스터 이름으로 바꿉니다.aws-load-balancer-controller
이라는 서비스 계정은 이전 단계에서 EKS 클러스터를 생성할 때 이미 생성되었습니다.
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=<cluster-name> \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
- 컨트롤러가 성공적으로 설치되었는지 확인합니다.
kubectl get deployment -n kube-system aws-load-balancer-controller
- 출력은 다음과 같아야 합니다:
NAME READY UP-TO-DATE AVAILABLE AGE
aws-load-balancer-controller 2/2 2 2 12m
Milvus 클러스터 배포
Milvus는 Operator 및 Helm과 같은 여러 배포 방법을 지원합니다. 오퍼레이터가 더 간단하지만, 헬름이 더 직접적이고 유연합니다. 이 예제에서는 Helm을 사용하여 Milvus를 배포하겠습니다.
Helm으로 Milvus를 배포할 때 values.yaml
파일을 통해 구성을 사용자 정의할 수 있습니다. values.yaml을 클릭하여 모든 옵션을 확인합니다. 기본적으로 Milvus는 클러스터 내 미니오와 펄서를 각각 오브젝트 스토리지와 메시지 스토리지로 생성합니다. 프로덕션에 더 적합하도록 몇 가지 구성을 변경하겠습니다.
- 먼저 Milvus 헬름 리포지토리를 추가하고 업데이트합니다.
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
- 다음 코드 스니펫으로
milvus_cluster.yaml
파일을 생성합니다. 이 코드 스니펫은 Amazon S3를 오브젝트 스토리지로 구성하고 Amazon MSK를 메시지 큐로 구성하는 등 Milvus의 구성을 사용자 정의합니다. 자세한 설명과 구성 지침은 나중에 제공하겠습니다.
#####################################
# Section 1
#
# Configure S3 as the Object Storage
#####################################
# Service account
# - this service account are used by External S3 access
serviceAccount:
create: false
name: milvus-s3-access-sa
# Close in-cluster minio
minio:
enabled: false
# External S3
# - these configs are only used when `externalS3.enabled` is true
externalS3:
enabled: true
host: "s3.<region-code>.amazonaws.com"
port: "443"
useSSL: true
bucketName: "<bucket-name>"
rootPath: "<root-path>"
useIAM: true
cloudProvider: "aws"
iamEndpoint: ""
#####################################
# Section 2
#
# Configure MSK as the Message Storage
#####################################
# Close in-cluster pulsar
pulsar:
enabled: false
# External kafka
# - these configs are only used when `externalKafka.enabled` is true
externalKafka:
enabled: true
brokerList: "<broker-list>"
securityProtocol: SASL_SSL
sasl:
mechanisms: SCRAM-SHA-512
username: "<username>"
password: "<password>"
#####################################
# Section 3
#
# Expose the Milvus service to be accessed from outside the cluster (LoadBalancer service).
# or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
#####################################
service:
type: LoadBalancer
port: 19530
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: external #AWS Load Balancer Controller fulfills services that has this annotation
service.beta.kubernetes.io/aws-load-balancer-name : milvus-service #User defined name given to AWS Network Load Balancer
service.beta.kubernetes.io/aws-load-balancer-scheme: internal # internal or internet-facing, later allowing for public access via internet
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip #The Pod IPs should be used as the target IPs (rather than the node IPs)
#####################################
# Section 4
#
# Installing Attu the Milvus management GUI
#####################################
attu:
enabled: true
name: attu
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: alb # Annotation: set ALB ingress type
alb.ingress.kubernetes.io/scheme: internet-facing #Places the load balancer on public subnets
alb.ingress.kubernetes.io/target-type: ip #The Pod IPs should be used as the target IPs (rather than the node IPs)
alb.ingress.kubernetes.io/group.name: attu # Groups multiple Ingress resources
hosts:
-
#####################################
# Section 5
#
# HA deployment of Milvus Core Components
#####################################
rootCoordinator:
replicas: 2
activeStandby:
enabled: true # Enable active-standby when you set multiple replicas for root coordinator
resources:
limits:
cpu: 1
memory: 2Gi
indexCoordinator:
replicas: 2
activeStandby:
enabled: true # Enable active-standby when you set multiple replicas for index coordinator
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
queryCoordinator:
replicas: 2
activeStandby:
enabled: true # Enable active-standby when you set multiple replicas for query coordinator
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
dataCoordinator:
replicas: 2
activeStandby:
enabled: true # Enable active-standby when you set multiple replicas for data coordinator
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
proxy:
replicas: 2
resources:
limits:
cpu: 1
memory: 4Gi
#####################################
# Section 6
#
# Milvus Resource Allocation
#####################################
queryNode:
replicas: 1
resources:
limits:
cpu: 2
memory: 8Gi
dataNode:
replicas: 1
resources:
limits:
cpu: 1
memory: 4Gi
indexNode:
replicas: 1
resources:
limits:
cpu: 4
memory: 8Gi
이 코드는 6개의 섹션으로 구성되어 있습니다. 다음 안내에 따라 해당 구성을 변경하세요.
섹션 1: S3를 오브젝트 스토리지로 구성하기. 서비스 계정은 Milvus에 S3에 대한 액세스 권한을 부여합니다(이 경우 EKS 클러스터를 만들 때 생성한 milvus-s3-access-sa
). <region-code>
을 클러스터가 위치한 AWS 리전으로 바꿔야 합니다. <bucket-name>
을 S3 버킷의 이름으로 바꾸고 <root-path>
을 S3 버킷의 접두사로 바꿉니다(이 필드는 비워 둘 수 있음).
섹션 2: MSK를 메시지 저장소로 구성하기. <broker-list>
를 MSK의 SASL/SCRAM 인증 유형에 해당하는 엔드포인트 주소로 바꿉니다. <username>
및 <password>
을 MSK 계정 사용자 아이디 및 비밀번호로 바꿉니다. 아래 이미지와 같이 MSK 클라이언트 정보에서 <broker-list>
을 얻을 수 있습니다.
그림 4 Milvus의 메시지 저장소로 MSK 구성.png
그림 4: 밀버스의 메시지 저장소로 MSK 구성하기
섹션 3: Milvus 서비스를 노출하고 클러스터 외부에서 접근을 활성화합니다. Milvus 엔드포인트는 기본적으로 EKS 클러스터 내에서만 접근할 수 있는 ClusterIP 타입의 서비스를 사용했습니다. 필요한 경우, EKS 클러스터 외부에서도 접속할 수 있도록 LoadBalancer 타입으로 변경할 수 있습니다. LoadBalancer 유형 서비스는 Amazon NLB를 로드 밸런서로 사용합니다. 보안 모범 사례에 따르면 aws-load-balancer-scheme
은 기본적으로 내부 모드로 구성되며, 이는 Milvus에 대한 인트라넷 액세스만 허용됨을 의미합니다. NLB 구성 지침을 보려면 클릭하세요.
섹션 4: 오픈 소스 Milvus 관리 도구인 Attu 설치 및 구성하기. 직관적인 GUI를 통해 Milvus와 쉽게 상호 작용할 수 있습니다. Attu를 활성화하고, AWS ALB를 사용하여 인그레스를 구성하고, 인터넷을 통해 Attu에 액세스할 수 있도록 internet-facing
유형으로 설정합니다. ALB 구성 가이드를 보려면 이 문서를 클릭하세요.
섹션 5: Milvus 핵심 구성 요소의 HA 배포 활성화. Milvus에는 독립적이고 분리된 여러 구성 요소가 포함되어 있습니다. 예를 들어, 코디네이터 서비스는 루트, 쿼리, 데이터, 인덱스 구성 요소에 대한 조정을 처리하는 제어 계층 역할을 합니다. 액세스 계층의 프록시는 데이터베이스 액세스 엔드포인트 역할을 합니다. 이러한 구성 요소는 기본적으로 하나의 포드 레플리카로만 구성됩니다. 이러한 서비스 구성 요소의 여러 복제본을 배포하는 것은 특히 Milvus 가용성을 개선하기 위해 필요합니다.
참고: 루트, 쿼리, 데이터, 인덱스 코디네이터 구성 요소의 다중 복제본 배포에는 activeStandby
옵션이 활성화되어 있어야 합니다.
섹션 6: 워크로드의 요구 사항을 충족하도록 Milvus 구성 요소에 대한 리소스 할당 조정하기. Milvus 웹사이트는 데이터 볼륨, 벡터 차원, 인덱스 유형 등을 기반으로 구성 제안을 생성하는 크기 조정 도구도 제공합니다. 또한 클릭 한 번으로 헬름 구성 파일을 생성할 수도 있습니다. 다음 구성은 1백만 1024개의 차원 벡터와 HNSW 인덱스 유형에 대해 이 도구가 제안하는 구성입니다.
- 헬름을 사용하여 Milvus(네임스페이스
milvus
에 배포됨)를 생성합니다. 참고:<demo>
를 사용자 정의 이름으로 바꿀 수 있습니다.
helm install <demo> milvus/milvus -n milvus -f milvus_cluster.yaml
- 다음 명령을 실행하여 배포 상태를 확인합니다.
kubectl get deployment -n milvus
다음 출력은 Milvus 구성 요소가 모두 사용 가능하며 조정 구성 요소에 여러 개의 복제본이 활성화되어 있음을 보여줍니다.
NAME READY UP-TO-DATE AVAILABLE AGE
demo-milvus-attu 1/1 1 1 5m27s
demo-milvus-datacoord 2/2 2 2 5m27s
demo-milvus-datanode 1/1 1 1 5m27s
demo-milvus-indexcoord 2/2 2 2 5m27s
demo-milvus-indexnode 1/1 1 1 5m27s
demo-milvus-proxy 2/2 2 2 5m27s
demo-milvus-querycoord 2/2 2 2 5m27s
demo-milvus-querynode 1/1 1 1 5m27s
demo-milvus-rootcoord 2/2 2 2 5m27s
Milvus 액세스 및 관리
지금까지 Milvus 벡터 데이터베이스를 성공적으로 배포했습니다. 이제 엔드포인트를 통해 Milvus에 액세스할 수 있습니다. Milvus는 Kubernetes 서비스를 통해 엔드포인트를 노출합니다. Attu는 Kubernetes 인그레스를 통해 엔드포인트를 노출합니다.
Milvus 엔드포인트에 액세스하기
다음 명령을 실행하여 서비스 엔드포인트를 가져옵니다:
kubectl get svc -n milvus
여러 서비스를 볼 수 있습니다. Milvus는 포트 19530
와 포트 9091
의 두 포트를 지원합니다:
19530
포트는 gRPC 및 RESTful API용 포트입니다. 다른 Milvus SDK 또는 HTTP 클라이언트로 Milvus 서버에 연결할 때 기본 포트입니다.9091
포트는 Kubernetes 내에서 메트릭 수집, pprof 프로파일링 및 상태 프로브를 위한 관리 포트입니다.
demo-milvus
서비스는 클라이언트에서 연결을 설정하는 데 사용되는 데이터베이스 액세스 엔드포인트를 제공합니다. 이 서비스는 서비스 로드 밸런서로 NLB를 사용합니다. 서비스 엔드포인트는 EXTERNAL-IP
열에서 얻을 수 있습니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
demo-etcd ClusterIP 172.20.103.138 <none> 2379/TCP,2380/TCP 62m
demo-etcd-headless ClusterIP None <none> 2379/TCP,2380/TCP 62m
demo-milvus LoadBalancer 172.20.219.33 milvus-nlb-xxxx.elb.us-west-2.amazonaws.com 19530:31201/TCP,9091:31088/TCP 62m
demo-milvus-datacoord ClusterIP 172.20.214.106 <none> 13333/TCP,9091/TCP 62m
demo-milvus-datanode ClusterIP None <none> 9091/TCP 62m
demo-milvus-indexcoord ClusterIP 172.20.106.51 <none> 31000/TCP,9091/TCP 62m
demo-milvus-indexnode ClusterIP None <none> 9091/TCP 62m
demo-milvus-querycoord ClusterIP 172.20.136.213 <none> 19531/TCP,9091/TCP 62m
demo-milvus-querynode ClusterIP None <none> 9091/TCP 62m
demo-milvus-rootcoord ClusterIP 172.20.173.98 <none> 53100/TCP,9091/TCP 62m
Attu를 사용하여 Milvus 관리하기
앞서 설명한 대로 Milvus를 관리하기 위해 Attu를 설치했습니다. 다음 명령어를 실행하여 엔드포인트를 가져옵니다:
kubectl get ingress -n milvus
demo-milvus-attu
라는 인그레스를 볼 수 있으며, 여기서 ADDRESS
열은 액세스 URL입니다.
NAME CLASS HOSTS ADDRESS PORTS AGE
demo-milvus-attu <none> * k8s-attu-xxxx.us-west-2.elb.amazonaws.com 80 27s
브라우저에서 인그레스 주소를 열면 다음 페이지가 표시됩니다. 연결을 클릭하여 로그인합니다.
그림 5 Attu 계정에 로그인하기.png
그림 5: Attu 계정에 로그인하기
로그인한 후 Attu를 통해 Milvus 데이터베이스를 관리할 수 있습니다.
그림 6 Attu 인터페이스.png
그림 6: Attu 인터페이스
Milvus 벡터 데이터베이스 테스트
Milvus 예제 코드를 사용하여 Milvus 데이터베이스가 제대로 작동하는지 테스트해 보겠습니다. 먼저 다음 명령을 사용하여 hello_milvus.py
예제 코드를 다운로드합니다:
wget https://raw.githubusercontent.com/milvus-io/pymilvus/master/examples/hello_milvus.py
예제 코드의 호스트를 Milvus 서비스 엔드포인트로 수정합니다.
print(fmt.format("start connecting to Milvus"))
connections.connect("default", host="milvus-nlb-xxx.elb.us-west-2.amazonaws.com", port="19530")
코드를 실행합니다:
python3 hello_milvus.py
시스템이 다음과 같은 결과를 반환하면 Milvus가 정상적으로 실행되고 있음을 나타냅니다.
=== start connecting to Milvus ===
Does collection hello_milvus exist in Milvus: False
=== Create collection `hello_milvus` ===
=== Start inserting entities ===
Number of entities in Milvus: 3000
=== Start Creating index IVF_FLAT ===
=== Start loading ===
결론
이 게시물에서는 가장 널리 사용되는 오픈 소스 벡터 데이터베이스 중 하나인 Milvus를 소개하고, Amazon EKS, S3, MSK, ELB와 같은 관리형 서비스를 사용하여 AWS에 Milvus를 배포하여 탄력성과 안정성을 향상시키는 방법에 대한 가이드를 제공합니다.
다양한 GenAI 시스템, 특히 검색 증강 세대(RAG)의 핵심 구성 요소인 Milvus는 Amazon Sagemaker, PyTorch, HuggingFace, LlamaIndex, LangChain을 비롯한 다양한 주류 GenAI 모델 및 프레임워크를 지원하고 통합합니다. 지금 Milvus와 함께 GenAI 혁신 여정을 시작하세요!
참고 자료
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word