Docker+K8s 部署 Milvus 集群:高可用向量数据库的生产环境配置

一、环境准备

1.1 基础环境要求

  • Kubernetes 集群:v1.20+,推荐 v1.24+
  • Docker 或 Containerd:确保容器运行时正常
  • Helm:v3.5.0+,用于 Milvus 部署
  • 存储系统
    • 元数据:etcd 集群(v3.5.0+,3 节点以上)
    • 对象存储:MinIO 集群(4 节点以上)或云存储(S3、GCS 等)
    • 消息队列:Pulsar 集群(v2.8.0+,3 节点以上)

1.2 资源规划

根据业务规模,建议生产环境资源配置:

组件CPU内存存储副本数
Milvus Proxy4C+8G+2+
Milvus QueryNode8C+16G+3+
Milvus DataNode4C+8G+3+
Milvus IndexNode8C+16G+2+
Milvus RootCoord2C+4G+1(主)+1(备)
Milvus QueryCoord2C+4G+1(主)+1(备)
Milvus DataCoord2C+4G+1(主)+1(备)
Milvus IndexCoord2C+4G+1(主)+1(备)

二、Milvus 架构简介

Milvus 2.x 采用微服务架构,主要组件包括:

  • Proxy:接收客户端请求,负载均衡
  • Coordinator 组件:RootCoord(元数据管理)、QueryCoord(查询节点管理)、DataCoord(数据节点管理)、IndexCoord(索引节点管理)
  • Worker 组件:QueryNode(向量查询)、DataNode(数据持久化)、IndexNode(索引构建)
  • 依赖组件:etcd(元数据存储)、MinIO/S3(对象存储)、Pulsar/Kafka(消息队列)

三、部署前配置

3.1 配置存储系统

3.1.1 部署 etcd 集群
# 使用 Helm 部署 etcd 集群
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install etcd bitnami/etcd \
  --set replicaCount=3 \
  --set auth.rbac.create=false \
  --set persistence.size=50Gi \
  --namespace milvus
3.1.2 部署 MinIO 集群
helm install minio bitnami/minio \
  --set mode=distributed \
  --set replicas=4 \
  --set persistence.size=100Gi \
  --set auth.rootUser=minioadmin \
  --set auth.rootPassword=minioadmin \
  --namespace milvus
3.1.3 部署 Pulsar 集群
helm repo add apache https://pulsar.apache.org/charts
helm install pulsar apache/pulsar \
  --set components={broker,bookkeeper,zookeeper} \
  --set zookeeper.replicaCount=3 \
  --set bookkeeper.replicaCount=3 \
  --set broker.replicaCount=3 \
  --namespace milvus

3.2 创建命名空间

kubectl create namespace milvus

四、使用 Helm 部署 Milvus 集群

4.1 添加 Milvus Helm 仓库

helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update

4.2 自定义配置文件

创建 values.yaml 文件,配置高可用参数:

# values.yaml
cluster:
  enabled: true

image:
  tag: v2.4.5

minio:
  enabled: false  # 使用外部 MinIO
externalMinio:
  host: minio.milvus.svc.cluster.local
  port: 9000
  accessKey: minioadmin
  secretKey: minioadmin
  bucketName: milvus-bucket

etcd:
  enabled: false  # 使用外部 etcd
externalEtcd:
  endpoints:
    - etcd.milvus.svc.cluster.local:2379

pulsar:
  enabled: false  # 使用外部 Pulsar
externalPulsar:
  broker: pulsar-broker.milvus.svc.cluster.local:6650
  webServiceURL: http://pulsar-broker.milvus.svc.cluster.local:8080

# 高可用配置
proxy:
  replicas: 2
  resources:
    requests:
      cpu: 4
      memory: 8Gi
    limits:
      cpu: 8
      memory: 16Gi

queryNode:
  replicas: 3
  resources:
    requests:
      cpu: 8
      memory: 16Gi
    limits:
      cpu: 16
      memory: 32Gi

