云服务器部署 Milvus 向量数据库完整指南:从零到成功运行
本文详细介绍了在云服务器上部署Milvus v2.6.2向量数据库的全过程。作者首先尝试Docker Compose部署但遇到etcd连接问题,后改用官方standalone_embed.sh脚本成功部署。文章包含环境准备、部署步骤、问题排查(如镜像下载慢、网络不稳定等)及解决方案,并提供了端口配置、Python客户端连接、数据操作等使用示例。对比了Docker Compose和官方脚本的优缺点,
云服务器部署 Milvus 向量数据库完整指南:从零到成功运行
前言
Milvus 是一个开源的向量数据库,专为 AI 应用和机器学习工作负载而设计。它能够高效地存储、索引和搜索大规模向量数据,是构建推荐系统、图像搜索、自然语言处理等 AI 应用的重要基础设施。
本文将详细介绍如何在云服务器上部署 Milvus v2.6.2,包括完整的部署过程、遇到的问题及解决方案,以及部署后的验证和使用方法。
环境准备
服务器配置要求
-
操作系统: Linux (本文使用 CentOS/Ubuntu)
-
内存: 建议至少 4GB (我的环境是16GB阿里云云服务器)
-
存储: 建议至少 20GB 可用空间
-
网络: 稳定的互联网连接
-
Docker: 已安装 Docker 和 Docker Compose
检查服务器资源
# 检查内存使用情况 free -h # 检查磁盘空间 df -h # 检查 Docker 状态 sudo systemctl status docker
部署尝试历程
第一次尝试:Docker Compose 部署(失败)
最初,我尝试使用 Docker Compose 方式部署 Milvus,这是官方推荐的另一种部署方式。
1. 下载 docker-compose.yml
# 下载 Milvus Docker Compose 配置文件 curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh # 或者直接下载 docker-compose.yml wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh
2. 遇到的问题
使用 Docker Compose 部署时遇到了以下问题:
问题1: etcd 连接超时
问题2: Milvus 启动失败
panic: failed to create etcd client: context deadline exceeded
3. 失败原因分析
-
etcd 服务未正确启动: Docker Compose 中的 etcd 服务可能没有正确配置或启动
-
网络连接问题: 容器间网络通信出现问题
-
配置复杂: Docker Compose 需要配置多个服务(Milvus、etcd、MinIO 等)
4. 解决方案尝试
尝试了以下方法但都未成功:
# 尝试重启 Docker Compose 服务 docker-compose down docker-compose up -d # 检查容器状态 docker-compose ps # 查看日志 docker-compose logs milvus docker-compose logs etcd
第二次尝试:官方脚本部署(成功)
由于 Docker Compose 部署遇到问题,转而使用官方提供的 standalone_embed.sh 脚本部署。官方文档:快速入门 | Milvus 文档

