介绍Milvus向量数据库的安装过程,包括创建工作目录、下载docker-compose.yml文件、配置attu可视化面板和修改安全设置。

环境准备

  • docker版本:28.0.4
  • docker compose版本:v2.34.0

Milvus向量数据库简介

Milvus是一款开源的向量数据库,它专为AI应用设计,用于管理和检索海量的特征向量。Milvus的优势主要包括:

  • 高效的向量检索性能:Milvus采用了多种先进的索引算法,如IVF, HNSW, ANNOY等,能够在大规模数据集上实现高效的近似最近邻搜索。
  • 易于扩展和维护:Milvus支持水平和垂直扩展,能够适应不断增长的数据规模和查询需求。它的分布式架构使得数据存储和计算能力可以灵活扩展。
  • 多种数据持久化选项:Milvus支持SSD, HDD等多种存储介质,并且可以与多种持久化存储解决方案集成,如MinIO, S3等。
  • 丰富的数据接口:Milvus提供了Python, Java, RESTful等多种语言的SDK,方便开发者在不同的应用场景中使用。
  • 强大的可扩展性和兼容性:支持各种大小和类型的向量数据,可以与现有的数据处理和机器学习工作流程无缝集成。
  • 容器化和云原生支持:支持Docker和Kubernetes,方便在云环境中部署和管理。
  • 开源社区支持:作为一个开源项目,Milvus拥有活跃的社区,不断有新的功能和改进被加入。

Milvus适用于各种需要高效向量检索的应用场景,如推荐系统、图像检索、自然语言处理等。由于其高效、易用和可扩展的特性,Milvus在AI应用开发中越来越受欢迎。

安装Milvus

1. 创建工作目录(自定义)

# 切换到root目录
cd /root
# 新建一个名为milvus的目录用于存放数据 目录名称可以自定义
mkdir milvus
# 进入到新建的目录
cd milvus

2. 下载并编辑docker-compose.yml

Github查看最新版本,选择带有GPU的yml配置文件下载(nvidia显卡)。也可以借鉴官网指南


3. 下载milvus.yml文件

该文件是milvus的配置文件,容器中内置,但如果要修改配置,需要单独下载,这里为了做访问控制,就需要修改配置。

# 注意改成自己对应的milvus版本号
wget https://raw.githubusercontent.com/milvus-io/milvus/v2.5.7/configs/milvus.yaml

下载好后,确保该文件位于milvus工作目录下,然后编辑该文件,找到其中的common > security > authorizationEnabled并将其设置为true

3. 下载milvus-standalone-docker-compose-gpu.yml文件,在其中添加attu可视化面板的容器。并修改docker-compose.yml做资源映射

version: '3.5'
services:
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.18
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=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
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    ports:
      - "9001:9001"
      - "9000:9000"
    volumes:
      -{DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
    command: minio server /minio_data --console-address ":9001"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.5.7-gpu
    command: ["milvus", "run", "standalone"]
    security_opt:
    - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    volumes:
      - {DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
      # 新增下面这一行来实现配置文件的映射
      -{DOCKER_VOLUME_DIRECTORY:-.}/milvus.yaml:/milvus/configs/milvus.yaml
    ports:
      - "19530:19530"
      - "9091:9091"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: ["gpu"]
              device_ids: ["0"]
    depends_on:
      - "etcd"
      - "minio"

# 在原docker-compose文件的这个位置添加下面这个attu容器,注意版本号和行前空格。
  attu:
    container_name: attu
    image: zilliz/attu:v2.5.6
    environment:
      MILVUS_URL: milvus-standalone:19530
    ports:
      - "8000:3000"  # 外部端口8000可以自定义
    depends_on:
      - "standalone"

networks:
  default:
    name: milvus

启动Mlivus

# 安装目录下运行命令
# 拉取镜像
docker-compose pull
# 启动容器
docker-compose up -d
# 查看启动状态(健康状态)
docker-compose ps -a
# 停止容器
docker-compose down

放开端口:连接数据库需要放开19530端口,这是milvus的默认端口,可在docker-compose.yml中修改。访问可视化面板放开8000端口(刚才自己设置的)做反向代理的话可以不用放开此端口。

验证效果

访问可视化面板并修改密码:http://ip:8000

默认账号:root
默认密码:Milvus