dataNode:
  replicas: 3
  resources:
    requests:
      cpu: 4
      memory: 8Gi
    limits:
      cpu: 8
      memory: 16Gi

indexNode:
  replicas: 2
  resources:
    requests:
      cpu: 8
      memory: 16Gi
    limits:
      cpu: 16
      memory: 32Gi

# Coordinator 组件高可用
rootCoord:
  replicas: 2
queryCoord:
  replicas: 2
dataCoord:
  replicas: 2
indexCoord:
  replicas: 2

# 持久化配置
persistence:
  enabled: true
  storageClass: "your-storage-class"  # 替换为实际存储类

# 服务配置
service:
  type: LoadBalancer  # 生产环境推荐使用 LoadBalancer 或 NodePort
  port: 19530

4.3 部署 Milvus 集群

helm install milvus milvus/milvus \
  -f values.yaml \
  --namespace milvus

4.4 验证部署

# 检查 Pod 状态
kubectl get pods -n milvus

# 检查服务状态
kubectl get svc -n milvus

# 验证 Milvus 服务
curl -s http://<milvus-service-ip>:19530/api/v1/health | jq

五、高可用配置优化

5.1 副本策略

  • Proxy 副本:建议 2-3 个,通过 LoadBalancer 负载均衡
  • Worker 节点副本:根据数据量和查询负载调整,建议 3+
  • Coordinator 副本:采用主备模式,确保元数据服务高可用

5.2 数据备份策略

  • etcd 备份:定期使用 etcdctl snapshot save 备份元数据
  • 对象存储备份:配置 MinIO/S3 跨区域复制或定期快照
  • Pulsar 备份:启用 Pulsar 持久化存储和定期备份

5.3 故障转移配置

  • 启用 K8s 节点亲和性,避免单点故障
  • 配置 Pod 中断预算(PDB),确保服务可用性
  • 监控关键指标,设置自动扩缩容

六、性能优化

6.1 资源调优

  • 根据实际负载调整 CPU 和内存限制
  • 为 IndexNode 分配更多资源,加速索引构建
  • 为 QueryNode 配置足够内存,减少查询延迟

6.2 索引优化

  • 选择合适的索引类型(如 IVF_FLAT、IVF_SQ8、HNSW)
  • 调整索引参数(nlist、nprobe 等)
  • 启用增量索引构建,减少索引维护开销

6.3 查询优化

  • 使用连接池管理客户端连接
  • 批量查询替代单条查询
  • 合理设置查询参数(topk、nprobe 等)

七、监控与日志

7.1 集成 Prometheus 和 Grafana

# 启用 Milvus 监控
helm upgrade milvus milvus/milvus \
  -f values.yaml \
  --set metrics.enabled=true \
  --namespace milvus

# 导入 Milvus Grafana 仪表盘
# 仪表盘 ID:15048(官方提供)

7.2 日志收集

  • 配置 Fluentd/Filebeat 收集 Milvus 日志
  • 集成 ELK Stack 或 Loki 进行日志分析
  • 设置日志保留策略,避免存储溢出

八、维护与升级

8.1 日常维护

  • 定期检查 Pod 状态和资源使用情况
  • 监控查询延迟和错误率
  • 清理过期数据和索引

8.2 版本升级

# 备份数据
# 升级 Helm Chart
helm repo update
helm upgrade milvus milvus/milvus \
  -f values.yaml \
  --namespace milvus

8.3 扩缩容

# 水平扩缩容 QueryNode
kubectl scale statefulset milvus-querynode -n milvus --replicas=5

# 垂直扩缩容,修改 values.yaml 后执行
helm upgrade milvus milvus/milvus \
  -f values.yaml \
  --namespace milvus

九、安全配置

9.1 认证授权

  • 启用 Milvus 内置认证(username/password)
  • 配置 RBAC,限制用户权限
  • 集成外部认证服务(如 LDAP)