成功部署步骤
1. 下载安装脚本
# 下载 Milvus 安装脚本 curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh # 给脚本执行权限 chmod +x standalone_embed.sh
2. 启动 Milvus 部署
# 启动 Milvus 部署 bash standalone_embed.sh start
3. 部署过程详解
3.1 镜像下载阶段
部署脚本会自动下载 Milvus v2.6.2 镜像,这个过程可能需要 10-30 分钟,具体时间取决于网络速度:
Unable to find image 'milvusdb/milvus:v2.6.2' locally v2.6.2: Pulling from milvusdb/milvus 7646c8da3324: Already exists 232928bf0cec: Pull complete d0c0ceb106a0: Pull complete 7dfb73baa5d3: Pull complete c982406aa267: Pull complete d7388a78c1a2: Pull complete ab1c981276db: Pull complete Digest: sha256:215400dc74c03393e4c28d808c1efbbbd7f1f46e94ba73b4e583df3ccd81105e Status: Downloaded newer image for milvusdb/milvus:v2.6.2
3.2 配置文件自动生成
脚本会自动创建必要的配置文件:
-
embedEtcd.yaml: etcd 数据库配置 -
user.yaml: Milvus 用户自定义配置
3.3 容器启动阶段
Wait for Milvus Starting... Start successfully. To change the default Milvus configuration, add your settings to the user.yaml file and then restart the service.
遇到的问题及解决方案
问题1: 镜像下载缓慢
现象: 下载卡在某个进度,长时间无响应
解决方案:
-
配置国内镜像源:
# 创建 Docker 配置目录
sudo mkdir -p /etc/docker
# 配置镜像源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
EOF
# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
-
中断并重新下载:
# 按 Ctrl+C 中断当前下载 # 重新运行部署脚本 bash standalone_embed.sh start
问题2: 网络连接不稳定
现象: 下载过程中断,需要重新开始
解决方案:
-
确保服务器网络连接稳定
-
使用
screen或tmux保持会话:
# 使用 screen 保持会话 screen -S milvus bash standalone_embed.sh start # 按 Ctrl+A+D 分离会话
问题3: 版本冲突
现象: 服务器上已有旧版本 Milvus 镜像
解决方案:
# 查看现有镜像 sudo docker images | grep milvus # 删除旧版本(可选) sudo docker rmi milvusdb/milvus:v2.6.0-rc1 # 继续下载新版本 bash standalone_embed.sh start
Docker Compose vs 官方脚本对比
| 特性 | Docker Compose | 官方脚本 |
|---|---|---|
| 配置复杂度 | 高,需要配置多个服务 | 低,一键部署 |
| 稳定性 | 依赖多个服务协调 | 高,嵌入式 etcd |
| 资源占用 | 高,多个容器 | 低,单容器 |
| 维护难度 | 高,需要管理多个服务 | 低,统一管理 |
| 适用场景 | 生产环境,需要高可用 | 开发测试,快速部署 |
部署验证
1. 检查容器状态
# 查看 Milvus 容器状态 sudo docker ps | grep milvus # 预期输出 dd56dc7401fb milvusdb/milvus:v2.6.2 "/tini -- milvus run…" 59 seconds ago Up 59 seconds (healthy) 0.0.0.0:2379->2379/tcp, :::2379->2379/tcp, 0.0.0.0:9091->9091/tcp, :::9091->9091/tcp, 0.0.0.0:19530->19530/tcp, :::19530->19530/tcp milvus-standalone
2. 健康检查
# 检查服务健康状态 curl -f http://localhost:9091/healthz # 预期输出 OK
3. 查看容器日志
# 查看 Milvus 启动日志 sudo docker logs milvus-standalone
服务配置
端口说明
-
19530: Milvus 服务端口,用于客户端连接
-
9091: Milvus WebUI 端口,用于管理界面
-
2379: etcd 端口,用于分布式协调
安全组配置
在云服务器控制台配置安全组,开放必要端口:
# 阿里云/腾讯云安全组规则 # 入方向规则: # 端口: 19530, 协议: TCP, 源: 0.0.0.0/0 # 端口: 9091, 协议: TCP, 源: 0.0.0.0/0 # 端口: 2379, 协议: TCP, 源: 0.0.0.0/0 (可选)
防火墙配置
# Ubuntu/Debian sudo ufw allow 19530 sudo ufw allow 9091 sudo ufw allow 2379 # CentOS/RHEL sudo firewall-cmd --permanent --add-port=19530/tcp sudo firewall-cmd --permanent --add-port=9091/tcp sudo firewall-cmd --permanent --add-port=2379/tcp sudo firewall-cmd --reload
使用 Milvus
1. 访问 WebUI
部署成功后,可以通过浏览器访问 Milvus WebUI:
http://your-server-ip:9091/webui/
2. Python 客户端连接
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
# 连接到 Milvus
connections.connect(
alias="default",
host='your-server-ip', # 替换为你的服务器IP
port='19530'
)
print("Successfully connected to Milvus!")
# 创建集合示例
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)
]
schema = CollectionSchema(fields, "test collection")
collection = Collection("test_collection", schema)
print("Collection created successfully!")
3. 基本操作示例
import numpy as np
from pymilvus import Collection
# 获取集合
collection = Collection("test_collection")
# 插入向量数据
vectors = np.random.random((1000, 128)).tolist()
collection.insert([vectors])
# 创建索引
index_params = {
"metric_type": "L2",
"index_type": "IVF_FLAT",
"params": {"nlist": 128}
}
collection.create_index("embedding", index_params)
# 加载集合到内存
collection.load()
# 搜索向量
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search(
data=[vectors[0]],
anns_field="embedding",
param=search_params,
limit=10
)
print(f"Search results: {results}")
管理命令
常用管理操作
# 启动服务 bash standalone_embed.sh start # 停止服务 bash standalone_embed.sh stop # 重启服务 bash standalone_embed.sh restart # 升级到最新版本 bash standalone_embed.sh upgrade # 删除容器和数据(谨慎使用) bash standalone_embed.sh delete
数据备份
# 备份数据目录 tar -czf milvus_backup_$(date +%Y%m%d).tar.gz volumes/ # 恢复数据 tar -xzf milvus_backup_20231201.tar.gz
性能优化建议
1. 资源配置
-
内存: 根据数据量调整,建议至少 8GB
-
CPU: 多核 CPU 有助于并行处理
-
存储: 使用 SSD 提高 I/O 性能
2. 索引优化
# 选择合适的索引类型
index_params = {
"metric_type": "L2", # 或 "IP", "COSINE"
"index_type": "IVF_PQ", # 或 "HNSW", "IVF_FLAT"
"params": {"nlist": 1024, "m": 8, "nbits": 8}
}
3. 查询优化
# 调整搜索参数
search_params = {
"metric_type": "L2",
"params": {"nprobe": 16} # 增加 nprobe 提高召回率
}
监控和维护
1. 系统监控
# 监控容器资源使用 docker stats milvus-standalone # 监控系统资源 htop
2. 日志管理
# 查看实时日志 docker logs -f milvus-standalone # 清理旧日志 docker system prune -f
3. 健康检查
# 定期健康检查脚本 #!/bin/bash if curl -f http://localhost:9091/healthz > /dev/null 2>&1; then echo "Milvus is healthy" else echo "Milvus is down, restarting..." bash standalone_embed.sh restart fi
常见问题排查
1. 连接失败
# 检查端口是否开放 netstat -tulpn | grep 19530 # 检查防火墙状态 sudo ufw status
2. 内存不足
# 检查内存使用 free -h # 清理 Docker 缓存 docker system prune -a
3. 磁盘空间不足
# 检查磁盘使用 df -h # 清理 Docker 镜像 docker image prune -a
经验总结
部署方式选择建议
-
开发测试环境: 推荐使用官方脚本
standalone_embed.sh-
配置简单,一键部署
-
资源占用少
-
维护方便
-
-
生产环境: 可以考虑 Docker Compose 或 Kubernetes
-
需要更多配置和调试
-
支持高可用和负载均衡
-
需要专业的运维知识
-
关键成功因素
-
网络稳定性: 确保下载过程中网络连接稳定
-
资源配置: 根据实际需求调整服务器配置
-
安全设置: 正确配置安全组和防火墙
-
监控维护: 定期检查服务状态和资源使用
-
版本选择: 使用稳定版本而非候选版本
下一步
部署完成后,你可以:
-
通过 WebUI 管理 Milvus,我用的是attu,同样通过docker部署
-
使用 Python/Java 等客户端进行开发
-
根据业务需求调整配置参数
-
建立监控和备份机制
Milvus 作为强大的向量数据库,为 AI 应用提供了坚实的基础设施支持。本文能够帮助你顺利部署和使用 Milvus!
更多推荐

所有评论(0)