向量数据库milvus的搭建部署

官方文档地址

https://milvus.io/docs

注意:让所有服务加入同一个网路中

一、索引类型与数据规模匹配原则

索引类型 适用数据规模 核心优势 典型场景
IVF_FLAT 中小规模(百万级) 内存占用低,构建速度快 内存有限、需平衡速度与精度的场景
IVF_PQ 大规模(亿级) 内存占用仅为IVF_FLAT的1/4 内存受限的大规模数据集
HNSW 中大规模(百万~十亿级) 查询速度极快,支持高维数据 实时推荐、语义搜索等高并发场景
HNSW_SQ 大规模(十亿级) 内存占用比HNSW低50% 内存敏感的高维数据场景

二、milvus的搭建

1.docker-compose 文件

复制代码
version: '3.5' 

services:  
  
  etcd: 
    container_name: milvus-etcd  
    image: quay.io/coreos/etcd:v3.5.25  
    environment:  
      - ETCD_AUTO_COMPACTION_MODE=revision  # 自动压缩模式:按revision(版本号)压缩历史数据
      - ETCD_AUTO_COMPACTION_RETENTION=1000  # 保留最近1000个revision,超过则压缩
      - ETCD_QUOTA_BACKEND_BYTES=4294967296  # 后端存储配额:4GB(4294967296字节)
      - ETCD_SNAPSHOT_COUNT=50000  # 触发快照的键值对数量阈值:50000个操作后生成快照
    volumes: 
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd  
    command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd  
# 启动命令:设置客户端广告URL(容器内访问地址)、监听所有网卡、数据目录为/etcd
    healthcheck:  #
      test: ["CMD", "etcdctl", "endpoint", "health"]  # 检查命令:用etcdctl检测端点健康状态
      interval: 30s  # 检查间隔:30秒一次
      timeout: 20s  # 超时时间:20秒内无响应视为失败
      retries: 3  # 重试次数:失败后重试3次

  minio: 
    container_name: milvus-minio  
    image: minio/minio:RELEASE.2024-12-18T13-15-44Z 
    environment:  
      MINIO_ACCESS_KEY: minioadmin  # MinIO访问密钥(默认管理员账号,生产环境需修改)
      MINIO_SECRET_KEY: minioadmin  # MinIO秘密密钥(默认管理员密码,生产环境需修改)
    ports:  )
      - "9001:9001"  # 9001端口:MinIO控制台Web界面
      - "9000:9000"  # 9000端口:S3 API接口(Milvus通过此端口读写数据)
    volumes:  
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data  
    command: minio server /minio_data --console-address ":9001"  
    # 启动命令:指定数据目录/minio_data,控制台地址为容器内9001端口
    healthcheck:  # 健康检查配置
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]  
      interval: 30s  # 检查间隔30秒
      timeout: 20s  # 超时20秒
      retries: 3  # 重试3次

  standalone:  
    container_name: milvus-standalone  
    image: milvusdb/milvus:v2.6.7 
    command: ["milvus", "run", "standalone"]  # 启动命令:以单机模式运行Milvus
    security_opt:  # 安全选项
    - seccomp:unconfined  # 禁用seccomp安全限制(兼容旧内核,避免权限问题)
    environment:  
      ETCD_ENDPOINTS: etcd:2379  # 连接etcd服务(容器名etcd,端口2379)
      MINIO_ADDRESS: minio:9000  # 连接MinIO服务(容器名minio,端口9000)
      MQ_TYPE: woodpecker  # 消息队列类型(Milvus内置的woodpecker,用于组件间通信)
    volumes:  
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus  
    healthcheck: 
      test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]  
    # 检查命令:curl检测Milvus管理API健康状态(9091端口)
      interval: 30s  # 检查间隔30秒
      start_period: 90s  # 启动宽限期:容器启动后90秒内不检查(Milvus启动较慢)
      timeout: 20s  
      retries: 3  
    ports:  
      - "19530:19530"  # 19530端口:Milvus核心服务端口(客户端连接入口)
      - "9091:9091"    # 9091端口:Milvus管理API端口(健康检查、监控等)
    depends_on:  # 依赖关系:确保etcd和minio先启动
      - "etcd"  
      - "minio"  

networks:  # 网络配置
  default:  # 默认网络
    name: milvus  # 自定义网络名称为milvus(服务间通过此网络通信,容器名即主机名)


---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
version: '3.8'

services:
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.25
    restart: always
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
    volumes:
      - ./volumes/etcd:/etcd
    command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 20s
      retries: 3

  standalone:
    container_name: milvus-standalone
    image: docker.io/milvusdb/milvus:2.6-20251225-d6863c59
    command: ["milvus", "run", "standalone"]
    restart: always
    security_opt:
    - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MQ_TYPE: woodpecker
    volumes:
      - ./volumes/milvus:/var/lib/milvus
      - ./milvus.yaml:/milvus/configs/milvus.yaml
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
      interval: 30s
      start_period: 90s
      timeout: 20s
      retries: 3
    ports:
      - "19530:19530"
      - "9091:9091"
    depends_on:
      - "etcd"
networks:
  default: # 文件里面的名字
    external: true #使用已经创建的
    name: milvus # 网络名

2.配置文件相关配置

