在大数据与人工智能快速发展的当下,向量数据库成为了处理非结构化数据以及加速相似性搜索的关键工具。Milvus 作为一款开源的向量数据库,凭借其高效的向量检索能力和对大规模数据的支持,被广泛应用于推荐系统、图像检索、自然语言处理等领域。而 Amazon EKS(Elastic Kubernetes Service)作为 亚马逊云科技 提供的托管式 Kubernetes 服务,能够简化容器化应用的部署与管理。本文将详细介绍如何基于 Amazon EKS 搭建开源向量数据库 Milvus。
一、前提准备
在本次实践过程中,我们首先需要准备环境。首先进入亚马逊云科技,注册账号:
1.1 安装 Amazon CLI ✅
Amazon Command Line Interface(Amazon CLI)是亚马逊云科技提供的一个开源工具,允许用户通过命令行或脚本管理 Amazon 服务。它提供了对众多 Amazon 服务的访问权限,能够执行诸如创建资源、管理配置等操作。安装 Amazon CLI 是与 Amazon 服务交互的基础,以下是安装步骤:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip awscliv2.zipsudo ./aws/installaws configure
执行上述命令后,系统会提示输入 亚马逊云科技访问密钥 ID 和秘密访问密钥等信息,这些信息用于认证用户的亚马逊云科技账户,从而允许 CLI 执行相关操作。
1.2 安装 EKS 相关工具 ✅
为了方便地创建和管理 EKS 集群,需要安装以下几个关键工具:
- eksctl:这是一个简单且功能强大的命令行工具,用于在亚马逊云科技上创建和管理 EKS Kubernetes 集群。它能够自动化许多繁琐的集群配置任务,简化集群的创建、更新和删除过程。安装命令如下:
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmpsudo mv /tmp/eksctl /usr/local/bin
- kubectl:Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互。通过 kubectl,用户可以部署应用程序、检查资源状态、管理集群等。安装方法为
curl -LO "https://dl.k8s.io/release/$(curl -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"chmod +x kubectlsudo mv kubectl /usr/local/bin/
- helm:作为 Kubernetes 的包管理工具,它能够简化应用程序的安装和升级过程。在后续安装 Milvus 时,就会用到 helm 来从指定的 Helm 仓库中部署 Milvus 应用。安装步骤如下
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
1.3 创建 Amazon S3 存储桶 ✅
Amazon S3(Simple Storage Service)是亚马逊云科技提供的一种对象存储服务,具有高持久性、高可用性和可扩展性。在搭建 Milvus 时,可将 S3 作为对象存储,用于存储 Milvus 的数据。创建 S3 存储桶的命令如下:
aws s3api create-bucket --bucket milvus-s3-bucket-eks --region us-west-2
⚠️ 请替换
milvus-s3-bucket-eks
为你唯一命名的桶名
1.4 创建 Amazon MSK 实例 ✅
Amazon MSK(Managed Streaming for Apache Kafka)是一项完全托管的服务,兼容 Apache Kafka,用于构建实时流数据管道。在 Milvus 中,可将 MSK 作为消息存储,用于处理数据的异步传输等场景。建议使用亚马逊云科技控制台创建一个 MSK 实例,设置默认配置即可。创建完成后,需要记录下以下关键信息:
- Bootstrap servers :这是客户端连接到 MSK 集群所需的引导服务器地址,后续在配置 Milvus 时会用到。安全组 ID :用于控制对 MSK 实例的网络访问权限。子网 ID :标识了 MSK 实例所在的网络子网。
二、创建 EKS 集群
有了上述准备工作后,接下来就可以创建 EKS 集群了。以下是创建命令:
eksctl create cluster \--name milvus-cluster \--version 1.28 \--region us-west-2 \--nodegroup-name milvus-nodes \--node-type t3.large \--nodes 3 \--nodes-min 1 \--nodes-max 4 \--managed
这条命令指定了集群的名称为 milvus-cluster,使用 Kubernetes 版本 1.28,在 us-west-2 区域创建。节点组名为 milvus-nodes,节点类型为 t3.large,初始创建 3 个节点,节点的最小数量为 1,最大数量为 4,并且使用托管节点组,这样可以简化节点的管理和扩展。
二、部署 Milvus 数据库
2.1 添加 Milvus Helm 仓库
为了方便安装和管理 Milvus,需要先将其 Helm 仓库添加到本地。执行以下命令
helm repo add milvus https://zilliztech.github.io/milvus-helm/helm repo update
这样就可以从该仓库中获取 Milvus 的 Helm Chart,即 Milvus 的安装包和配置模板。
2.2 配置 S3 作为 Object Storage
在 Milvus 的配置文件 values.yaml 中,增加以下配置以使用之前创建的 S3 存储桶作为对象存储:
external:etcd:enabled: falseminio:enabled: falsecomponents:standalone:enabled: falsecluster:enabled: trues3:enabled: truebucketName: milvus-s3-bucket-eksregion: us-west-2accessKey: <your-aws-access-key>secretKey: <your-aws-secret-key>
2.3 配置 MSK 作为 Message Storage
kafka:brokerList: "<your-msk-bootstrap-server>"enable: trueexternal: truetype: kafka
将
<your-aws-access-key>
和<your-aws-secret-key>
替换为实际的亚马逊云科技访问密钥和秘密密钥,以便 Milvus 能够访问 S3 存储桶。
2.4 部署 Milvus
同时,在 values.yaml 中添加以下配置,将之前创建的 MSK 实例作为消息存储:
helm install milvus milvus/milvus -f values.yaml --namespace milvus --create-namespace
将
<your-msk-bootstrap-server>
替换为 MSK 实例的实际 bootstrap 地址。
这条命令会根据指定的 Helm Chart 和配置文件,在 Kubernetes 的 milvus 命名空间(如果不存在则创建)中安装 Milvus 数据库。
三、优化 Milvus 配置
3.1 配置 Milvus 服务可供 EKS 集群外访问
默认情况下,Milvus 的服务只能在 EKS 集群内部访问。为了从集群外部访问 Milvus,需要将 Milvus 的 Service 修改为 LoadBalancer 类型。执行以下命令::
kubectl edit svc milvus-cluster-standalone -n milvus
将 type: ClusterIP
改为:
type: LoadBalancer
3.2 安装可视化管理工具 Attu
kubectl apply -f https://raw.githubusercontent.com/zilliztech/attu/main/deploy/k8s/attu-deployment.yaml
安装完成后,可以通过绑定域名或使用负载均衡器的外网地址访问 Attu 的 Web 界面,地址为 http://:3000,从而实现对 Milvus 的直观管理和操作。
亚马逊云科技提供丰富的免费套餐,包括750小时的Amazon EC2计算资源、5GB的Amazon S3存储空间以及750小时的Amazon RDS数据库服务,让您轻松体验云端技术。
通过以上步骤,我们成功地在 Amazon EKS 上搭建了开源向量数据库 Milvus,并进行了相关的优化配置。这种结合了云服务和开源数据库的方案,充分利用了亚马逊云科技的基础设施优势和 Milvus 的高性能向量检索能力,为处理大规模向量数据提供了强大的支持。在实际应用中,可以根据业务需求进一步调整和优化 Milvus 的配置,例如调整资源分配、优化数据模型等,以实现最佳性能。
同时,随着技术的不断发展,Milvus 和 Amazon EKS 也会持续更新和改进,为用户提供额外的特性和功能,让我们共同期待它们在未来的发展中带来更多的惊喜。