Milvus向量数据库部署

一、什么是Milvus

Milvus 是一款开源的向量数据库,旨在帮助开发者轻松管理和检索大规模向量数据。它通过高效的索引技术,支持快速的相似度搜索,使得从海量数据中查找最接近的匹配变得简单而快捷。无论是构建推荐系统、进行图像识别还是分析自然语言,Milvus都能提供强大的支持。

这里我们将在macos环境下基于Docker安装Milvus的单机版本。

二、Milvus安装

官方下载文档

这里我们跳过Docker的安装,直接开始Milvus的安装

官方为我们提供很多中安装方式,这里我选择Docker Compose。下载的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
    command: etcd -advertise-client-urls=http://127.0.0.1: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"
    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.5
    command: ["milvus", "run", "standalone"]
    security_opt:
    - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    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"
      - "minio"

networks:
  default:
    name: milvus

这里出于演示,我取消了挂载。最终运行

复制代码
docker-compose up -d

运行成功后一共三个容器:milvus-etcd、milvus-minio、milvus-standalone

三、组件分析

1、etcd

etcd 是一个分布式的键值存储系统,主要用于配置共享和服务发现。在 Milvus 环境中,它主要用于存储元数据(如集合信息、索引配置等)。这使得 Milvus 能够有效地管理其内部状态,并支持集群模式下的协调工作。可以简单的理解为是字典的目录,可以可靠的访问机制。

2、minio

MinIO 是一款高性能的分布式对象存储系统,在 Milvus 架构中,MinIO 作为持久化存储层,用于保存原始向量数据、索引文件以及其他需要长期存储的信息。通俗来说就是数据持久化。并且本身就有可视化的管理页面,访问9001端口即可访问,账户密码都是minioadmin。登录后可以查看并管理存储的数据信息。

3、milvus

这就是实际执行向量相似度搜索的核心服务。Milvus 实例集成了所有必要的组件,允许用户在其上构建基于向量的智能应用。通过该实例,你可以进行向量数据插入、查询以及索引创建等多种操作。后面我们会通过python去连接这个向量数据库。

四、可视化

milvus不同于MySQL、Redis等可通过像Navicat等客户端连接进行可视化的操作。这里我们使用Attu对milvus进行可视化管理。具体介绍和安装可以看官网说明。

Attu官方

复制代码
version: '3.5'

services:
  attu:
    container_name: milvus-attu
    image: zilliz/attu:v2.4
    environment:
      MILVUS_URL: milvus:19530
    ports:
      - "7000:3000"
    depends_on:
      - "milvus"
    networks:
      - default
networks:
  default:
    name: milvus_network

使用Docker Compose运行成功后访问localhost:7000

复制代码
docker-compose up -d

这里没有设置密码,可以直接点击连接进入,实际场景下是需要设置密码的

这样我们就可以可视化的管理我们的向量数据库了。

五、Python操作

首先我们在attu中创建一个数据库来用于测试。

复制代码
from pymilvus import MilvusClient

client = MilvusClient(url="http://localhost:19530",
                      db_name="programming")

print(f"角色列表为:{client.list_roles()}")
print(f"用户列表为:{client.list_users()}")
client.create_user(user_name="test", password="123456")
client.create_role(role_name="test_role")
print(f"角色列表为:{client.list_roles()}")
print(f"用户列表为:{client.list_users()}")

可以看到正常连接到了向量数据库并且用户和角色都已经创建成功。

相关推荐
在未来等你19 分钟前
互联网大厂Java求职面试:基于RAG的智能问答系统设计与实现-2
java·智能问答·milvus·向量数据库·rag·spring ai
小文数模27 分钟前
2025数维杯数学建模A题完整参考论文(共36页)(含模型、可运行代码、数据)
python·数学建模·matlab
chat2tomorrow38 分钟前
数据中台建设系列(五):SQL2API驱动的数据共享与服务化实践
大数据·数据库·数据仓库·sql·数据治理·数据中台·sql2api
极小狐41 分钟前
如何使用极狐GitLab 软件包仓库功能托管 helm chart?
java·linux·服务器·数据库·c#·gitlab·maven
JavaAlpha1 小时前
高频面试题:设计秒杀系统,用Redis+Lua解决超卖
数据库·redis·lua
Ronin-Lotus1 小时前
图像处理篇---opencv实现坐姿检测
图像处理·人工智能·python·opencv
Dxy12393102161 小时前
Python+OpenCV打造AR/VR基础框架:从原理到实战的全链路解析
python·opencv
大G哥1 小时前
19_大模型微调和训练之-基于LLamaFactory+LoRA微调LLama3
人工智能·pytorch·python·深度学习·计算机视觉
向上的车轮2 小时前
什么是向量数据库?向量数据库和关系数据库有什么区别?
数据库·向量数据库
小江-2 小时前
手写数字识别项目
python