复制代码
minio:

  address: 192.168.88.14
  port: 19000 # Port of MinIO or S3 service.
  accessKeyID: minioadmin
  secretAccessKey: minioadmin123
  useSSL: false # Switch value to control if to access the MinIO or S3 service through SSL.
  ssl:
    tlsCACert: /path/to/public.crt # path to your CACert file
 
  bucketName: a-bucket  # 桶名
  rootPath: files       # 桶里面存储的文件名
  useIAM: false
  cloudProvider: aws
  gcpCredentialJSON: 
  iamEndpoint: 
  logLevel: fatal # Log level for aws sdk log. Supported level:  off, fatal, error, warn, info, debug, trace
  region:  # Specify minio storage system location region
  useVirtualHost: false # Whether use virtual host mode for bucket. WARNING: For Aliyun OSS and Tencent COS, this parameter is useless and is set to true by default
  requestTimeoutMs: 30000 # minio timeout for request time in milliseconds
  listObjectsMaxKeys: 50  #0单次默认1000请求
  connectTimeout: 30s
  ioTimeout: 120s

woodpecker:
  meta:
    type: etcd # The Type of the metadata provider. currently only support etcd.
    prefix: woodpecker # The Prefix of the metadata provider. default is woodpecker.
  client:
    segmentAppend:
      queueSize: 10000 # The size of the queue for pending messages to be sent of each log.
      maxRetries: 3 # Maximum number of retries for segment append operations.
    segmentRollingPolicy:
      maxSize: 256M # Maximum size of a segment.
      maxInterval: 10m # Maximum interval between two segments, default is 10 minutes.
      maxBlocks: 1000 # Maximum number of blocks in a segment
    auditor:
      maxInterval: 10s # Maximum interval between two auditing operations, default is 10 seconds.
  logstore:
    segmentSyncPolicy:
      maxInterval: 200ms # Maximum interval between two sync operations, default is 200 milliseconds.
      maxIntervalForLocalStorage: 10ms # Maximum interval between two sync operations local storage backend, default is 10 milliseconds.
      maxBytes: 256M # Maximum size of write buffer in bytes.
      maxEntries: 10000 # Maximum entries number of write buffer.
      maxFlushRetries: 5 # Maximum size of write buffer in bytes.
      retryInterval: 1000ms # Maximum interval between two retries. default is 1000 milliseconds.
      maxFlushSize: 2M # Maximum size of a fragment in bytes to flush.
      maxFlushThreads: 32 # Maximum number of threads to flush data
    segmentCompactionPolicy:
      maxSize: 2M # The maximum size of the merged files.
      maxParallelUploads: 2 # 最大上传线程数
      maxParallelReads: 4 # 最大读取线程数
    segmentReadPolicy:
      maxBatchSize: 8M #  减小读取批次大小
      maxFetchThreads: 2 # 线程并发数大小
    retentionPolicy:
      ttl: 72h # Time to live for truncated segments in seconds, default is 72h
  storage:
    type: minio # The Type of the storage provider. Valid values: [minio, local]
    rootPath: default

3.容器角色解析

1. etcd 容器
  • 功能定位:分布式协调与元数据存储

  • 核心作用

    • 存储 Milvus 的元数据(如集合信息、索引配置、分片状态)

    • 提供集群协调能力(节点发现、故障恢复)

    • 通过 Raft 协议保障数据一致性

2. minio 容器
  • 功能定位:对象存储引擎

  • 核心作用

    • 持久化存储原始向量数据索引文件

    • 提供 S3 兼容的 API 接口

    • 支持高吞吐的读写操作

3. milvus-standalone 容器
  • 功能定位:向量计算核心

  • 核心作用

    • 执行向量编码(Embedding 生成)

    • 构建和维护向量索引(如 IVF、HNSW)

    • 处理相似性搜索请求

  • 依赖关系

    • 通过 ETCD_ENDPOINTS读取元数据

    • 通过 MINIO_ADDRESS加载数据文件

4.数据文件说明

三者共同组成你在 Milvus 里的完整持久化数据。

三、attu可视化工具搭建

1.docker-compose文件

复制代码
version: '3.8'

services:
  attu:
    image: zilliz/attu:latest
    container_name: attu
    restart: always  # 容器异常退出时自动重启
    ports:
      - "8000:3000"  # 主机8000端口映射到容器3000端口
    environment:
      # 核心配置:替换为你的Milvus地址(本地Milvus填172.17.0.1:19530,远程填实际IP)
      MILVUS_URL: "192.168.88.14:19530"
      # 可选配置:若Milvus开启认证,添加以下两行
      # MILVUS_USERNAME: "root"
networks:
  default:
    external: true
    name: milvus
相关推荐
咕噜企业分发小米4 小时前
阿里云Milvus如何评估向量检索效果?
阿里云·云计算·milvus
我在北国不背锅1 天前
Milvus向量数据库索引说明
数据库·milvus
杨二K1 天前
Milvus性能权衡
数据库·人工智能·milvus
IT_Octopus6 天前
Milvus IllegalAccessError:com.google.protobuf.LazyStringArrayList.emptyList()
milvus
ShadowSmartMicros7 天前
java调用milvus数据库
java·数据库·milvus
csdn5659738509 天前
阿里云 Milvus 轻松实现文搜图&图搜图
阿里云·云计算·milvus
Zilliz Planet9 天前
短语检索不等于BM25+向量检索| Milvus Phrase Match实战
milvus
西柚小萌新9 天前
【大模型:RAG】--向量数据库Milvus详解1
milvus
明阳~10 天前
Milvus向量数据库:AI时代的向量搜索利器
agent·milvus·向量数据库·rag