9.2 网络安全

  • 使用 K8s NetworkPolicy 限制 Pod 间通信
  • 配置 TLS 加密,保护数据传输
  • 限制 Milvus 服务访问范围

十、常见问题排查

  1. Pod 启动失败

    kubectl logs <pod-name> -n milvus
    kubectl describe pod <pod-name> -n milvus
    
  2. 连接超时

    • 检查服务暴露方式
    • 验证网络策略
    • 检查防火墙规则
  3. 查询性能差

    • 检查资源使用情况
    • 优化索引参数
    • 调整查询参数

十一、总结

通过 Docker 和 Kubernetes 部署高可用 Milvus 集群,需要关注以下关键要点:

  • 合理规划资源,确保各组件性能
  • 配置可靠的存储系统,保障数据安全
  • 启用监控和日志,便于问题排查
  • 实施备份策略,防止数据丢失
  • 定期维护和升级,确保系统稳定性

生产环境部署需根据实际业务需求调整配置,建议先在测试环境验证,再逐步迁移到生产环境。

以上配置方案基于 Milvus v2.4.5,实际部署时请参考官方最新文档。

<think>嗯,用户想了解如何在本地部署Milvus,而且不用DockerKubernetes。我需要回忆一下Milvus的安装步骤,确保不遗漏任何细节。首先,用户可能是有一定的技术背景,但不太熟悉容器技术,或者他们希望直接在系统上安装,避免容器带来的开销。 首先,我应该检查系统要求。Milvus需要什么操作系统?通常支持Linux,可能还有MacOS。需要确认CPU是否支持AVX指令集,因为Milvus依赖这个。然后是依赖项,比如GCC、CMake之类的编译工具。用户可能需要安装这些依赖项。 接下来是安装方式。不用Docker的话,有两种方法:从源码编译或者下载预编译的二进制包。编译源码可能更灵活,但步骤更多,容易出错。而预编译的二进制相对简单,推荐给大多数用户。我需要分别介绍这两种方法,但可能重点放在二进制包上,因为更快捷。 然后,安装后的配置。Milvus的配置文件需要调整,比如设置存储路径、日志路径,以及集群模式还是单机模式。用户可能用的是单机版,但需要说明如何配置。还有元数据存储,默认是SQLite,但生产环境可能用MySQL或PostgreSQL,需要提示用户这一点。 启动服务部分,要说明如何启动Milvus和它的依赖,比如etcd和minio。如果是单机模式,可能这些组件已经集成,或者需要单独启动。可能需要分开启动各个组件,或者用脚本管理。 测试连接的部分,用户可能想确认安装是否成功,可以通过Python SDK连接,创建集合、插入向量、搜索等操作示例。需要确保步骤清晰,代码正确。 常见问题处理方面,比如端口冲突,依赖项缺失,或者权限问题。用户可能在安装过程中遇到这些问题,需要给出解决建议,比如检查端口是否被占用,安装必要的依赖库。 最后,提醒用户生产环境和本地开发配置的不同,比如更换元数据库,调整性能参数。可能用户是在本地测试,但未来有上生产的需求,所以提前说明这些注意事项会有帮助。 现在需要把这些步骤整理成逻辑顺序,先系统要求,再安装方法,配置,启动,测试,问题处理,注意事项。确保语言简洁,步骤明确,用户能一步步跟着操作。可能还需要注意命令的正确性,比如下载链接是否最新,是否需要解压到特定目录,设置环境变量等。 另外,用户可能对Milvus的组件不熟悉,比如etcd和minio的作用,是否需要单独安装。如果是单机部署,可能Milvus已经内置了这些依赖,或者需要手动启动。需要确认Milvus版本,比如2.x版本和之前的版本安装步骤不同,这里假设是最新的2.x版本,所以需要分开启动etcd、minio和Milvus。 最后,确保所有步骤在中文环境下可行,比如路径是否有中文问题,是否需要使用sudo权限等。可能还需要提醒用户根据实际路径修改命令,避免直接复制粘贴导致错误。</think>以下是在 Linux 系统上本地部署 Milvus(不使用 Docker/Kubernetes)的详细步骤: --- ### **一、系统要求** - **操作系统**: Linux (推荐 Ubuntu 18.04+ / CentOS 7+) 或 macOS - **CPU**: 支持 AVX 指令集(通过 `cat /proc/cpuinfo | grep avx` 验证) - **依赖项**: - GCC 7+ - CMake 3.18+ - Python 3.6+(如需使用 Python SDK) --- ### **二、安装方式(二选一)** #### **方法 1:下载预编译二进制包** 1. **下载 Milvus 发行版** 访问 [Milvus GitHub Releases](https://github.com/milvus-io/milvus/releases),下载对应系统的二进制包(如 `milvus-2.x.x-linux-amd64.tar.gz`)。 2. **解压文件** ```bash tar -zxvf milvus-2.x.x-linux-amd64.tar.gz cd milvus-2.x.x ``` --- #### **方法 2:从源码编译** 1. **克隆仓库** ```bash git clone https://github.com/milvus-io/milvus.git cd milvus git checkout v2.x.x # 切换到指定版本 ``` 2. **编译源码** ```bash make milvus # 仅编译核心服务 # 或编译全部组件(包括工具) make all ``` --- ### **三、配置 Milvus** 1. **修改配置文件** 进入解压或编译后的目录,编辑 `conf` 文件夹下的配置文件: - `milvus.yaml`: 主配置文件(设置端口、存储路径等) - `etcd.yaml`: etcd 配置(元数据存储) - `minio.yaml`: MinIO 配置(对象存储) **关键配置项示例**: ```yaml # milvus.yaml common: storagePath: /path/to/milvus/data # 数据存储路径 meta: store: etcd # 元数据存储方式(默认 etcd) ``` 2. **创建必要目录** 确保配置文件中指定的目录(如 `storagePath`)已存在且有写入权限: ```bash mkdir -p /path/to/milvus/data ``` --- ### **四、启动依赖服务** Milvus 依赖以下组件: - **etcd**(元数据存储) - **MinIO** 或 **S3**(对象存储) 1. **手动启动依赖**(以单机模式为例) ```bash # 启动 etcd ./bin/etcd --data-dir=/path/to/etcd/data # 启动 MinIO ./bin/minio server /path/to/minio/data --console-address :9090 ``` --- ### **五、启动 Milvus** ```bash # 进入 Milvus 目录 ./bin/milvus run # 默认使用 standalone 模式(集成依赖) # 或指定配置文件启动 ./bin/milvus run -c ./conf/milvus.yaml ``` --- ### **六、验证安装** 1. **检查服务状态** 访问以下地址确认服务运行: - Milvus: `http://localhost:19530`(默认端口) - etcd: `http://localhost:2379` - MinIO: `http://localhost:9090` 2. **使用 Python SDK 测试** ```python from pymilvus import connections, Collection connections.connect("default", host="localhost", port="19530") # 创建测试集合 schema = ... # 定义 Schema collection = Collection("test_collection", schema) print("Collection created:", collection.name) ``` --- ### **七、常见问题处理** - **端口冲突**: 修改配置文件中 `common.port` 或依赖服务的端口。 - **依赖缺失**: 安装缺失库(如 `libssl-dev`、`zlib`)。 - **权限问题**: 使用 `chmod` 赋予执行权限,或通过 `sudo` 运行。 --- ### **八、生产环境建议** - **元数据存储**: 替换 SQLite 为 MySQL/PostgreSQL。 - **分布式部署**: 配置多节点 etcd 和 MinIO 集群。 - **性能调优**: 调整 `knowhere` 索引参数和缓存配置。 如需更详细的配置说明,可参考 [Milvus 官方文档](https://milvus.io/docs)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

canjun_wen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值